Dify メモ書き
目次
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 のプランと料金
Dify を使ったチャットボットアプリの構築
Dify 日本語 にアクセス
「今すぐ始める」からアカウントの作成を行う。アプリを作成する > 最初から作成 図2 アプリの作成
「チャットボット」を選択し、アプリの名前を入力して「作成する」 図3 アプリタイプの選択
右上の赤枠で使用する LLM を選択
※初回は何も選択されていないので、設定から OpenAI(無料枠あり)を追加する必要がある。 図4 オーケストレーション画面公開する > 更新を公開
ここまでの手順で作成したチャットボットが Web 公開される。
(「アプリを実行」で該当チャットボットの Web サイトを表示できる) 図5 アプリの公開
Dify を使ったチャットボットアプリ(RAG 版)の構築
直前に作成したチャットボットは GPT-4o-mini の推論結果をただ出力するだけのもので、RAG アプリの機能はない。試しに2024年の総理大臣を聞いてみた。
図6 2024年の総理大臣は?
チャットボットは答えられなかった。その原因は以下。
- GPT-4o‑mini には、Web 検索機能は搭載されていない
- GPT‑4o‑mini の 学習データのカットオフ時点(knowledge cutoff)は、2023年10月
そこで RAG を使用したチャットボットを構築してみる。
- 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日 ~ 現職
- ナレッジデータベースにデータを追加
画面上部のナレッジ > ナレッジベースを作成 図7 ナレッジベースを作成
テキストファイルをアップロードして「次へ」
図8
下までスクロールし「保存して処理」
図9
これでナレッジベースへの登録は完了。
次にチャットボットがこのナレッジベースを参照するように設定する。
- コンテキストの追加
チャットボットのオーケストレーションの画面に戻り、
コンテキスト > 追加 図10 コンテキストの追加
先ほど追加したナレッジベースを選択する。
これでデータを参照する設定は完了。
公開する > 「更新を公開」で変更を適用する。
図11 追加されたナレッジベース
- 動作確認
先ほどと同じように「2024年の総理大臣は?」と聞いてみた。
正しい回答が表示されるようになっている。
Dify を使用すると、このようにノーコードで RAG を利用するチャットボットを作成することができる。今回の例はあくまで単純なものだが、Dify にはより高度で複雑なアプリを構築する手段も提供されている。