ここ最近どの現場でも生成AIの導入が進んでるように見えます。
チャットGPTが出た当初は使わずになんていわれてましたが
今や技術者が調べものする際には欠かせないものになっているかと思います。
(自分は出た当初から使いまくってました笑)
ただ新卒の子が使ったりすると技術力が上がらないなど導入したことにより
様々な新しい課題がでてきていますが
今回はどんな人でも必ずぶち当たる生成AIを使った調査で
気を付けること「ハルシネーション」について簡単にまとめたいと思います。
ハルシネーションってなに?
ハルシネーションとは
AIが、事実ではない情報をあたかも事実であるかのように、自信を持って生成してしまう現象のことです。日本語では「幻覚」と訳されますが、AIが何かを見間違えているわけではなく、もっともらしい文章を作り出す過程で、実際には存在しない情報を作り出してしまうことを指します。
由来は人間の知覚現象である「幻覚(実在しないものを実在するかのように知覚すること)」からの比喩で、AIが実在しない事実をまるで実在するかのように出力する様子になぞらえて使われるようになった用語です。
AI(特に大規模言語モデル)は、学習したデータをもとに「この文脈では次にどんな言葉が来るのが自然か」を確率的に予測して文章を生成しています。事実かどうかをチェックする仕組みではなく、文章として自然かどうかを優先する仕組みのため、結果として誤った情報や存在しない情報が、文法的にも文脈的にも違和感なく出力されてしまうことがあります。これがハルシネーションと呼ばれる現象です。
つまりAIというのはプロンプトをもとにもっともらしい文章を作ろうとするので
正確性よりもっともらしい文章またはユーザーのプロンプトに寄り添った文章を作ろうとするため事実とは誤った内容を提示してしまうのです。
調査でのハルシネーション:具体例
では具体的に調査でのハルシネーションについてあげていきます。
存在しないライブラリ・パッケージ名のでっち上げ
「この処理には〇〇というライブラリが便利です」と紹介されるが、実際にはnpmやPyPIに存在しないパッケージ名だった、というケース。もっともらしい命名規則(実在するライブラリと似た名前)になっていることが多く、検索せずにpip installやnpm installを実行してしまうと、パッケージ未存在エラーで気づくか、最悪の場合は同名の悪意あるパッケージを踏んでしまうリスクもある(タイポスクワッティング的な被害)。
実在しないAPI・メソッドの説明
「このライブラリの〇〇()メソッドを使えば一発です」と具体的なコード例まで出してくるが、そのバージョンにはそのメソッドが存在しない、または別ライブラリのメソッドと混同している。公式ドキュメントを見ずにそのまま実装すると、実行時エラーで初めて気づく。
バージョン違いの仕様を混同した回答
学習データに複数バージョンの情報が混在しているため、廃止されたAPI(deprecated)を「現行の推奨方法」として紹介したり、逆に古いバージョン向けの書き方を最新版のコードとして提示したりする。フレームワークやライブラリの破壊的変更が多いもの(React、Next.js、各種SDKなど)で特に起きやすい。
動かないのに「動作確認済みです」と言い切るコード
実際には構文エラーや論理エラーがあるコードを、自信満々に「このコードは正しく動作します」と提示してくる。AIはコードを実際に実行しているわけではなく、文章として自然な形を生成しているだけのため、検証はされていない。
存在しない設定ファイルやコマンドオプション
CLIツールのオプションや設定ファイルのキー名を、もっともらしく捏造して提示してくる。「--force-syncオプションを使えば」のように具体的に言われると信じやすいが、実際にはそのオプション自体が存在しない。
セキュリティ上の誤った実装を「ベストプラクティス」として提示
古い・脆弱な実装パターン(非推奨の暗号化方式、SQLインジェクション対策が不十分なクエリなど)を、特に警告もなく「一般的な実装方法」として紹介してくることがある。
存在しない原因をもっともらしく断定する
実際のログやスタックトレースの内容と無関係に、「これは〇〇が原因です」と自信満々に断定してくることがある。一見筋が通った説明に聞こえるが、実際のコードを見ると該当箇所自体が存在しない、というケース。
間違った修正方法を提示する
エラーメッセージの文言だけから一般的なパターンに当てはめて回答するため、そのプロジェクト固有の事情(独自設定、特殊な依存関係など)を無視した的外れな修正コードを提示してくることがある。
見分け方・チェックリスト
ライブラリ・パッケージ名は必ず公式レジストリで確認する
npm、PyPI、crates.ioなど、公式のパッケージレジストリで実在するか、ダウンロード数やメンテナンス状況も含めて確認してからインストールする。
メソッド・API名は公式ドキュメントで照合する
提示されたコードのメソッド名やオプションを、そのライブラリの公式ドキュメント(できれば使用しているバージョンのもの)で実在確認する。
バージョンを明示してから質問する
「React 18系で」「Python 3.12で」のように使用バージョンを明示して質問すると、混同のリスクはやや下がる。ただしそれでも誤りが出ることがあるため過信は禁物。
コードは必ず実行して検証する
「動作確認済み」という説明文を信じず、実際にローカルやテスト環境で実行してエラーが出ないか確認する。可能であればユニットテストも書く。
セキュリティ関連の実装は特に裏取りする
認証・暗号化・入力値検証など、セキュリティに関わる実装は、公式ドキュメントやOWASPなど信頼できる情報源で必ず照合する。
「初めて聞く設定・オプション」は逆に疑う
聞いたことのないコマンドオプションや設定キーが出てきた場合、まずそのツールの公式ヘルプ(--help)やドキュメントで存在確認する。
AIに「本当に存在するか」を聞き直しても過信しない
AI自身に確認させても、誤りをそのまま自信満々に肯定することがあるため、最終的な確認は公式ドキュメントや実行環境で行う必要がある。
またエラーの原因として指摘された箇所を必ず実際のコード・ログで確認し、修正案は適用前に変更内容を理解した上でテスト環境で検証する。「直りました」という体感だけで終わらせず、根本原因が説明と一致しているか確認するのがポイント。
ハルシネーションはなぜ起きるのか
生成AIはコードを実行して検証しているのではなく、学習データの中から「この文脈で次に来そうな自然なコード・文章」を確率的に生成している。そのため、構文的に正しそうで説明文ももっともらしくても、実際に動くかどうかは別問題になる。
特に起きやすい状況は次の通り。
- マイナーなライブラリ、社内独自ツール、新しいバージョンのAPIなど、学習データに少ない・存在しない情報を聞かれたとき
- 複数のライブラリ・フレームワークの似た機能名やAPI設計が、学習時に混同されやすいとき
- 「このエラーを直すコードを書いて」のように、解決策の提示を強く求めるプロンプトを送ったとき(実在しない方法ででも答えを埋めようとする)
- 質問者がライブラリ名やメソッド名を少し間違えて聞いた場合、それに合わせて存在しない情報を辻褄合わせしてくるとき
生成AIの仕組みをもう少し深掘り
「次の単語(トークン)」を予測しているだけ
生成AIの正体は、ざっくり言うと「直前までの文章を見て、次に来る単語(正確には『トークン』という単語の断片)を予測する」という処理をひたすら繰り返しているだけの仕組みです。「今日はいい」の次に来る言葉として「天気」が高確率、「天才」が低確率、というように、過去に学習した大量の文章データから「この並びの次にはこの単語が来やすい」という統計的な傾向を覚えていて、それに基づいて一語ずつ文章を生成しています。
「正しいから」ではなく「自然だから」選ばれる
ここが誤解されやすいポイントですが、AIは「これが事実として正しいか」を判断基準にしているわけではなく、「学習データの中でこの並びが多かったか(=自然な文章としてもっともらしいか)」を基準に単語を選んでいます。そのため、文法的にも文脈的にも完璧に自然な文章であっても、中身が事実と一致しているかは別問題、ということが起こります。
コードも同じく「それらしい並び」で生成される
コードについても同様で、AIは構文解析やコンパイル、実行をして検証しているわけではなく、「このエラーメッセージ・この言語の文脈なら、こういうコードが続くことが多い」という統計的なパターンでコードを生成しています。実際に動かして確認しているわけではないので、構文的には自然(=コードっぽく見える)でも、実行するとエラーになる、存在しないメソッドを呼んでいる、ということが起こり得ます。
例えるなら「予測変換の超強化版」
スマホの予測変換が「お疲れ」と打つと「様です」を提案してくるのと、仕組みの根っこは似ています。大量の会話データから「お疲れ」の次によく来る言葉を学習しているだけで、文の意味を理解して提案しているわけではありません。生成AIはこれを、文単位・段落単位・コード単位という非常に長い文脈で、桁違いに高精度に行っているイメージです。精度が高いぶん「理解して答えている」ように見えてしまいますが、根本の仕組みは確率的な予測である、というのが押さえておきたいポイントです。
最後に
生成AIは便利なツールですが自身のスキルや生成AIの仕組みがわかって初めて便利に使えるツールです。
ハルシネーションについてまとめましたがこれが起きる要因とした生成AIの仕組みがわかればさらにこの回答は少し変だやこれはさすがにありえないことを言ってるというのを直感的にわかるようになります。
生成AIはハルシネーションだけではなくユーザーの意見を肯定的にとらえたりする傾向が多く滅茶苦茶な回答になったりもするのでこの内容はあってるのか常に目を光らせて調査に使用して作業効率をあげてください。
ここまで読んでいただき、ありがとうございます。もしこの記事の技術や考え方に少しでも興味を持っていただけたら、ネクストのエンジニアと気軽に話してみませんか。
- 選考ではありません
- 履歴書不要
- 技術の話が中心
- 所要時間30分程度
- オンラインOK