Day 6・AIを動かす
ミニ実装: 文章を要約するツール
長い文章を渡すと短くまとめて返す、小さな要約ツールを関数として組み立てる。
作るもの: 要約関数
ここでは「長い文章を渡すと、短い要約が返ってくる関数」を作ります。Day 4で学んだ関数の考え方と、Lesson 2のLLM呼び出しを組み合わせるだけです。中身がAIになっても、『入力を渡して戻り値を受け取る』という使い勝手は普通の関数と変わりません。
import os
from anthropic import Anthropic
client = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
def summarize(text: str, max_sentences: int = 3) -> str:
prompt = (
"次の文章を日本語で要約してください。\n"
"条件: " + str(max_sentences) + "文以内。事実を追加しない。\n\n"
"----\n" + text + "\n----"
)
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=300,
messages=[{"role": "user", "content": prompt}],
)
return response.content[0].text.strip()
article = "(ここに長い文章が入る)"
print(summarize(article, max_sentences=2))なぜ関数にまとめるのか
要約の手順を summarize という1つの箱に閉じ込めると、呼ぶ側は中身を知らなくても text を渡すだけで使えます。あとでモデルを変えたり条件を足したりするときも、この関数の中だけ直せばよく、影響が広がりません。
プロンプトに「条件」を書く
上のコードで注目してほしいのは、プロンプトの中に『3文以内』『事実を追加しない』という条件を書いている点です。AIは指示された通りに動こうとするので、望む形を言葉で明確に伝えるほど、結果が安定します。これはLesson 4で扱う「プロンプト設計」の入り口です。
あいまいな指示
「要約して」だけ。長さや制約が不明で、結果が毎回バラつく。
この文章を要約して。条件つきの指示
文数の上限と『事実を追加しない』という制約を明示。結果が安定し、検算もしやすい。
次の文章を3文以内で要約して。元の文にない事実は加えないで。結果を鵜呑みにしない: 検算
AIの要約は自然に読めますが、たまに元の文章にない内容を混ぜることがあります。これをハルシネーション(hallucination、AIがもっともらしい嘘を生成する現象)と呼びます。だから、要約に出てきた数字や固有名詞が本当に元の文章にあるかを確かめる『検算』の習慣が大切です。
- 要約に出てきた数字・日付・名前が元の文章にあるか確認する
- 元の文章より内容が『増えて』いないかを見る(増えていたら要注意)
- 重要な用途では、要約だけでなく必ず原文も参照できるようにしておく
要約は『短くなった原文』ではなく『AIの再構成』
要約は原文を機械的に切り貼りしたものではなく、AIが読み直して書き直したものです。だからこそ、便利さと引き換えに『事実がずれる可能性』が常にあると意識してください。
AIにはこう聞く
「この要約関数に、要約結果が元の文章に含まれない固有名詞を含んでいないか簡単にチェックする処理を足して」と頼むと、検算の仕組みを一緒に作れます。ただし完全な検出は難しいので、最終判断は人が行う前提にしましょう。
読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。
理解度チェック
答えられれば、面接で説明できる状態に一歩近づきます。
要約の手順を summarize という関数にまとめる利点として、最も適切なものはどれ?
AIの要約に対する「検算」として適切な行動はどれ?
「AIの要約は短くなった原文そのものではない」とはどういう意味か、ハルシネーションという言葉を使って説明してください。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。