AIが「存在しないメソッド」を自信満々に生成する理由——ハルシネーションとは何か
ゆるAIラジオ 第1回|AIスタートクラブ(山梨)
AIを使っていると、こんな経験はありませんか?
「AIが提案してくれたコードを実装したのに、テスト環境でいきなりエラーが出た」「AIが教えてくれた関数を調べてみたら、そもそも存在しなかった」
これは、あなたの使い方が悪いのではありません。ハルシネーションと呼ばれる、AIが持つ根本的な特性から生じる現象です。
今回は、Webエンジニアのたくむと、AIを4年間触り続けてきただいきの2人が、開発現場でのリアルな体験を交えながらハルシネーションの正体と付き合い方をゆるく語りました。
ハルシネーションとは何か
ハルシネーション(hallucination)は、英語で「幻覚・幻聴」を意味する言葉のAI版です。
AIが事実ではないことを、確信を持って出力してしまう現象のことを指します。
ポイントは「確信を持って」という部分です。AIは「わかりません」と言うのではなく、嘘であっても断言します。これがハルシネーションを厄介にしている理由のひとつです。
開発現場で起きるハルシネーション、3つのパターン
1. 存在しないメソッドを生成する
最も遭遇しやすいパターンです。
PythonのライブラリをAIに聞くと「こういう関数があります、こう使います」と教えてくれます。ところが実際に実装してみると、その関数は存在しておらず、インポートエラーが発生します。
しかもAIは、引数の説明や使い方まで丁寧に作り上げてくれます。書きぶりが文法的に完全に正しいため、コードを見ただけでは気づけないのが怖いところです。最終的にテストを実行して初めてエラーに気づく——というパターンに多くのエンジニアが陥っています。
気づくタイミングによって修正コストが大きく変わります。開発の途中で気づければその場で直せますが、テスト段階で初めてわかった場合、関連するすべての処理を見直す必要が出てきます。
2. 古いバージョンのAPIを使ったコードを生成する
AIの学習データには「鮮度の問題」があります。
ライブラリやフレームワークは2〜3ヶ月で大きく更新されることもありますが、AIが提案するコードは古いバージョンに基づいていることがあります。
「動くけどdeprecatedの警告が出る」という状態になったり、古い書き方が他のAPIと仕様でぶつかってエラーの原因になったりします。
3. 一見正しく見えるロジックバグを生成する
最もやっかいなパターンです。
コードの書きぶりは完全に正しく、文法的なエラーもありません。しかし、エッジケースを考慮していないバグが内部に潜んでいます。目視では気づけず、テストを書いて初めて発覚します。
なぜAIはハルシネーションを起こすのか
根本的な理由は、今の生成AIの仕組みにあります。
ChatGPTやClaudeのような生成AIは、**「次に来る言葉を確率で予測し続けるシステム」**です。文章を細かく分割した単位(トークン)を、確率的に選び続けることで文章を生成しています。
ここが重要です。AIは「この情報が正しい」という判断をしているわけではありません。「この文脈なら、次にこの言葉が来るはず」という予測をしているだけです。
例えるとスマホのテキスト入力時の予測変換と大枠は同じです。
つまり、AIは正解を「知っている」のではなく、それっぽい文章を「生成している」だけなのです。
だから、あるライブラリに「こういう関数がありそう」という予測が働けば、存在しない関数でも生成してしまいます。公式ドキュメントの書きぶりを学習しているため、ドキュメントの体裁まで整えて出力できてしまいます。
AIは全知全能の神ではなく、膨大なデータから「それっぽい次の言葉」を選び続けるシステムです。この理解が、AIと上手く付き合うための出発点になります。
エンジニアが実践しているハルシネーション対策3つ
対策1:プロンプトに制約を明示する
バージョンや条件をあらかじめプロンプトに書き込むことで、AIの出力精度が上がります。
Python 3.11で動作するコードを書いて。存在しない関数は使わないで。
このように具体的に指定すると、AIがそれに合わせた回答を返してくれるようになります。「存在しない関数を使わないで」と明示することで、AIが自己チェックする方向に働きます。
気が弱い部下に指示をする時をイメージしてみてください。
適当な指示だと部下は混乱し、気が弱く詳細に聞くこともできない…
前提としてAIは超優秀です。指示を詳細に伝えれば伝えるほどそれに応えてくれます。
そのためプロンプトはできるだけ詳細に書くことを意識します。
対策2:生成後に同じ会話内で問題点を確認させる
コードを生成してもらった後、同じ会話の流れの中でこう聞いてみます。
このコードに問題がある可能性はありますか?
重大なセキュリティリスクはありますか?
実際に、AIが生成したコードに対してセキュリティリスクを確認したところ、「こういった攻撃のリスクがあります」と大量に指摘されたことがあります。自分で出したコードの問題点を、聞き直すことで認めるわけです。
一度出力したものをそのまま信頼せず、ダブルチェックさせる習慣が有効です。
対策3:テストコードと一緒に生成させる
コードと同時にテストコードも出力させることで、矛盾が早期に発見しやすくなります。
AIが「自分で書いたコードを自分でテストする」形になります。ロジックのバグは見た目ではわからないことが多いため、実行できるテストコードをセットで用意することが重要です。
結局、AIとどう向き合えばいいのか
開発現場での対策をまとめると、本質はこの一言に集約されます。
「AIのコードは動くまでが仮説」
仮説を検証するプロセスを省かないこと——これがAIと開発する上で最も大切なスタンスです。
コーディングに限らず、AIとの付き合い方全般に言えることとして、こんな言い方もできます。
「信頼できるけど、たまに嘘をつく友達」ぐらいの距離感
こういう人周りにもいますよね。
経験や知識が豊富で頼り甲斐があるからこそプライドも高くわからないことを正直に伝えることができない人いますよね。
全部信じるのも間違い、全部疑うのも間違い。自分より知識はあるけれど、すべてが正解というわけではない——そういう前提でAIを使うことが、最終的に一番うまく活用できる姿勢だと思います。
人間でも、知識があっても常に正しいことを言うわけではありません。AIも同じです。
今日のまとめ
- ハルシネーションとは
AIが確率的に文章を生成する仕組みゆえに、正しいかどうかに関係なく「それっぽい答え」を出してしまう現象 - 開発現場での主な症状
存在しないメソッドの生成・古いAPIの使用・一見正しく見えるロジックバグ - なぜ起きるか
AIは「正解を知っている」のではなく「次に来そうな言葉を確率で選んでいる」だけ - 対策3つ
①プロンプトに制約を明示
②生成後に問題点を確認させる
③テストコードと合わせて生成 - 根本的なスタンス
動くまでが仮説。信頼できるけどたまに嘘をつく友達、ぐらいの距離感で
次回予告
次回は「そもそもAIはなぜ賢いのか?トークンと確率の話」をテーマに深掘りします。今回触れた「確率的に選んでいる」という仕組みをさらに詳しく解説する予定です。
ゆるAIラジオは毎週火曜日配信。
YouTube・Podcastにてお聴きいただけます。チャンネル登録・フォローをよろしくお願いします。
AIスタートクラブ(山梨)主催