AIに全部貼るのをやめたら精度が上がった話
「とりあえず全部貼っておけば、AIが必要なところを拾ってくれるだろう」
そう思って、ソースコード丸ごと、ドキュメント全文、ログファイルの全行をコピペしていた時期がある。結果どうなったかというと、回答がぼんやりするか、的外れな部分を参照されるか、そもそも長すぎてエラーになるか。どれかだった。
最近、プロンプト設計のガイドラインをいくつか読み込んで、コンテキスト(AIに渡す情報)を削る方向に振り切ってみた。結論から言うと、出力の精度が明らかに上がった。今回は、その過程で見えてきた3つの原則を共有する。
そもそも「貼りすぎ」で何が起きるのか
AIモデルは、渡された文脈の中から関連しそうな部分を見つけて回答を組み立てる。ここで問題になるのが「関連箇所と質問の距離」だ。
Anthropicの長文コンテキスト実験によると、質問(指示)と参照すべき情報が離れていると、性能が落ちる傾向があるという。つまり、大量の情報を貼れば貼るほど、本当に必要な部分が「埋もれる」リスクが高まる。
さらに、Google Cloudのガイドでは「プロンプトは4,000文字を超えない方が良い」と明記されている。上限に達する前に、品質面で不利になるということだ。
要するに、「多ければ多いほど良い」は幻想だった。
原則1:関連する部分だけ抜き出す
最初に試したのは、全文コピペをやめて「このタスクを解くのに必要な部分」だけを抜粋する方法。
たとえばバグ修正の相談なら、該当する関数とエラーメッセージだけを貼る。「念のため」で周辺コードを500行入れるのはやめる。
Anthropicのドキュメントでは、関連する引用をscratchpad(作業メモ)に集めてから回答させると精度が上がる傾向があると紹介されている。ただし、この方法には「わずかなレイテンシ増」というコストがある。応答が少し遅くなる代わりに精度が上がる、というトレードオフだ。
実際にやってみると、抜粋作業自体は面倒に感じる。でも「どこが本質か」を自分で考える過程で、問題の整理が進む。AIに聞く前に半分解決していることもある。
原則2:指示は末尾に置く
これは意外と見落としがちなポイント。
長い文脈を渡すとき、冒頭に「以下を要約して」と書いて、その後にドキュメントを貼っていた。でもAnthropicのガイドでは、指示をプロンプト末尾に置くことの重要性が明記されている。
理由は原則1と同じ。指示と参照情報の距離が近いほど、モデルが正しく紐づけやすい。
具体的な構成はこうなる:
[参照情報(ドキュメント、コード等)]
---
上記の情報を踏まえて、〇〇について回答してください。
Geminiの公式ドキュメントでも、長いデータの後に「Based on the information above…」のようなアンカー(つなぎの言葉)を置く工夫が紹介されている。参照テキストがある場合は「このテキストを使って答えて」と境界を明確にすると、不要な推測を抑えやすいという。
構造を整えるだけで、同じ情報量でも出力が安定する。コスパの良い改善策だと思う。
原則3:複雑な問題は分割して段階的に聞く
「この設計書を読んで、問題点を洗い出して、改善案を出して、実装計画も立てて」
こういう全部入りのプロンプトを投げていた時期がある。返ってくるのは、どれも中途半端な回答だった。
Google Cloudのガイドでは、複雑な問題は複数リクエストに分割することが推奨されている。1回のプロンプトで解決しようとせず、段階的に進める方が焦点が合いやすい。
例えば:
- 「この設計書の構成を箇条書きで整理して」
- 「整理した構成のうち、〇〇の部分について問題点を挙げて」
- 「その問題点に対する改善案を3つ提案して」
分割すると、各ステップで「必要な情報」が明確になる。結果として、1回あたりの貼る量も自然に減る。
few-shot(例示)の入れすぎにも注意
「こういう形式で出力してほしい」というとき、few-shot(入出力の例を見せる手法)は有効だ。ただし、Geminiのガイドには「例が多すぎると、例に過適合する」リスクが書かれている。
例に引っ張られて、本来のタスクとズレた出力になることがある。最小限の例から始めて、足りなければ足す、という順番が安全。
この方法が向かない場面
正直に書くと、毎回この原則を守るのは手間がかかる。
サクッと雑談レベルで聞きたいとき、抜粋作業をするのは面倒すぎる。全文貼って「適当に要約して」で済ませたい場面はある。
あと、そもそも入力情報の品質が怪しい場合は、コンテキストを削る以前の問題になる。長文Q&Aの実験でも「正解ラベル自体が誤っている例がある」と注意が書かれていた。AIに渡す前に、その情報が正しいかを確認する手間は省けない。
試すなら「いつものプロンプト」を1つ変えるところから
この3原則を全部同時に適用しようとすると、プロンプトを書くのが億劫になる。
まずは、よく使うプロンプト1つだけを対象にしてみるのがおすすめ。「全文貼り」を「関連部分だけ抜粋」に変えるだけでも、違いが体感できるはずだ。
情報を削る勇気が、かえって精度を上げる。矛盾しているようで、試してみると納得できる話だった。