Dify メモ書き

Tech Knowledge
公開: 2025-08-02

LLM におけるハルシネーションの問題とその対策

「ハルシネーション(hallucination)」とは、AI や生成モデル(特に大規模言語モデル)が 事実でない情報を、もっともらしく出力してしまう現象のこと。

ハルシネーションの原因

ハルシネーションの主な原因として以下がある。

  • 統計的予測に基づく生成
    ChatGPT などの言語モデルは、「次にくる単語」を統計的に予測する。そのため、事実と異なっていても "言語的にもっともらしい" 文章を生成することがある。
  • 知識が埋め込み式で固定
    事前に学習した知識を内部に埋め込んでいる。 情報が古くても、間違っていても修正されない。
  • 曖昧・不完全なプロンプト入力
  • トークン制限・文脈切れ

「知識が埋め込み式」という原因に対応する手段

  • 既存の LLM に追加学習(Fine Tuning)を施す
    追加学習には時間・コストがかかる
    元の知識が壊れる(カタストロフィックフォーゲッティング)リスクがある

  • LLM を自作する
    膨大なデータと計算資源が必要で非常に高コスト

  • RAG を利用する
    最新情報を反映しやすい、再学習不要

対応策としての Web 検索と RAG

「でも、最近の LLM は Web 検索するよね?」という疑問がある。たしかに最近の LLM は Web検索機能を備えている。しかし、それでも RAG の価値はなくならない。

  • Web 検索には、誤情報や偏った情報を含むページがソースになるリスクがある
  • Web に存在しない、または Web 公開できない情報がある
    → RAG では社内ドキュメントや顧客データを活用できる
  • RAG では情報の精度と一貫性を確保しやすい
  • 特定業務に特化したチャットボットでは RAG の方が効率的

RAG とは

RAG(Retrieval-Augmented Generation、検索拡張生成)は、外部の知識データベースから情報を検索し、それをもとに文章を生成する手法です。主に自然言語処理(NLP)で使われる概念で、特に質問応答(QA)やチャットボットの精度を高める目的で使われます。 ~ ChatGPT ~

  • Retrieval(情報の検索、取り出し)
  • Augmented(増強された、拡張された)
    「augment(オーグメント)」= 増やす、拡張する、強化する(動詞)
  • Generation(生成)

Retrieval-Augmented Generation 外部知識で「増強された」生成(RAG)
リトリーバル・オーグメンテッド・ジェネレーション

※外部の知識データベースから情報を検索しないものは、厳密には RAG(Retrieval-Augmented Generation)とは言えない。

RAG を利用するための主な環境

名称 種類 機能・役割 提供元・開発元
Dify サービス ノーコードRAGチャットボット構築 LangGenius, Inc.
Pinecone サービス ベクトル検索エンジン(検索部分) Pinecone Inc.
Weaviate サービス/OSS オープンソースのベクトルDB兼検索エンジン SeMI Technologies
Microsoft Azure Cognitive Search + OpenAI サービス 企業向け検索+生成AI統合プラットフォーム Microsoft
Amazon Kendra + Amazon Bedrock サービス AWSの検索サービスと生成AI基盤の組み合わせ Amazon Web Services
Haystack ライブラリ(OSS) Pythonベースの検索+生成パイプライン構築用 deepset GmbH
LangChain ライブラリ(OSS) LLMワークフロー構築フレームワーク(検索・生成連携) LangChain Inc.
LlamaIndex (旧 GPT Index) ライブラリ(OSS) ドキュメント管理とRAG統合支援ライブラリ LlamaIndex, Inc.
OpenAI API サービス/API GPTなどLLMのAPI提供 OpenAI
Hugging Face Hub & Transformers ライブラリ/プラットフォーム 多様なLLMモデル・検索モデル共有・実行環境 Hugging Face
Cohere サービス/API LLM API(生成・検索・分類) Cohere Inc.
AI21 Studio サービス/API 大規模言語モデルAPI AI21 Labs
Anthropic Claude サービス/API 安全性重視の生成AIモデルAPI Anthropic

