社内ドキュメントが増えるにつれ、「どこに書いてあるか分からない」という問い合わせが情シスに集中する。ExcelやNotionで作ったFAQページは更新が滞り、キーワード検索では欲しい答えにたどり着けないケースも多い。
DifyはRAG(Retrieval-Augmented Generation)を使った問い合わせ対応ボットをローコードで構築できるプラットフォームだ。自社ドキュメントを読み込ませ、自然言語で質問するだけで関連する情報を引き出して回答を生成する。ワークフロー構築はGUIで完結するためプログラミング不要だが、チャンク分割の設定を誤ると的外れな回答ばかり返ってくるという落とし穴がある。
本記事では、Difyで社内FAQボットを構築するときの実務的な手順と、検索精度を上げるための設定を解説する。
なぜDifyが選ばれるのか
社内FAQボットを作る選択肢はいくつかある。Slack botを自作する、ChatGPT APIを直接叩く、既製品のチャットボットを導入するなど様々だ。その中でDifyが選ばれる理由は3つある。
🐝 IroHive メモ Difyはオープンソース(Apache 2.0)なので、DockerでVPS上にセルフホストするか、Dify Cloudのマネージドサービスを使うかを選択できる。機密情報を扱う場合はセルフホスト一択。
RAGとチャンク分割の役割
RAGの仕組みを簡単に整理しておく。
- 社内ドキュメント(PDF・Word・Notionなど)をDifyに読み込む
- ドキュメントを「チャンク」と呼ぶ小さな塊に分割してベクトル化・保存
- ユーザーが質問すると、質問に近いチャンクを検索(Retrieve)
- 取得したチャンクをコンテキストとしてLLMに渡し、回答を生成(Generate)
このプロセスでボトルネックになりやすいのがステップ2のチャンク分割だ。チャンクが大きすぎると関係ない情報が混入し、小さすぎると文脈が失われる。
最大チャンク長の目安
Dify の UI では「最大チャンク長」を文字数(characters)で入力する。ドキュメントの種類別の目安は以下の通りだ。
✅ 推奨設定(社内FAQ) 社内FAQには最大チャンク長 800〜1,200文字・オーバーラップ 100文字が最もバランスが良い。オーバーラップを設けることで、チャンクの境界をまたぐ情報も取りこぼさない。
チャンク識別子(区切り文字)
チャンクサイズと同じくらい重要なのがチャンク識別子(区切り文字)の設定だ。ドキュメントを「どこで」分割するかを指定する。デフォルトは \n(改行ごと)だが、これを使うと1行=1チャンクになり細かくなりすぎる。
📌 Dify の設定画面で識別子フィールドに \n\n と入力する。\n(バックスラッシュ+n)の2連続が空行区切りを意味する。テキストを実際に貼り付けても動作する。
埋め込みモデルの選び方
チャンクを「ベクトル(数値の配列)」に変換して保存・検索するのが埋め込みモデル(Embedding Model)だ。ナレッジベース作成時に選択する。後から変更すると全チャンクの再インデックスが必要になるため、構築前に決めておく。
API課金型で導入が最もかんたん。日本語の精度は実用十分。小規模FAQなら月数百円以内に収まる。
✅ 情シス向け推奨日本語KB特化のOSS最高峰(JMTEB Retrieval 81.89)。Ollama経由でローカル利用可。クエリに 検索クエリ: 、文書に 検索文書: プレフィックスが必須。
日英混在ドキュメントに強い。Cohere Rerankと組み合わせると精度が上がる。なお v3.5 が2026年時点の最新版。
多言語・Rerank併用向け完全ローカル・無料。ただし英語ベースで日本語特化ではない。機密データでAPI不可の場合に限り、日本語専用KBには ruri-v3 の方が適切。
完全ローカル・無料⚠️ 埋め込みモデルはナレッジベース作成時にのみ選択できる。後から変更すると全チャンクの再インデックスが必要になり、処理時間とAPI費用が再度かかる。最初に決めておくこと。
Difyでの設定手順
① ナレッジベースの作成
- Dify管理画面 → 「ナレッジ」→「ナレッジを作成」
- ドキュメントをアップロード(PDF・TXT・Markdown・Notionページ対応)
- チャンク設定:
自動ではなくカスタム(汎用)を選択 - チャンク識別子:
\n\nを入力(空行で段落ごとに分割) - 最大チャンク長:
1,000/ オーバーラップ:100(単位は文字数) - インデックスモード:高品質(ハイブリッド検索はここで有効になる)を選択
- 埋め込みモデル:
text-embedding-3-small(OpenAI・手軽)/ruri-v3-310m(Ollama・日本語精度優先)/embed-multilingual-v3.0(Cohere・多言語)から選択 — 後から変更不可
② アプリケーションとの接続
- 「スタジオ」→ チャットボットアプリを作成(または既存アプリを選択)
- 「コンテキスト」セクションで上記ナレッジベースを追加
- 「Top K」を
6、「スコアしきい値」を0.5に設定
社内FAQ自動応答ボット — Dify DSL テンプレート
この記事の推奨設定(チャンクサイズ・スコアしきい値・システムプロンプト)をそのまま適用済み。ナレッジベースを接続するだけで動く。
精度を上げるTips
よくある失敗と対処法
まとめ
- 埋め込みモデルを先に決める(後から変更不可)— 日本語KB精度優先:
ruri-v3-310m(Ollama)/ 手軽さ優先:text-embedding-3-small(OpenAI)/ 多言語:embed-multilingual-v3.0(Cohere) - チャンク識別子:
\n\n(空行区切り)を設定する - 最大チャンク長:800〜1,200文字(Q&A形式なら800、手順書なら1,200)
- オーバーラップ:100文字
- インデックスモード:高品質(ベクトル検索 + ハイブリッド検索が有効になる)
- Top K:6
- スコアしきい値:0.5(「分からない」が多ければ 0.3〜0.4 に下げる)
- Temperature:0.1〜0.3
- システムプロンプトに「不明な場合は正直に答えよ」を明記する
Difyのチャンク設定はデフォルトのままでは精度が出ないケースが多い。本記事の設定値を起点に、自社ドキュメントに合わせて調整してほしい。月次でドキュメントを更新しナレッジベースを再インデックスする運用フローを整えることで、長期的に精度を維持できる。
参考資料
- Dify 公式ドキュメント — ナレッジベース・RAG設定の一次情報
- Dify GitHub リポジトリ(Apache 2.0)— リリースノートでバージョン別の変更点を確認できる
- Configure the Chunk Settings — チャンク分割・テキストクリーニングの公式ガイド
- Specify the Index Method and Retrieval Settings — ハイブリッド検索・インデックスモードの設定方法
📌 バージョン注記 本記事の手順・設定値は Dify v1.x 系(最新 v1.15.0・2026年7月時点)を参考にしています。Difyは月に複数回アップデートされるため、UIのラベルや設定項目が変わっている場合があります。公式ドキュメントと照合しながらご利用ください。