日本語特化型RAGにおけるハルシネーション抑制のためのプロンプトエンジニアリング

なぜAIは嘘をつくのか?日本語RAGのハルシネーションを診断し制御する実践プロンプト処方箋

約13分で読めます
文字サイズ:
なぜAIは嘘をつくのか?日本語RAGのハルシネーションを診断し制御する実践プロンプト処方箋
目次

この記事の要点

  • 日本語特化RAGにおけるハルシネーションの原因と対策
  • プロンプト設計によるAIの誤情報生成の抑制
  • 参照情報に基づいた正確な回答の引き出し方

本ガイドの活用法:RAGの「嘘」は制御できる

「もっともらしい顔をして、平気で嘘をつく」。

これが、生成AIを社内導入しようとする際に最初に直面し、そして最も頭を抱える問題ではないでしょうか。特に、社内ドキュメントを検索して回答させるRAG(検索拡張生成)システムにおいて、存在しない社内規定を捏造されたり、顧客への回答を間違えられたりしては、業務効率化どころかリスクの温床になりかねません。

実務の現場では、「AIが信用できないから導入を見送る」というケースは少なくありません。しかし、ここで一つ重要な視点を共有させてください。

ハルシネーション(幻覚)は、AIの「バグ」ではなく「特性」です。

人間がうろ覚えの知識で知ったかぶりをするのと似ています。完全にゼロにすることは、現在の技術レベルでは難しいのが現実です。しかし、適切な「しつけ(プロンプトエンジニアリング)」と「環境整備(データ構造化)」を行うことで、実務上問題ないレベルまで抑制し、制御することは十分に可能です。

本記事では、AIシステム最適化の観点から、RAGシステムが抱える「嘘」の病巣を特定する手順に沿って、日本語環境に特化した具体的な処方箋を提示していきます。技術的な難しいコードを書く必要はありません。まずは、AIとの対話の仕方(プロンプト)を見直すことから始めましょう。

ハルシネーションを「バグ」ではなく「特性」として捉える

なぜAIは嘘をつくのでしょうか。それは、大規模言語モデル(LLM)が「事実を検索するデータベース」ではなく、「確率的に次の言葉を予測するマシン」だからです。

彼らは真実を語ろうとしているのではなく、「文脈として自然な言葉」を繋げようとしています。その結果、事実とは異なるが、文章としては極めて滑らかな「嘘」が生まれます。これをバグとして修正しようとすると行き詰まりますが、特性として理解すれば、対策が見えてきます。

「確率的な予測」の幅を狭め、私たちが用意した「正解データ(社内ドキュメント)」というレールの上だけを走るように誘導してあげればよいのです。

不安を取り除くためのマインドセット

対策に入る前に、担当者である皆さんの心の重荷を少し下ろしましょう。

  • 100点を目指さない: 人間でもミスはします。AIにも「絶対に間違えない」を求めすぎると、プロジェクトは前に進みません。「間違えたときにどうリカバリーするか」を設計する方が建設的です。
  • 「分からない」と言えるAIを作る: 最も危険なのは、自信満々に嘘をつくことです。「資料に書かれていないので分かりません」と答えられるAIは、それだけで信頼に足るパートナーになります。

本記事で解決できること・できないこと

ステップ1【診断】:そのハルシネーションはどのタイプ? - Section Image

このガイドでは、プロンプト(指示文)の工夫によって、生成AI側での誤答を防ぐ方法に焦点を当てます。

  • 解決できること: 参照データには正解があるのに、AIがそれを無視したり、読み間違えたりするケース。
  • 解決できないこと: そもそも検索システムが必要なドキュメントを見つけられていないケース(これは検索精度の問題です)、または元のドキュメント自体が間違っているケース。

まずは、目の前の「嘘」がどこから来ているのか、次のセクションで診断していきましょう。


ステップ1【診断】:そのハルシネーションはどのタイプ?