Dify の特徴

  • GUI 中心の RAG アプリ開発基盤
  • ノーコードで独自のチャット AI を作れる
  • Web サービスで提供されており、Web 上の GUI でチャットフローを編集
  • 複数 LLM やベクトル DB(知識データベースの一種)に対応、設定も GUI で完結
  • プロンプトや回答ログの管理が GUI ベースで出来る
  • 無料プラン(Sandbox)がある ※2025年8月時点
    図1 Dify のプランと料金 図1 Dify のプランと料金

Dify を使ったチャットボットアプリの構築

  1. Dify 日本語 にアクセス
    「今すぐ始める」からアカウントの作成を行う。

  2. アプリを作成する > 最初から作成 図2 アプリの作成図2 アプリの作成

  3. 「チャットボット」を選択し、アプリの名前を入力して「作成する」 図3 アプリタイプの選択図3 アプリタイプの選択

  4. 右上の赤枠で使用する LLM を選択
    ※初回は何も選択されていないので、設定から OpenAI(無料枠あり)を追加する必要がある。 図4 オーケストレーション画面図4 オーケストレーション画面

  5. 公開する > 更新を公開
    ここまでの手順で作成したチャットボットが Web 公開される。
    (「アプリを実行」で該当チャットボットの Web サイトを表示できる) 図5 アプリの公開図5 アプリの公開

Dify を使ったチャットボットアプリ(RAG 版)の構築

直前に作成したチャットボットは GPT-4o-mini の推論結果をただ出力するだけのもので、RAG アプリの機能はない。試しに2024年の総理大臣を聞いてみた。 図6 2024年の総理大臣は?図6 2024年の総理大臣は?

チャットボットは答えられなかった。その原因は以下。

  • GPT-4o‑mini には、Web 検索機能は搭載されていない
  • GPT‑4o‑mini の 学習データのカットオフ時点(knowledge cutoff)は、2023年10月

そこで RAG を使用したチャットボットを構築してみる。

  1. RAG 用のデータを用意
    歴代総理大臣の任期を記述したテキストファイルを作成した。(簡単のため、令和のみ)
    reiwa_prime_ministers.txt
第99代 内閣総理大臣
氏名:菅 義偉(すが よしひで)
任期:2020年9月16日 ~ 2021年10月4日

第100代 内閣総理大臣
氏名:岸田 文雄(きしだ ふみお)
任期:2021年10月4日 ~ 2021年11月10日

第101代 内閣総理大臣
氏名:岸田 文雄(きしだ ふみお)
任期:2021年11月10日 ~ 2024年10月1日

第102代 内閣総理大臣
氏名:石破 茂(いしば しげる)
任期:2024年10月1日 ~ 2024年11月11日

第103代 内閣総理大臣
氏名:石破 茂(いしば しげる)
任期:2024年11月11日 ~ 現職
  1. ナレッジデータベースにデータを追加
    画面上部のナレッジ > ナレッジベースを作成 図7 ナレッジベースを作成図7 ナレッジベースを作成

テキストファイルをアップロードして「次へ」 図8図8

下までスクロールし「保存して処理」 図9図9 これでナレッジベースへの登録は完了。 次にチャットボットがこのナレッジベースを参照するように設定する。

  1. コンテキストの追加
    チャットボットのオーケストレーションの画面に戻り、
    コンテキスト > 追加 図10 コンテキストの追加図10 コンテキストの追加

先ほど追加したナレッジベースを選択する。
これでデータを参照する設定は完了。
公開する > 「更新を公開」で変更を適用する。 図11 追加されたナレッジベース図11 追加されたナレッジベース

  1. 動作確認
    先ほどと同じように「2024年の総理大臣は?」と聞いてみた。
    正しい回答が表示されるようになっている。

図12 RAG を利用したチャットボット図12 RAG を利用したチャットボット

Dify を使用すると、このようにノーコードで RAG を利用するチャットボットを作成することができる。今回の例はあくまで単純なものだが、Dify にはより高度で複雑なアプリを構築する手段も提供されている。