- AI 幻覚が出力されますが、それはもっともらしく聞こえますが、誤りであるかサポートされていません。
- モデルは可能性の高いテキストを予測します。彼らには何が真実かを知る方法が組み込まれていません。
- 信頼できる情報源での回答をグラウンディングし、明確なプロンプトと自動チェックにより幻覚を減らします。
- 現在の技術ではこれらを完全に除去できないため、重要な出力については依然として検証が必要です。
サポート チャットボットは顧客に、返金には 14 日かかると伝えます。実際のポリシーには 7 とあります。答えは流暢で丁寧でしたが、間違っていました。これは AI の幻覚であり、AI 機能に慎重な設計とテストが必要な主な理由の 1 つです。
このガイドでは、その原因をわかりやすく解説し、実際の予防に焦点を当てています。最後近くの自動チェックは、私たちが自分で書いた回答例に対して実行した小さな Python スクリプトです。ライブ AI モデルに対して実行されたものではありません。
AI幻覚とは何ですか?
幻覚とは、生成 AI システムが事実として間違っているコンテンツ、でっち上げられたコンテンツ、または与えられた情報によって裏付けられていないコンテンツを、真実であるかのように提示することです。この用語は比喩です。モデルは物事を見ていません。事実に縛られることなく、良い回答のパターンに適合するテキストを生成します。
危険なのは自信です。幻覚による答えは、通常、同じトーン、構造、詳細を備えた正しい答えとまったく同じように見えます。
なぜ言語モデルが幻覚を起こすのか
大規模な言語モデルは、膨大な量のトレーニング データのパターンに基づいて、次のテキストであるトークンを予測するようにトレーニングされます。そこからいくつかのことがわかります。
- もっともらしいことと真実は同じではありません。 モデルは、答えがどのようなものになる傾向があるかを学習します。事実が欠如している場合でも、最も可能性が高いと思われる続きが発明される可能性があります。
- ギャップとカットオフ。 トレーニング データにはギャップがあり、特定の日付で終了します。モデルは、知らないと言うのではなく、欠落している事実を補うことができます。
- トレーニングは回答に報酬を与える。 モデルが幻覚を起こす理由に関する 2025 年の OpenAI 論文を含む研究では、一般的なトレーニングおよび評価方法では、不確実性を認めるよりも推測に報酬を与えると主張しています。これは、誤った回答に対するペナルティのない多肢選択式テストと同様です。
- あいまいなプロンプト。 あいまいな質問は、モデルに詳細を想定させます。
- 長い、または乱雑なコンテキスト。 長い入力に埋もれていると、重要な事実が見落とされる可能性があります。
一般的な幻覚の種類
| 種類 | 例 |
|---|---|
| でっち上げられた事実 | 間違った日付、数値、または統計 |
| 偽の情報源 | 存在しない引用、論文、URL |
| 不誠実な要約 | 文書にない主張を追加した要約 |
| でっち上げたコード | 存在しない関数またはパッケージへの呼び出し |
| 間違った推論 | 各ステップは問題ないように見えますが、結論は続きません |
| 誤った自信 | 信頼できる答えがない質問に答える |
研究者は多くの場合、これらを現実世界と矛盾する 事実 エラーと、モデルに与えられたソース資料と矛盾する 忠実性 エラーに分類します。自分のドキュメントに基づいて構築されたビジネス アプリの場合、通常、忠実度を最も直接テストできるものになります。
でっち上げられたコードには特別な警告が必要です。アシスタントが存在しないパッケージのインストールを提案すると、攻撃者はその名前で悪意のあるパッケージを公開する可能性があります。インストールする前に、提案された依存関係がすべて本物で信頼できるものであることを確認してください。
最も重要な場所
映画の幻覚的な事実は無害です。幻覚剤の投与量、法的引用、返金ポリシー、または財務数値はそうではありません。弁護士がAIツールによって発明された事件引用文を裁判所に提出した事例がよく報告されている。間違った答えのコストによってユースケースをランク付けし、そのコストが高い場合には最も強力な制御を適用します。
幻覚を軽減する方法
- 信頼できるデータに答えを根拠付けます。 モデルの記憶に頼るのではなく、関連する事実をモデルに与えます。
- 「わかりません」を許可します。 情報が利用できない場合はモデルに明示的に伝えるようにし、それを良い結果として扱います。
- 具体的にしてください。 明確で範囲の狭い質問では、工夫の余地が少なくなります。これについては、プロンプト エンジニアリング ガイドで詳しく説明しています。
- 提供された情報源からの 引用または引用を要求し、それらを自動的に検証します。
- 固定フィールドを含む JSON などの構造化された出力を使用すると、回答を検証しやすくなります。
- 計算、日付、ライブデータの検索など、モデルが苦手なものには ツールを使用します。
- 一か八かの決断を下すために人間に常に最新情報を伝えてください。
独自のデータによるグラウンディング
検索拡張生成 (RAG) が最も一般的な接地パターンです。システムは文書内で質問に関連する文章を検索し、それらの文章をプロンプトに含め、それらの文章からのみ回答するように指示します。それはでっち上げられた事実を大幅に減らしますが、治療法ではありません。モデルは依然として文章を読み間違えたり、文章を間違って組み合わせたり、自身の知識に頼ったりする可能性があり、検索ステップで間違った文書が返される可能性があります。したがって、接地されたシステムには依然としてチェックが必要です。
ヒント: 各回答の横に、取得した文章を記録します。間違った答えが報告された場合、取得が失敗したか、モデルが適切なコンテキストを無視したかをすぐに知ることができます。修正方法はそれぞれ異なります。
簡単な自動チェック
これは私たちが構築した安価なガードの 1 つです。ソース テキストに現れない回答内の任意の番号にフラグを立てます。大まかではありますが、価格、日数、制限などの数字は、まさに高価な幻覚が現れる場所です。
import re
SOURCE = """Refunds are paid within 7 days to the original payment method.
Orders over 1000 rupees ship free. Standard delivery takes 3 to 5 working days."""
def unsupported_numbers(answer, source):
found = set(re.findall(r"\d+", answer))
allowed = set(re.findall(r"\d+", source))
return sorted(found - allowed, key=int)
典型的なモデルの出力を模倣するために書かれた 3 つの回答をテストしました。
grounded -> no unsupported numbers
hallucinated -> ['14', '500']
partly -> ['1']
「幻覚」の回答では、14日間の返金と500ルピー以上の送料無料が謳われており、両方の番号が摘発された。 「部分的に」の回答には配達時間が正確に記載されていましたが、ポリシーでは決して言及されていない「速達で 1 日」が追加されており、これも引っかかりました。 2 番目のチェックでは、引用されたフレーズがソース内に実際に出現するかどうかを確認します。
{'paid within 7 days': True, 'no questions asked': False}
これらのチェックには明らかな制限があります。彼らは間違った単語、単位、数字のない裏付けのない主張を見落とし、正しい計算に誤ってフラグを立ててしまいます。多くのチームは、2 番目のモデルが各主張を情報源と照合してチェックする「裁判官としての LLM」ステップを追加します。その方がより多くのことがわかりますが、間違っている可能性もあるので、測定してください。
幻覚の検査
幻覚率は感情ではなく、測定する品質の指標として扱います。実践的なアプローチ:
- 既知の正解とソースを使用して、実際の質問のテスト セットを作成します。
- 答えがデータにないため、システムが拒否すべき質問を含めてください。
- 回答の正しさ、情報源への忠実さ、および適切な拒否について採点します。
- プロンプト、モデル、または取得設定を変更するたびにセットを実行します。
- 人間によるレビュー用の制作会話のサンプル。
回帰テストの規律はここにも適用されます。固定されたケースのセットが変更ごとに実行され、結果が時間の経過とともに比較されます。システムの接地方法を選択するときは、RAG、微調整、プロンプト エンジニアリングの比較でトレードオフが説明されます。
毎日のユーザーへのアドバイス
- 元の情報源からの事実、数字、引用、引用を確認します。
- 医療、法律、財務情報には特に注意してください。
- ソーステキストを貼り付けて、アシスタントにそこからのみ回答するように依頼します。
- 「あなたはどのくらい自信がありますか?そしてその根拠は何ですか?」と尋ねますが、答えが間違っている可能性もあることを覚えておいてください。
幻覚は解消できるのでしょうか?
現在のテクノロジーでは不可能です。新しいモデルとより優れたトレーニングにより、多くのベンチマークで幻覚発生率が減少し、接地は大いに役立ちますが、それでもどのシステムでも間違いは発生します。現実的な目標は、システム設計、テスト、およびユーザーへの明確なシグナルを通じて、エラーを稀にし、検出しやすく、影響を少なくすることです。
AIコーディングツールの幻覚
開発者はコーディング アシスタントの中で、クラスに存在しないメソッド、時代遅れの構成オプション、実際には別の原因によるエラーについての確信を持った説明など、幻覚に毎日遭遇します。防御策は人間のコードにすでに使用されているものです。結果をコンパイルまたは型チェックし、テストを実行し、これまで使用したことのない API については公式ドキュメントを読みます。認証、暗号化、入力検証など、セキュリティが重要なコードには特に注意してください。一見もっともらしいコードでも、微妙に安全ではない可能性があります。 AI の提案は、迅速ではあるが信頼性の低い同僚からの下書きとして扱います。多くの場合は役立ちますが、自動的に修正されることはありません。
まとめ
幻覚は言語モデルの仕組みに由来します。つまり、言語モデルは確認された事実ではなく、可能性の高いテキストを生成します。これらをオフにすることはできませんが、それらを考慮して設計することはできます。信頼できるデータで答えを根拠付け、モデルに「わかりません」と言わせ、重要な詳細の自動チェックを追加し、結果を継続的に測定します。
よくある質問
AI幻覚とは何ですか?
それは、AI システムが虚偽の情報や裏付けのない情報を生成し、それを真実として提示する場合です (たとえば、でっち上げられた統計、引用、政策の詳細など)。
なぜAIモデルは幻覚を見るのでしょうか?
言語モデルは、検証された事実ではなく、パターンに基づいて可能性の高いテキストを予測します。トレーニングデータのギャップ、あいまいなプロンプト、推測に報酬を与えるトレーニングはすべて、幻覚を起こしやすくします。
RAGは幻覚を止めますか?
モデルに信頼できる情報を与えることでそれらを減らしますが、それを止めることはできません。モデルは依然としてソースを誤って読み取る可能性があり、検索で間違ったドキュメントが返される可能性があります。
AIの幻覚をどのように検出できるのでしょうか?
回答をソース文書と比較し、数値と見積もりを自動的にチェックし、2 番目のモデルを使用して主張を検証し、サンプルを人々とレビューします。
AIの幻覚はなくなるのでしょうか?
モデルが改善されるにつれてレートは低下していますが、現在の方法ではレートを完全に除去することはできません。重要な出力には依然としてチェックと人間によるレビューが必要です。
学び続ける
テスト、WordPress、または SEO についてサポートが必要ですか?
私たちは、チームがより優れたソフトウェアを出荷し、サイトを成長させるのを支援します。あなたが取り組んでいることを教えてください。明確な次のステップを提案します。
詳しいガイドはこちら テスト、AI、最新の開発
この記事は気に入りましたか?トピックを選択して、最新のチュートリアルに直接アクセスしてください。
AI 幻覚の説明: 言語モデルが物事をでっち上げる理由とそれを軽減する方法
AI 幻覚について説明しました。幻覚とは何か、言語モデルが幻覚を生成する理由、一般的な種類、グラウンディングとプロンプトで幻覚を軽減する方法、そして私たちが実行した簡単なチェックです。
記事を読む →DevOps環境変数の説明: .env ファイル、シークレット、および設定が正しく行われている
実行した Python の例を使用して環境変数について説明します。環境変数の読み取りと設定、すべての値が文字列である理由、.env ファイル、プロセスの継承、シークレット、検証について説明します。
記事を読む →ソフトウェア開発API レート制限の説明: アルゴリズム、ヘッダー、および 429 エラーの処理
API レート制限については、実行したシミュレーションで説明します。トークン バケット、固定ウィンドウ、スライディング ウィンドウ、429 応答、レート制限ヘッダー、バックオフによる再試行、およびテスト制限です。
記事を読む →テスト自動化Python でのモッキング:unittest.mock、patch、およびテストを嘘にする間違い
Python でのunittest.mockによるモック、テスト済み: モックとreturn_value、side_effect、名前が使用されている場所のパッチ、仕様と自動仕様、日付のモック、およびよくある間違い。
記事を読む →ソフトウェアテストコードカバレッジの説明: 回線カバレッジとブランチカバレッジ、および 100% の実際の意味
実際のcoverage.pyの実行でコードカバレッジを説明: 行、分岐、条件のカバレッジ、レポートの読み取り、100%のカバレッジでもバグを見逃す可能性がある理由、および賢明なターゲット。
記事を読む →データベースとSQLSQL における DELETE、TRUNCATE、DROP: 違い、ロールバック、およびそれぞれをいつ使用するか
DELETE、TRUNCATE、DROP について、テスト済み SQL を使用して説明します。それぞれの削除内容、ロールバック、トリガー、ID リセット、速度、PostgreSQL、MySQL、SQL Server、SQLite の違いについて説明します。
記事を読む →データベースとSQLSQL ビューの説明: 作成、使用、落とし穴の回避、例を示します
SQL ビューについて、実行したクエリとともに説明しました。ビューの作成、ライブ結果、列の非表示、パフォーマンス、更新可能なビューと具体化されたビュー、壊れた依存関係、ベスト プラクティスについて説明します。
記事を読む →ソフトウェア開発TypeScript インターフェイスと型: 実際の違い、コンパイラでテスト
TypeScript インターフェイスと型、実際のコンパイラでチェック: 両方でできること、片方だけでできること、宣言のマージ、拡張と交差、および従うべき簡単なルール。
記事を読む →ソフトウェア開発Python *args と **kwargs の説明: 柔軟な関数と明確な例
Python の *args と **kwargs について、実行したコードで説明しました。パッキングとアンパッキング、パラメーターの順序、キーワードのみの引数と位置のみの引数、デコレーター、一般的なエラーです。
記事を読む →ソフトウェア開発Python Lambda 関数: 構文、実際の用途、および使用すべきでない場合
Python のラムダ関数について、実行したコードとともに説明します。構文、キーによるソート、マップとフィルター、クロージャー、遅延バインディング トラップ、通常の def がより適切な選択である場合。
記事を読む →人工知能AIエージェントとは何ですか?シンプルなエージェント ループを実行できる仕組み
AIエージェントとは何ですか?エージェント ループ、ツール、メモリ、ガードレール、実行した小さな Python ループ、実際のリスク、およびシンプルなチャットボットがより良い選択である場合についてのわかりやすいガイドです。
記事を読む →DevOpsモニタリングと可観測性: ログ、メトリクス、トレースによる本当の違い
モニタリングと可観測性について説明: 既知および未知の障害、ログ、メトリクスとトレース、チェックアウト インシデントのウォークスルー、ゴールデン シグナル、OpenTelemetry、および便利なアラート。
記事を読む →DevOpsDocker ボリュームとバインド マウント: コンテナ データを正しい方法で保持する
Docker ボリュームとバインド マウントについて説明します。コンテナ データが消える理由、名前付きボリューム、バインド マウント、tmpfs、Compose の例、バックアップ、アクセス許可、およびそれぞれをいつ使用するかについて説明します。
記事を読む →テスト自動化TDD と BDD: 主な違い、1 つの機能が両方の方法で構築され、それぞれをいつ使用するか
TDD と BDD は、両方の方法で構築された 1 つの割引機能で説明されています。実行したコードによるレッド-グリーン-リファクタリング、Given-When-Then シナリオ、ツール、トレードオフ、およびそれぞれをいつ使用するかです。
記事を読む →ソフトウェア開発Git mergeとrebaseの違い:例と使い分け
Git mergeとrebaseの違いを、実際のログ出力、比較表、rebaseの黄金律、安全なチームワークフローで解説します。
記事を読む →ソフトウェア開発Pythonのリスト内包表記:構文・例・使うべきでない場面
Pythonのリスト内包表記を解説:構文、フィルタ、if-else、ネストしたループ、実測した処理時間、そして通常のforループの方が良い場面。
記事を読む →データベースとSQLSQL JOINを例で解説(Inner・Left・Right・Full)
サンプルのテーブルとクエリでSQL JOINを順に解説。INNER、LEFT、RIGHT、FULL、CROSS、SELFに加え、よくある間違いとパフォーマンスのコツも紹介します。
記事を読む →