「精度が悪い」「嘘をつく」と一言で言っても、その症状は様々です。システム最適化において、まず最初に行うべきなのがこの「症状の切り分け」です。風邪薬で骨折は治せないように、ハルシネーションのタイプによって対策は全く異なります。

皆さんのRAGシステムで起きている現象は、以下のどれに当てはまるでしょうか?

症状A:参照データにない情報を勝手に作り出す

ステップ2【原因】:なぜ日本語RAGで「ズレ」が起きるのか - Section Image

これが最も典型的なハルシネーションです。

  • 現象: 社内規定にない「特別休暇制度」を勝手に案内する。存在しない製品スペックを回答する。
  • 原因: AIが学習済みデータ(インターネット上の一般的な知識)を優先してしまい、社内データ(コンテキスト)を軽視している状態です。あるいは、質問に対して参照データの中に答えがないため、AIが「気を利かせて」もっともらしい答えを創作しています。
  • 診断名: 外部知識の混入(External Knowledge Hallucination)

症状B:参照データの内容を誤読・曲解している

ドキュメントは正しく渡せているのに、解釈を間違えるパターンです。

  • 現象: 「Aプランは月額1万円、Bプランは2万円」という資料があるのに、「Aプランは2万円」と答える。条件分岐(〜の場合は除く)を無視する。
  • 原因: 日本語の係り受け構造が複雑だったり、指示文(プロンプト)での論理的制約が弱かったりする場合に起こります。特に否定形(〜してはいけない)や二重否定の解釈ミスは頻発します。
  • 診断名: 推論ミス(Reasoning Error)

症状C:日本語のニュアンスや敬語がおかしい

内容は合っているが、表現が不適切でユーザーに不信感を与えるケースです。

  • 現象: 社内向けのフランクなQ&Aボットなのに、過剰に慇懃無礼な敬語を使う。またはその逆。日本語として不自然な翻訳調になる。
  • 原因: プロンプトでの役割定義(ペルソナ設定)や出力形式の指定が曖昧です。
  • 診断名: スタイル不整合(Style Inconsistency)

問題の切り分けフローチャート

問題解決の第一歩は、エラーの原因が「検索(Retrieval)」にあるのか、「生成(Generation)」にあるのかを見極めることです。

  1. 回答がおかしい時、参照しているドキュメント(Chunk)を確認する。
    • ドキュメントに正解が含まれていない → これは検索システムの問題です。埋め込みモデルの変更やチャンク分割の見直しが必要です。
    • ドキュメントには正解が書いてある → これが今回のターゲット、生成AI(LLM)の問題です。プロンプト改善で直せる可能性が高いです。

本記事では、後者の「ドキュメントはあるのに正しく答えられない」ケースに絞って対策を打ちます。


ステップ2【原因】:なぜ日本語RAGで「ズレ」が起きるのか

症状が特定できたところで、なぜ日本語環境では特にこのような「ズレ」が起きやすいのか、その根本原因を少し掘り下げてみましょう。ここを論理的に理解すると、プロンプトを書く際の「勘所」が掴めるようになります。

英語プロンプトの直訳が招く「文脈の欠落」

Transformerモデルをベースとする主要なLLM(大規模言語モデル)は、依然として学習データの多くを英語が占めています。そのため、英語で指示を出すと意図通りに機能するプロンプトでも、日本語に翻訳してそのまま使用すると精度が低下するケースが散見されます。

英語は主語(S)と動詞(V)の構造が厳格ですが、日本語は主語を頻繁に省略し、文脈に依存する言語構造を持っています。「確認しましたか?」という一文だけでは、「誰が」「何を」確認したのか、AIには特定できない場合があります。RAGの文脈においては、参照ドキュメント内の「これ」「それ」といった指示語が具体的に何を指しているのかをAIが見失い、誤った情報の結合(ハルシネーション)を引き起こす要因となります。

日本語特有の「主語省略」と「曖昧さ」のリスク

