プロンプトを改善しようとして、システムメッセージを長くした経験はありませんか?
ルールを追加しても、モデルを切り替えても、結果は少し良くなってまた別の場所で崩れる。
私も同じ経験をしてきました。
先日、海外のエンジニアがRedditに興味深い投稿をしていました。
3000時間以上プロンプトエンジニアリングに取り組んだ末にたどり着いた考え方です。
本記事では、その内容を紹介します。
「良いプロンプトの書き方」を考えるのをやめた
投稿者は長い間、「どうすればより良いプロンプトが書けるか」と考えていたそうです。
しかし、ある時点で問いを変えました。
「なぜモデルはこういう失敗をするのか」と。
すると、バラバラに見えていた問題が整理されていきました。
失敗には共通のパターンがあったのです。
投稿者はそれを16個に分類しました。
よくある勘違い
プロンプトがうまくいかないとき、多くの人は次のように考えます。
- 指示が曖昧だったのかもしれない
- ルールをもっと厳しくすべきだった
- 思考の過程をもっと細かく指示すべきだった
- RAGで取得した情報が足りなかった
- モデルの性能が不足している
しかし、実際に起きているのは別のことが多いのです。
- 複数のステップを経るうちに、話の方向がずれていく
- 正しい情報を取得しても、間違った部分を採用してしまう
- モデルが「これが正解だ」と思い込んで軌道修正しない
- 長い文脈の途中で、前半の内容を忘れてしまう
- エージェントが自分の記憶を上書きしてしまう
これらは「プロンプトの書き方」の問題ではありません。
AIの推論過程で起きる構造的な問題です。
16の失敗パターン
投稿者が分類した16のパターンを、実際に遭遇する場面に即して説明します。
- 情報の取り違え
RAGで正しい文書を取得したはずなのに、回答が的外れになる現象です。
原因は、近くにあった別の段落から情報を拾ってしまうこと。
「出典は合っているのに内容が違う」という症状が出たら、これを疑ってください。 - 最初の解釈に固執する
質問を言い換えても、モデルが同じ誤解を繰り返す現象です。
何度説明し直しても「そうですね、つまり○○ということですね」と同じ結論に戻ってしまう。
最初に選んだ解釈を疑わないのです。 - 途中で目的を見失う
複数ステップのタスクで、最初は順調だったのに徐々に脱線していく現象です。
モデルは関連する話を続けています。
しかし、元々の目的からは離れている。
5ステップ目あたりで「あれ、何の話だったっけ」となります。 - 自信満々で間違える
流暢な説明とともに、完全に間違った回答をする現象です。
指摘すると謝罪して訂正します。
しかし、訂正後もまた別の間違いを自信満々に語る。
「わからない」と言えないのです。 - 似ているけど違う情報を取得する
ベクトル検索で高いスコアが出たのに、人間から見ると全然違う内容が返ってくる現象です。
表面的な言葉は似ていても、意味が異なる文書を取得してしまう。
検索スコアを信用しすぎると起きます。 - 行き詰まりを認めない
推論の途中で矛盾に気づいても、「詰まった」と言わずに別の話にすり替える現象です。
前提条件を静かに捨てて、新しい筋道を作り出す。
最初からそのつもりだったかのように振る舞います。 - 前回の会話を忘れる
「昨日決めたルール」をモデルが覚えていない現象です。
ユーザーは継続した議論のつもりでも、モデルは毎回ゼロから始めている。
ひどい場合は、自分が前回言ったことと矛盾します。 - どこで間違えたかわからない
システムが失敗したとき、原因を特定できない現象です。
内部でどんな判断をしたのか、どの時点でおかしくなったのか、手がかりがない。
ログを増やしても推論過程は見えません。 - だんだん回答が薄くなる
会話が進むにつれて、回答が短く、浅く、当たり障りのない内容になっていく現象です。
最初は具体的だったのに、後半は「一般的には」「場合によります」が増える。
文脈を処理する余力がなくなっているような印象を受けます。 - 創造性が出ない
「別のアイデアを出して」と頼んでも、同じ内容の言い換えしか出てこない現象です。
パラメータを調整しても、構造的に新しい発想は生まれない。
バリエーションではなく、パラフレーズしか出てきません。 - 計算や記号処理を間違える
自然言語の説明は正しいのに、数式やコードの部分だけ間違っている現象です。
「この式で計算します」と正しく説明した直後に、その式を間違えて適用する。
言葉と記号が分離しています。 - 自己言及で混乱する
「あなた自身について説明して」「この推論の限界は?」と聞くと、堂々巡りになる現象です。
矛盾したことを言ったり、同じ説明を繰り返したり、哲学的な言い回しで煙に巻いたりします。 - 複数エージェントが互いを邪魔する
専門性を分けるためにエージェントを増やしたのに、かえって混乱する現象です。
役割が曖昧になったり、あるエージェントの結論を別のエージェントが上書きしたりする。
個々は動いていても、全体としては破綻しています。 - 初期設定の順番で結果が変わる
システムの立ち上げ順序によって、動作が変わってしまう現象です。
最初に何を読み込んだか、どの順番で設定したかで、その後の挙動が決まる。
一度おかしくなると、毎回同じ問題が再発します。 - 設定が循環して起動しない
インフラもコードも準備できているのに、システムが安定しない現象です。
設定Aを読むにはBが必要で、Bを読むにはAが必要、という状態。
外から見ると「たまに動く」ように見えます。 - 本番で初めて壊れる
テストはすべて通ったのに、実際のユーザー入力で壊れる現象です。
テストでは想定内の入力しか試していなかった。
本番の「想定外」が、そのまま脆弱性になります。
失敗を分類する習慣
投稿者は、次のような習慣を勧めています。
問題が起きたとき、すぐにプロンプトを書き換えないでください。
まず、次の2点を書き出します。
- モデルに何を維持してほしかったのか
- どこでその期待が崩れたのか
そして、16パターンのどれに当てはまるか考えます。
「これは3番と9番の複合だな」と言えるようになると、当てずっぽうの修正が減ります。
問題の種類がわかれば、対策も絞り込めるからです。
コメント欄で見つけた面白い例え
投稿のコメント欄に、犬のしつけに例えた人がいました。
「もっと上手に靴を取ってこい」と叫び続けていた。
でも本当の問題は、靴を噛まないことを教えていなかったことだった。
この16パターンは「犬が靴を噛む16通りの方法」だと考えられます。
AIは役に立とうとします。
でも、どう役に立つべきか、何をしてはいけないかを明確にしないと、余計なことをしてしまう。
「良い指示を出す」より「悪い行動を防ぐ」方が大事な場面もあるのです。
まとめ
プロンプトがうまくいかないとき、「書き方が悪い」と考えがちです。
しかし、本当の原因はAIの推論過程にある構造的な問題かもしれません。
失敗のパターンを知っておくと、闇雲に試行錯誤する時間を減らせます。
「今日はモデルの調子が悪い」で終わらせず、「これは何番の問題か」と考える習慣をつけてみてください。
