AIはハルシネーションを起こしているのではない。推測しているのだ。
AIモデルは、自分が間違っているかどうかを知りません。不確実性をフラグ立てするための信号も持っていません。入力に基づいて、次にくる可能性が最も高い単語を生成しているだけなのです。正解しているときも、間違っているときも、全く同じ自信を持って回答します。
これはシステムの欠陥ではありません。これがアーキテクチャの仕組みなのです。
LLMは次トークン予測器です。事実のデータベースを確認しているわけではありません。大規模なパターン補完を行っているのです。もしモデルが誤った回答をしたなら、それはあなたのプロンプトがその結果へと確率を導いてしまったからです。
この違いを知ることで、問題の解決方法が変わります。もしモデルがハルシネーションを起こしているなら、それは修正できません。しかし、プロンプトが曖昧なためにモデルが推測しているのなら、今すぐ修正できます。
Datawiseでは、AIモデルのベンチマークを行っています。そこで見えてくるのは、常に一定のパターンです。入力に詳細が欠けていると、モデルは誤った回答をします。モデルは、あなたが意図した質問ではなく、あなたが実際に投げかけた質問に答えているのです。
次の2つのプロンプトを比較してみてください。
- 「PythonでPostgresに接続するにはどうすればいいですか?」
- 「Ubuntu 24.04上で、Cloudflare Tunnelを経由し、接続プールを10、タイムアウトを30秒に設定して、psycopg3を使用してPythonからPostgresに接続する方法を教えてください。」
最初のプロンプトは、モデルに6つの推測を強いています。2番目のプロンプトは、制約条件を与えています。
具体的なプロンプトを書くのが難しいのは、自分自身が何を必要としているのかを理解するのが難しいからです。具体的なプロンプトが書けないのであれば、まだ自分が必要としているものが分かっていないということです。プロンプトを打つのをやめて、考えることから始めてください。
AIは、正しい回答と同じくらい流暢に誤った出力を生成します。文章は権威があるように聞こえ、コードは綺麗に見えます。モデルが情報の欠落を埋めようとしているという兆候は、どこにもありません。
シニアエンジニアは、出力をただ鵜呑みにすることはありません。彼らはこう問いかけます。「どこに解釈の余地を残してしまっただろうか?」と。曖昧な言葉はすべて、モデルがあなたの代わりに下した決定なのです。
言い回しを少し変えてプロンプトを再送するだけでは不十分です。それはログを確認せずにサービスを再起動するようなものです。根本的な原因を解決していることにはなりません。
出力が間違っているときは、まず自分のプロンプトを読み直してください。どこに解釈の余地を残したかを見つけ出し、以下の項目について制約を追加しましょう。
- 入出力
- エラーハンドリング
- 依存関係
- エッジケース
エンターキーを押す前に、文脈を全く知らない新人エンジニアになったつもりでプロンプトを読んでみてください。あなたが推測しなければならない箇所は、すべてモデルも推測する箇所になります。
モデルは、あなたの指示における不足している部分(ギャップ)を浮き彫りにします。そのギャップを修正しましょう。より精度の高い、隙のないプロンプトを作成してください。
任意参加の学習コミュニティ: https://t.me/GyaanSetuAi