LLM が事実と異なる情報や、存在しない API・ファイル・関数をもっともらしく生成してしまう現象。AI コーディングで最も警戒すべき失敗モード。
概要
ハルシネーションは「嘘をつく」のではなく、統計的にもっともらしいトークンを生成した結果、現実には存在しないものが出力される 現象。見た目が正しく、構文も通ってしまうため、レビューが甘いと本番に混入する。
よく見られるパターン:
| パターン | 具体例 |
|---|---|
| 存在しない API 呼び出し | client.batchUpsertAll() のような未定義メソッド |
| 実在しないファイル参照 | docs/specs/auth-flow-v2.md を読み込めと指示 |
| バージョン違いの混在 | Tailwind v4 + v3 の記法が混ざる |
| 誤った引数順序 | fetch(body, url) のように順序逆転 |
| 存在しないライブラリ | npm install rakuten-sdk のような偽パッケージ |
ハルシネーションが起きる典型条件
- コンテキストが曖昧で「何を作るか」が定義されていない(→ 推測で埋める)
- 最新ドキュメントを参照していない(→ 古いバージョンの記憶で補完)
- 参照実装を Read していない(→ 類似プロジェクトの記憶で補完)
- 記憶ベースで「〜のはず」と回答している(Evidence Gate 違反)
抑制する 4 つの対策
- コンテキストを明確にする — 壁打ちで背景・目的・スコープを整理(壁打ち・規模判定編)
- 参照実装を必ず Read する — 既存の本番コードが最も信頼できるリファレンス
- 公式ドキュメントを確認する — context7 MCP や WebFetch で最新 API を取得
- Evidence Gate を運用する — 「確認」キーワード検出時にツール実行を強制(品質ゲート編)
検出する仕組み
ハルシネーションを事後検出する仕組みも重要。implementation-validator は以下を自動検出する。
NotImplementedException/NotImplementedError— stub 実装の検出TODO / FIXME / HACK / TBD— 未完了の痕跡- 空テスト — 「方向性は合っている」で PASS にさせない
関連記事
- ステアリング駆動開発とは:概要 — 壁打ちでハルシネーションを抑制する理由
- 品質ゲート編 — Evidence Gate と完全性チェックによる検出
- コンテキスト設計編 — ハルシネーション抑制のためのコンテキスト設計
関連用語
- Context Rot — コンテキストを広げすぎた結果、関連情報が希薄化して起きる品質劣化
- コンテキストエンジニアリング — ハルシネーション抑制の主要な対策