Difyを使って社内規程やカスタマーサポート用のAIチャットボットを構築した際、「登録したナレッジ(知識)以外の質問に勝手に答えてしまう」という問題は、実運用において致命的なリスクとなります。
DifyのRAGが関係ない質問に答えてしまう根本的な原因
DifyのRAG(検索拡張生成)システムが範囲外の質問に答えてしまう最大の理由は、バックエンドで動いているLLM(大規模言語モデル)の「親切すぎる性質」と「事前学習データへの依存」にあります。
RAGの仕組みは、ユーザーの質問に対してナレッジベースから関連するテキスト(チャンク)を検索し、それをコンテキストとしてLLMに渡し、回答を生成させるというものです。しかし、質問に関連する情報がナレッジ内に存在しない場合、LLMは「提供された情報が足りない」と判断するのではなく、自身が元々持っている膨大な事前学習データから答えを捻り出そうとします。
特にGPT-4oやClaude 3.5 Sonnetなどの高性能なモデルほど、文脈を推測して尤もらしい回答を作成する能力が高いため、結果として「ナレッジベースにはない一般的な回答」や「事実無根のハルシネーション(幻覚)」を引き起こしてしまいます。これを防ぐには、「LLMの自律的な推測を意図的に制限する」というアプローチが不可欠です。
範囲外の回答を完全に封じるシステムプロンプトの書き方
LLMの暴走を食い止めるための第一の防波堤が、システムプロンプト(System Prompt)の最適化です。デフォルトのプロンプトや「ナレッジに基づいて答えてください」といった弱い指示では、範囲外の回答を完全に防ぐことはできません。
以下の要素を組み込んだ、強力な制約を持たせるプロンプトを設定してください。
【実践的なシステムプロンプト例】
Plaintext
あなたは社内規程に関する専門アシスタントです。
以下の【提供された知識】のみを使用して、ユーザーの質問に回答してください。
【厳守事項】
1. 回答は必ず【提供された知識】に含まれる情報のみで構成すること。
2. 【提供された知識】の中に質問に対する明確な答えが存在しない場合、あなたの事前知識や推測は一切使用せず、必ず「申し訳ありませんが、提供された情報の中には該当する答えがありません。」とだけ回答すること。
3. ユーザーが世間話や一般的な質問(例:「今日の天気は?」「AIについて教えて」など)をしてきた場合も、上記2のルールを適用すること。
【提供された知識】
{{context}}
プロンプト設定のポイント
- 例外処理の明確化: 「答えがない場合はどう振る舞うか」を一言一句指定することで、LLMが勝手に謝罪文に続けて推測を語り出すのを防ぎます。
- 変数の明示: Difyのナレッジ参照変数である
{{context}}をプロンプト内に明記し、LLMに対して「ここから下の情報だけを使え」と境界線をはっきりと示します。
検索スコア閾値とTop-Kの最適化でハルシネーションを防ぐ
プロンプトを強固にしても、検索フェーズ(Retrieval)で「質問と微妙に関連しそうな無関係なテキスト」がLLMに渡されてしまうと、LLMはそれを無理やり解釈して間違った回答を生成してしまいます。これを防ぐためには、Difyのナレッジ設定画面にある「検索設定(Retrieval Settings)」のチューニングが必須です。
1. 検索スコア閾値(Score Threshold)の厳格化
スコア閾値は、ベクトル検索において「どれくらい意味が近いチャンクを取得するか」の足切りラインです。 デフォルト設定では閾値が低く設定されている(あるいは設定されていない)ことが多く、無関係な質問に対してもスコアの低いノイズデータがヒットしてしまいます。 実運用では、スコア閾値を「0.65〜0.75」程度に設定(※使用する埋め込みモデルにより変動)し、関連性の薄いチャンクをLLMに渡さないようシャットアウトしてください。
2. Top-K(取得するチャンク数)の最適化
Top-Kは、検索結果としてLLMに渡すテキストブロックの上限数です。 この数値を「10」などの大きな値にしていると、ノイズが混入する確率が跳ね上がります。範囲外の回答を防ぐという目的においては、Top-Kを「3〜5」程度に絞り込むのがベストプラクティスです。本当に必要な情報だけを厳選してLLMに渡すことで、情報過多によるハルシネーションを抑制できます。
3. 「空の返答」設定の活用
Difyには、検索結果が0件(設定した閾値を超えるチャンクがない)だった場合の挙動を制御する機能があります。検索設定内の「チャンクがない場合の返答」機能を有効にし、あらかじめ「該当する情報がありません」という固定メッセージを設定しておくことで、LLMを介さずに直接ユーザーへ回答を返すことが可能です。これにより、範囲外の質問に対するAPIコストの削減と、100%確実なガードレールの両立が実現します。
