💬
RAGチャットボット構築(Dify実践)
社内文書・FAQ・マニュアルを知識源にした RAG チャットボットを Dify で構築する手順とポイント。
シナリオ概要
課題: 社内規定・製品マニュアル・FAQが PDF や社内 Wiki に散在しており、従業員や顧客が正確な情報にたどり着けない。
解決策: Dify で RAG チャットボットを構築。自然言語で質問すると、文書を検索して根拠のある回答を返す。
ユーザー「有給休暇の申請はいつまでにすればいい?」
→ ナレッジベース検索 → 就業規則PDF p.23 がヒット
→ LLM「就業規則第5条によると、有給休暇は取得希望日の3営業日前までに
所定のフォームで申請する必要があります。(出典: 就業規則2024.pdf)」
使用する Dify 機能
| 機能 | 役割 |
|---|---|
| ナレッジベース・RAG | 文書のインデックス化・検索 |
| モデルプロバイダー | LLM 選択(GPT-4o / Claude 等) |
| 概要・アプリ種別 | Chatflow を選択 |
| 変数システム | 会話変数で文脈を保持 |
ワークフロー設計
Chatflow 構成:
[Start]
│ {{sys.query}}: ユーザーの質問
▼
[Question Classifier]
│ ← 質問を分類
├── 「文書に関する質問」→ RAG フロー
└── 「雑談・無関係」 → 丁寧に断るフロー
[RAG フロー]
│
▼
[Knowledge Retrieval]
│ top_k=5 / ハイブリッド検索 / score_threshold=0.5
│ {{retrieval.context}}: 検索結果チャンク
▼
[LLM]
│ system: "文書に基づいて正確に回答。根拠がなければ「わかりません」と答える"
│ context: {{retrieval.context}}
│ user: {{sys.query}}
│ {{llm.text}}: 回答
▼
[Answer](出典表示オン)
出力: {{llm.text}} + 出典ファイル名・ページ
[雑談フロー]
│
▼
[Answer]
出力: "ご質問いただきありがとうございます。この bot は〇〇に関する質問にお答えします。"
ナレッジベースの設定
チャンキング設定
文書の種類に合わせて選択:
FAQ ドキュメント:
→ Q&A ペアチャンキング(質問に対して直接ヒットしやすい)
技術マニュアル・長い手順書:
→ 親子チャンキング
親: 1000トークン(LLMへ渡す)
子: 200トークン(検索に使う)
一般的な社内規定・メール:
→ 一般チャンキング(500〜800トークン推奨)
インデックスと検索設定
インデックスモード: 高品質(ベクトル埋め込み)
埋め込みモデル: text-embedding-3-small(コスト重視)
または text-embedding-3-large(精度重視)
検索方法: ハイブリッド(ベクトル70% + 全文30%)
→ 固有名詞(商品名・人名)と意味検索の両方に対応
top_k: 5
score_threshold: 0.4(低すぎると無関係なチャンクが混入)
LLM プロンプト設計
System Prompt:
あなたは{会社名}の社内ボットです。
提供されたコンテキストに基づいて正確に回答してください。
ルール:
1. コンテキストに根拠がある場合のみ回答する
2. 根拠がない場合は「その情報は文書に見つかりませんでした」と回答する
3. 回答は簡潔に(200字以内)
4. 箇条書きで読みやすく構成する
コンテキスト:
{{retrieval.context}}
モデル選択の考え方
低コスト運用(社内ツール・頻繁なアクセス):
→ GPT-4o mini / Claude 3 Haiku
→ 精度は少し落ちるが1/10程度のコスト
高精度優先(顧客向け・正確性が重要):
→ GPT-4o / Claude 3.5 Sonnet
→ FAQチャットボットなら十分な精度
完全プライベート(社外秘文書):
→ Ollama + Llama 3.1(ローカル)
→ API に文書内容が送られないことを保証
実装のポイント
1. ハルシネーション対策
プロンプトに「根拠がない場合は答えない」制約を入れる。
出典表示を必須にして、ユーザーが検証できるようにする。
→ [Answer ノード] の「引用を表示」を ON
2. 会話文脈の利用
Chatflow の会話変数で直前の質問を保持:
Turn 1: 「有給の申請期限は?」→ 3営業日前
Turn 2: 「それを過ぎた場合は?」← この "それ" が何かを会話変数で保持
[Variable Assigner]: conversation.last_topic = {{sys.query}}
LLM プロンプトに追加:
「前の話題({{conversation.last_topic}})の文脈も考慮して回答してください」
3. 文書の鮮度管理
ナレッジベースの文書は定期的に更新が必要:
- Notion 統合 → ページを更新すると自動再インデックス
- APIでの文書更新 → CI/CDパイプラインで自動化可能
- 手動更新 → リリース時にナレッジベースを更新するプロセスを定義
参考:他のユースケース
- PDFドキュメント分析パイプライン — 文書を会話なしで自動解析したい場合
- カスタマーサポートボット — 外部向けサポートチャットの設計
- 1. 💬RAGチャットボット構築(Dify実践)
- 2. 📄PDFドキュメント分析パイプライン(Dify実践)
- 3. 🎧カスタマーサポートボット(Dify実践)
- 4. ⚡コンテンツ一括生成(Dify実践)
- 5. 🔎コードレビュー自動化(Dify実践)
- 6. 🗂️構造化データ抽出ワークフロー(Dify実践)
- 7. 🕸️マルチエージェントオーケストレーション(Dify実践)
- 8. 📱SNSコンテンツ多チャンネル自動生成(Dify実践)
- 9. 🧾経費精算・領収書OCR処理(Dify実践)
- 10. 📝会議議事録・タスク自動抽出(Dify実践)
- 11. 👥HR採用・オンボーディング自動化(Dify実践)
- 12. 🏭製造業:作業マニュアルQAボット(Dify実践)
- 13. 🎓教育:クイズ・学習教材自動生成(Dify実践)
- 14. 🔬ディープリサーチワークフロー(Dify実践)
- 15. 💬Slack社内ナレッジボット(Dify実践)
- 16. 📡競合情報・ニュースモニタリング(Dify実践)
- 17. 📋営業提案書自動生成(Dify実践)
- 18. 🏥医療・ヘルスケア向けDify活用(患者FAQ・文書処理)
- 19. 🏦金融・保険向けDify活用(レポート分析・審査支援)
- 20. 🏠不動産向けDify活用(物件説明生成・顧客マッチング)
- 21. ⚖️法律・リーガルテック向けDify活用(契約書レビュー・法令検索)
- 22. 🍽️小売・飲食向けDify活用(メニュー生成・クレーム対応・在庫Q&A)
- 23. 🏛️行政・公共向けDify活用(市民FAQ・申請ガイド)
出典: Dify公式ドキュメント https://docs.dify.ai