日本語は世界でも有数の「ハイコンテキスト」な言語です。言葉にしなくても文脈や空気で察する文化がありますが、AIにとって「察する」という行為は、確率論的な推測に過ぎません。

  • 人間: 「交通費の精算、いつまでだっけ?」(文脈から「今月分」のことだと暗黙に理解)
  • AI: (ドキュメント内にある「過去の全ての精算期限」や「一般的な規定」を検索し、最も確率の高い日付を出力するが、それがユーザーの意図する「今月分」とは限らない)

このように、クエリ(質問文)や社内ドキュメントに含まれる特有の曖昧さが、AIの推論にノイズを与え、結果として事実と異なる回答を生成させてしまいます。

トークン化による日本語の意味分断

技術的な視点から見ると、AIは日本語を「トークン」という単位に分解して処理しています。英語は単語ごとにスペースで区切られるためトークン化が容易ですが、日本語は単語の境界が曖昧で複雑です。

例えば「東京都」という単語が、モデルによっては「東京」と「都」に分割されることがあります。これにより、「京都」という文字が含まれる別のコンテキストと混同するリスクがわずかながら生じます。特に、社内用語や業界特有の専門用語が意図しない形で細切れにトークン化されると、AIは本来の意味情報(セマンティクス)を正しく保持できず、関連性の低いドキュメントを検索結果として拾ってしまうのです。

したがって、日本語環境でのRAG構築においては、英語圏のベストプラクティス以上に「言葉の定義」と「文脈の明示的な補完」をプロンプト内で行うことが不可欠です。


ステップ3【処方箋】:信頼性を高めるプロンプト設計の型

ここからは、具体的な解決策です。実証データに基づき、実際に効果が確認されている「日本語RAG専用プロンプト」のテクニックを紹介します。これらをベースに、自社の環境に合わせて微調整してみてください。

「回答の根拠」を強制する制約条件の書き方

AIに「自由に作文」させてはいけません。「抜粋と要約」に徹するように指示します。最も強力なのは、「参照テキスト(Context)のみを使用する」という制約です。

悪い例

以下の資料を参考にして、質問に答えてください。

「参考にして」という言葉は曖昧です。「資料も見るけど、あなたの知識も使ってね」と解釈されかねません。

良い例(処方箋プロンプト)

# 命令書
あなたは社内規定に精通したコンプライアンス担当AIです。
以下の【参照資料】に記載されている情報のみを使用して、ユーザーの質問に回答してください。

# 制約条件
- 【参照資料】に含まれない情報は、絶対に回答に含めないでください。
- あなたの事前知識や一般的常識は使用しないでください。
- 回答には、参照元のセクション名やページ番号を明記してください。

# 参照資料
{context}

# ユーザーの質問
{question}

「のみを使用して」「絶対に含めないで」といった強い否定命令を使うことがポイントです。

「分からない」と言わせる勇気:拒絶のインストラクション

ハルシネーション対策で最も効果的なのが、「知らないことは知らないと言う」設定です。AIは基本的に親切なので、無理やり答えようとします。これを止める必要があります。

追加すべきプロンプト

- もし【参照資料】の中に、質問に対する回答が見つからない場合は、正直に「申し訳ありませんが、提供された資料の中にはその情報が見当たりませんでした」と回答してください。
- 推測や捏造をして回答を作成することは禁止します。

この数行を入れるだけで、嘘の回答率は劇的に下がります。ユーザーにとっても、嘘をつかれるより「載っていない」と言われる方が、次のアクション(担当者に電話するなど)に移れるため、体験としては向上します。

日本語の曖昧さを排除する「役割定義」と「出力形式」

日本語の回答が不安定な場合、出力形式をガチガチに固めるのが有効です。フリートーク形式ではなく、構造化されたデータとして出力させます。

構造化プロンプトの例

回答は以下のフォーマットに従って出力してください。

【結論】
(質問に対する直接的な回答を簡潔に)

【詳細・理由】
(参照資料に基づいた詳細な説明)

【参照元】
(根拠となったドキュメント名や箇所)

【注意点】
(もし条件や例外があれば記載)

