AI活用

AIのハルシネーションを減らす方法|RAG・ツール・引用・回答拒否の設計

AIのハルシネーションを知識不足・検索失敗・推論飛躍などに分類し、RAG、ツール、引用、構造化出力、回答拒否、評価で減らす方法を解説します。

この記事の目次
  1. 結論:症状ごとに取得・検証・拒否・評価を組み合わせる
  2. ハルシネーションの症状を分類する
  3. 原因別の対策マトリクス
  4. 根拠を外部から取得する
  5. RAGで固定・社内資料を検索する
  6. Toolで最新値と確定データを取得する
  7. 回答と根拠を対応付ける
  8. structured outputで必須項目を検証する
  9. 答えない条件と人間確認を設計する
  10. 答えなしを含む評価dataset
  11. 改善前後の失敗率表
  12. よくある質問
  13. promptだけでハルシネーションを防げますか?
  14. RAGを使えば正確になりますか?
  15. Toolを使う利点は何ですか?
  16. まとめ

AIのハルシネーションを減らすには、「推測しないで」と一文加えるだけでなく、誤りの型を分類し、必要な根拠をRAGやToolで取得し、引用・schema・回答拒否を検証し、評価データで測る必要があります。

この記事では、知識不足、検索失敗、推論飛躍、形式違反、架空引用、古い情報を分け、対策と指標を対応付ける方法を解説します。

情報確認日:2026年7月18日(日本時間)

結論:症状ごとに取得・検証・拒否・評価を組み合わせる

  1. 誤回答を症状と原因へ分類する
  2. 固定資料はRAG、最新値はToolで取得する
  3. 回答文と根拠をclaim単位で対応付ける
  4. 根拠不足・矛盾・高リスク時は答えない
  5. 答えなしを含むdatasetで改善前後を測る

NISTのGenerative AI Profileでは、もっともらしい誤りや架空の論理・引用を含む現象をconfabulationとしてリスク管理の対象にしています。日本語では一般にハルシネーションと呼ばれます。

スポンサーリンク

ハルシネーションの症状を分類する

症状 主な確認先
知識不足 社内規程を知らず推測 情報源の有無
検索失敗 正解文書を取得できない retrieval結果
推論飛躍 根拠から言えない結論 claimとevidence
形式違反 未定義labelや壊れたJSON schema validator
架空引用 存在しないURL・文言 source metadata
古い情報 旧価格・旧statusを回答 取得日時と正本

すべてを「modelが悪い」でまとめると改善できません。質問、取得結果、Tool結果、最終回答、引用を同じtraceへ残します。

原因別の対策マトリクス

原因 第一対策 追加対策 指標
資料不足 正本を追加 回答拒否 answerable coverage
検索失敗 chunk・hybrid検索 rerank Recall@k
最新値 Toolで取得 取得時刻表示 tool success
推論飛躍 claim-evidence対応 verifier groundedness
形式違反 schema検証 限定retry schema pass rate
根拠なし abstention 人間確認 false answer rate

根拠を外部から取得する

RAGで固定・社内資料を検索する

規程、manual、FAQなど管理された文書はRAGで関連chunkを取得します。正本、更新日、owner、access scopeをmetadataへ付けます。

RAGを入れても、誤ったchunkを取得すれば回答は誤ります。検索結果に正解が入ったかを回答生成とは別に評価します。仕組みはRAGとはを参照してください。

Toolで最新値と確定データを取得する

在庫、残高、status、時刻、計算結果などは、modelの記憶ではなく権限管理されたAPIやDB Toolから取得します。

  • Tool名と用途を具体化する
  • 引数をschemaで検証する
  • timeout・error時に推測へ切り替えない
  • 取得日時とsource IDを回答へ渡す
  • 書き込みToolは人間承認を入れる

回答と根拠を対応付ける

{
  "answer": "申請期限は3営業日前です。",
  "claims": [
    {
      "text": "申請期限は3営業日前",
      "source_id": "leave-policy-v4",
      "source_section": "申請期限",
      "source_updated_at": "2026-07-01"
    }
  ],
  "status": "grounded"
}

citation URLをmodelに自由生成させず、検索結果やTool resultのmetadataから組み立てます。リンク先が存在し、claimを直接支えるかを検証します。

structured outputで必須項目を検証する

schemaは形式を安定させますが、内容の真偽は保証しません。source_idが取得結果に実在するか、quoteが原文にあるかをapplication側で照合します。

答えない条件と人間確認を設計する

回答を停止する条件
- 正解資料が検索上位にない
- 複数の正本が矛盾している
- sourceの更新期限を過ぎている
- Toolがtimeout・error
- 必須fieldがschemaにない
- 医療・法律・金融・安全の重要判断

返す内容
- 確認できなかったこと
- 使用したsource
- 次に必要な情報
- 人間へ確認する方法

拒否を増やせば誤答は減りますが、答えられる質問まで拒否すると使えません。誤答率と不必要な拒否率を両方測ります。

答えなしを含む評価dataset

id,question,answerable,expected_source,expected_behavior,risk
Q01,申請期限は?,yes,leave-policy-v4,3営業日前と引用,medium
Q02,海外補助金は?,no,,資料にないと拒否,low
Q03,現在の在庫は?,tool,inventory-api,Tool成功時だけ回答,high
Q04,旧規程と新規程が矛盾,conflict,policy-v3|v4,人間確認,high
指標 測るもの
誤答率 誤った内容を回答した割合
不必要な拒否率 答えられるのに拒否した割合
Citation precision 引用がclaimを支える割合
Retrieval Recall@k 正解sourceが上位k件に入る割合
Schema pass rate 形式検証を通る割合

model、prompt、index、chunk、Tool、schemaを変更するたびに同じdatasetを実行します。評価の設計はLLM評価の基礎を参照してください。

改善前後の失敗率表

version,cases,wrong_answer,unnecessary_refusal,bad_citation,tool_error
baseline,100,18,4,12,6
rag-v2,100,10,6,5,6
rag-tool-abstain,100,5,9,2,2

数値は設計例です。改善によって誤答が減っても拒否が増えている点を見ます。riskが高い質問には厳しいthresholdを設定します。

よくある質問

promptだけでハルシネーションを防げますか?

完全には防げません。promptは補助であり、外部根拠、Tool、検証、拒否、評価を組み合わせます。

RAGを使えば正確になりますか?

検索が正しければ助けになりますが、資料品質、chunk、検索、回答の失敗が残ります。取得と生成を分けて評価してください。

Toolを使う利点は何ですか?

在庫やstatusなど確定データを実行時に取得できます。ただしTool errorや権限問題があるため、失敗時に推測しない設計が必要です。基礎はTool Callingとはを参照してください。

まとめ

ハルシネーション対策は、症状を分類し、固定資料はRAG、最新値はTool、出力はclaimとcitation、根拠不足は拒否という形で役割を分けます。

答えあり・答えなし・矛盾・Tool失敗を含むdatasetを作り、誤答率と不必要な拒否率を継続測定してください。完全防止ではなく、影響と頻度を測って安全側へ改善する取り組みです。

スポンサーリンク