Difyにナレッジベースを作成する

アフィリエイト広告を利用しています

このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です

前回の記事で FAQ 資料が完成しました。この記事では、Dify のナレッジベースに FAQ ファイルをアップロードし、チャンク分割の設定を行い、検索テストで期待どおりの結果が返るかを確認するまでの作業をまとめています。

ナレッジベースを作成する

ナレッジの基本設定

Dify の管理画面で、上部ナビゲーションの「ナレッジ」をクリックし、「+ ナレッジベースを作成」を選択します。

ナレッジベースの名前は、後から見て何のデータかわかるものにしておきます。今回は Claude Code Lab の記事を題材にしているので、そのまま記事シリーズの名前を付けました。

ドキュメントをアップロードする

対応ファイル形式

Dify のナレッジベースは、さまざまなファイル形式に対応しています。

カテゴリ対応形式
テキストTXT、Markdown、HTML、XML
ドキュメントPDF、DOCX、PPTX、EPUB
データCSV、XLSX、XLS、JSONL
メールEML、MSG

前回の記事で、FAQ 資料は Markdown(.md)形式で作成しました。Dify がネイティブに対応しており、Q: / A: のプレフィックスも正しくパースされます。

アップロードの手順

ナレッジベースの作成画面で「ファイルをアップロード」を選択し、前回作成した5つの FAQ ファイルをまとめてアップロードします。

ファイルカテゴリQ&A数
01-basics-and-safety.md基本と安全性・環境構成の選定15
02-environment-setup.mdUbuntu・ユーザー・SSH・リソース制限14
03-install-and-workflow.mdインストール・ワークフロー設定8
04-file-sync-and-dev.mdファイル同期・WordPress・開発ツール11
05-daily-dev-and-ops.md日常開発・新規プロジェクト・移行15

アップロードが完了すると、テキストの分割設定画面に進みます。

チャンク分割の設定を確認する

チャンクとは何か

チャンクとは、アップロードしたドキュメントを検索可能な単位に分割した断片のことです。お客様が質問したとき、Dify はナレッジベース全体ではなく、関連するチャンクだけを検索して LLM に渡します。

分割の仕方が回答精度に直結します。チャンクが大きすぎると関係ない情報まで含まれ、小さすぎると文脈が失われます。FAQ 形式(1問1答)で資料を作っておくと、1つの Q&A ペアが1チャンクになるため、この問題を回避できます。

分割サイズの考え方

Dify のチャンク設定画面では、以下の項目を設定します。

項目設定値説明
チャンク設定汎用テキスト分割モード。Q&A形式でも正しく動作する
チャンク識別子\n\n(空行)空行で区切る。FAQ の Q&A ペア間に空行があるため、1問1答で分割される
最大チャンク長1,024 charactersデフォルトのまま。FAQ は1問あたり数百文字なので十分
チャンクのオーバーラップ50 characters隣接するチャンクの重複部分。デフォルトのまま
インデックス方法高品質Embeddingモデルでベクトル化する。精度重視
埋め込みモデルtext-embedding-3-small記事2で選定したOpenAIのEmbeddingモデル
検索設定ベクトル検索セマンティック検索。意味的に近いチャンクを返す
トップ K3検索結果の上位3件を LLM に渡す

埋め込みモデルは、デフォルトでは text-embedding-3-large が選択されています。今回は text-embedding-3-small に変更しました。FAQ 用途では small で十分な精度があり、コストも抑えられます。一度「高品質」モードで埋め込みを行うと「経済的」モードに戻せないため、モデルの選択は最初に確認しておきます。

設定が決まったら「チャンクをプレビュー」で分割結果を確認します。FAQ の Q&A ペアごとに1チャンクになっていれば正しく動作しています。確認できたら「保存して処理」を実行します。

ナレッジベースの検索テストをする

テストクエリで期待どおりの結果が返るか確認

ドキュメントの処理が完了したら、ナレッジベースの「検索テスト」画面でテストクエリを実行します。質問文を入力すると、関連度の高いチャンクがスコア付きで返ってきます。

テストクエリは、実際にユーザーが聞きそうな自然な言い回しで試すのがポイントです。FAQ に書かれた質問文そのままではなく、少し表現を変えて検索してみます。

テストクエリの例期待するヒット
Claude Code って何?Claude Code の基本説明に関する FAQ
WSL2ではだめなの?環境構成の比較に関する FAQ
毎日の作業の流れを教えて日常の開発サイクルに関する FAQ

検索結果のスコアは 0〜1 の範囲で、1 に近いほど関連度が高いことを示します。スコアが 0.3 以上であれば、おおむね関連するチャンクがヒットしていると判断できます。

期待どおりの FAQ がヒットしない場合は、以下を見直します。

  • FAQ の質問文が抽象的すぎる — 質問文にキーワードが含まれていないと検索にヒットしにくい
  • チャンク分割が正しくない — 1つのチャンクに複数の Q&A が混在していないか確認
  • 回答文に情報が足りない — 回答が短すぎるとベクトルの特徴量が不足し、検索精度が下がる

検索テストで問題がなければ、ナレッジベースの準備は完了です。次の記事では、このナレッジベースを使ってチャットボットを構築し、サイトに公開します。