このように枠組みを与えることで、AIは「埋めるべき情報」を探しに行くモードになり、余計な創作をする余地がなくなります。

思考の連鎖(CoT)を日本語で誘導する

複雑な質問に対しては、いきなり答えを出させず、一度考えさせる「Chain of Thought(思考の連鎖)」の手法が有効です。日本語RAGでは、以下のように指示します。

回答する前に、以下のステップで思考してください。

  1. 質問の意図を分析する。
  2. 【参照資料】から関連するキーワードを探す。
  3. 該当する記述があるか確認する。
  4. 記述がない場合は「回答不可」と判断する。
  5. 記述がある場合のみ、回答を生成する。

このプロセスをプロンプトに含める(あるいはシステム内部で実行させる)ことで、AIの論理破綻を防ぎ、誤読を減らすことができます。


予後管理:安心して運用を続けるための監視体制

プロンプトを改善しても、AIは生き物のように変化し、新たなデータが増えれば予期せぬ挙動をすることもあります。導入して終わりではなく、仮説検証を繰り返す定期的な「健康診断」が必要です。

ユーザーからのフィードバックループの構築

開発者だけでテストするには限界があります。実際のユーザー(社員)からのフィードバックが最良の教師データです。

  • Good/Badボタンの実装: チャット画面に評価ボタンを設置し、Badがついた回答を重点的にチェックします。
  • 「嘘報告」フォーム: 「この回答は間違っている」と報告できる簡単な導線を用意します。

集まった「Bad回答」は宝の山です。「なぜこのプロンプトで間違えたのか?」を分析し、プロンプトを微修正するサイクルを回しましょう。

定期的な「健康診断」テストセットの作成

システムをアップデートするたびに、以前は正解できていた質問ができなくなっていないか確認します。これを「回帰テスト」と呼びます。

  • ゴールデンセットの用意: 「質問」と「理想的な回答」のペアを50〜100個程度用意します。
  • 自動評価: 毎回人間が見るのは大変なので、LLMを使って「生成された回答」と「理想的な回答」の意味が合致しているか自動判定させる仕組み(Ragasなどの評価フレームワーク)の導入も検討段階に入ってくるでしょう。

人間が介在する(Human-in-the-loop)安心設計

制約条件 - Section Image 3

最後に、リスク管理の観点です。人事評価や契約関連など、絶対に間違えてはいけない領域については、RAGの回答をそのまま鵜呑みにさせないUI設計が重要です。

  • 免責事項の表示: 「AIは回答を生成しますが、必ず原文を確認してください」という注意書き。
  • 原文リンクの強調: 回答よりも、参照元のPDFリンクを目立たせ、あくまで「検索補助」であることを強調する。

AIを「全知全能の神」としてではなく、「優秀だがたまにドジをするアシスタント」として位置付けることが、長期的な運用の成功鍵です。


まとめ:まずは「嘘をつかない」設定から試してみよう

日本語RAGにおけるハルシネーションは、決して解決不可能な問題ではありません。それはAIの特性であり、適切な指示(プロンプト)を与えることで、実務で使えるレベルまでコントロールできます。

  1. 診断する: 捏造なのか、誤読なのか、症状を見極める。
  2. 原因を知る: 日本語の曖昧さや文脈依存性を理解する。
  3. 処方箋を出す: 「参照資料のみ使用」「分からないと言う」「思考プロセスを明示」するプロンプトを実装する。
  4. 経過観察: ユーザーフィードバックを集め、改善し続ける。

ここまで読んで、「理屈はわかったけれど、実際に自社のデータでうまくいくか不安だ」と思われた方もいるかもしれません。プロンプトの調整は、実際に動くシステムで試行錯誤するのが一番の近道です。

「AIが嘘をつかない」という安心感を構築し、業務効率化の第一歩を踏み出していきましょう。

なぜAIは嘘をつくのか?日本語RAGのハルシネーションを診断し制御する実践プロンプト処方箋 - Conclusion Image

コメント

コメントは1週間で消えます
コメントを読み込み中...