1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Difyのナレッジベースで作るRAGの基礎:チャンク・索引・検索の選び方

1
Last updated at Posted at 2026-08-01

Dify Knowledge Base RAG basics

Difyで「自前の文書を根拠に答えさせたい」とき、中核になるのがナレッジベース(Knowledge)だ。
公式ドキュメントでは、ナレッジは Retrieval-Augmented Generation(RAG)により、LLMの事前学習データだけに頼らず、自分のデータを追加の根拠として使う仕組みとして説明されている。
この記事では、初心者向けに RAG の流れと、Dify で最初に決めるチャンク・索引・検索の選び方を整理する。

結論:まず押さえる3点

決めごと 初心者の既定 後から変えやすいか
チャンクモード(General / Parent-child) FAQ・用語集なら General。手順書・マニュアルなら Parent-child 作成後は変更不可(区切り文字や最大長は後から調整可)
索引方式(High Quality / Economical) 精度を取るなら High Quality High Quality → Economical への切替は不可。Economical から High Quality へのアップグレードは可能
検索方式(Vector / Full-Text / Hybrid) 意味で当てたいなら Vector または Hybrid High Quality なら設定で選べる
RAGの段階 何が起きるか Difyでの対応箇所
Retrieval(検索) 質問に近いチャンクを取り出す ナレッジの索引・検索設定、Retrieval Testing
Augmented(補強) 取り出した文を質問と一緒にLLMへ渡す アプリの Context / Knowledge Retrieval ノード
Generation(生成) 文脈を踏まえて回答を作る LLMノード/チャットボットの応答

迷ったら「FAQを数ファイル入れて、High Quality + Hybrid(または Vector)で Retrieval Testing」から始めるとよい。

RAGとは何か(Dify公式の定義)

公式の Knowledge 概要では、RAG を次の3段階で説明している。

  1. Retrieval … ユーザーの質問に対し、取り込んだナレッジから最も関連する情報を取り出す
  2. Augmented … 取り出した情報を元の質問と組み合わせ、LLMへの補強コンテキストにする
  3. Generation … LLMがそのコンテキストを使って、より正確な回答を生成する

ポイントは「モデルを再学習する」のではなく、「質問のたびに関連文書を探して渡す」ことだ。
ナレッジベースは用途ごとに複数作れ、アプリへ選択的に紐づけられる。

ナレッジベースを作る最短手順

公式の「Create a Ready-to-Use Knowledge Base」は、次の4ステップだ。

  1. Knowledge → Create → Create a ready-to-use knowledge base で作成し、ローカルファイル/Notion/Webページを取り込む(空のナレッジも可)
  2. チャンク設定を決め、プレビューで分割結果を確認する
  3. 索引方式と検索設定を指定する
  4. データ処理の完了を待つ

取り込み後の索引化は非同期で進む。API上の状態遷移は waitingparsingcleaningsplittingindexingcompleted(または error)と説明されている。UIでも処理完了を待ってからアプリ連携に進む。

[文書アップロード]
      ↓
[前処理・クリーニング]
      ↓
[チャンク分割]  ← ここが検索の粒度を決める
      ↓
[索引(Embedding等)]
      ↓
[アプリの Context に紐づけ]
      ↓
[質問 → 検索 → コンテキスト補強 → 回答]

チャンク:長文を「探せる単位」に割る

チャンクは、長い文書を検索しやすい小さな断片に分割したものだ。
公式のたとえどおり、一冊の本を章・段落に分けるイメージでよい。全文を毎回LLMに渡すのは遅く非効率なので、関連しそうな断片だけを渡す。

主なパラメータ:

項目 意味
Delimiter(区切り文字) どこで切るか(例: \n\n は段落、\n は行)
Maximum chunk length 1チャンクの最大文字数。これを超えると強制分割
Chunk overlap(General) 隣接チャンクの重なり文字数。境界で文脈が切れにくくなる

注意点:

  • 区切り文字自体はチャンキング時に除去される。本文に自然に出てくる文字を区切りにしない
  • チャンクモード(General / Parent-child)はナレッジ作成後に変更できない
  • 区切り文字や最大長は後から調整できる

General と Parent-child

観点 General Parent-child
構造 1階層。同じ設定のチャンク 2階層。小さい child + 大きい parent
検索の動き 一致したチャンクをそのまま返す child でマッチし、返すのは parent(広い文脈)
使える索引 High Quality / Economical High Quality のみ
向きやすい用途 FAQ、用語集など自己完結な短い単位 手順書・技術文書など、文脈が必要な文書

Parent-child の parent は Paragraph(区切りと最大長で複数親)か Full Doc(文書全体を1親)を選べる。
Full Doc では先頭約10,000トークンのみ処理され、それ以降は切り捨てられる。parent の編集もできず、直すなら再アップロードが必要、と公式にある。

初心者の目安:

  • 1問1答に近い資料 → General
  • 「この節の前後も読ませたい」文書 → Parent-child(Paragraph)

索引方式:High Quality と Economical

方式 仕組み 検索オプション 注意
High Quality Embedding でチャンクをベクトル化。意味の近さで探せる Vector / Full-Text / Hybrid 作成後に Economical へは戻せない
Economical チャンクあたり最大10キーワード。トークン消費なしで精度は落ちやすい 転置索引ベース 期待に届かなければ High Quality へアップグレード可

High Quality では、ベクトルを多次元空間上の座標のように扱い、近い点ほど意味が近い、と公式が説明している。
画像も意味で取りたい場合は、Vision 対応のマルチモーダル Embedding を選ぶ。

検索設定:Vector / Full-Text / Hybrid

High Quality では、次の3つから選ぶ。

方式 何をするか 向く場面
Vector Search 質問をベクトル化し、近いチャンクを取る 言い回しが違う質問、多言語の意味合わせ
Full-Text Search 文書中の語を索引し、語句を含む断片を返す 固有名詞・型番など「Exactな語」が分かっているとき
Hybrid Search 全文検索とベクトル検索を同時に行い、結果を再整理 どちらも捨てたくないとき(実務の既定候補)

Hybrid では、外部 Rerank モデルなしの Weight settings(意味 vs キーワードの比重)か、外部 Rerank モデルを選べる。

よく触るパラメータ:

パラメータ 既定(公式) 意味
TopK 3 返すチャンク数の目安。大きいほど文脈は増えるがノイズも増えやすい
Score Threshold 0.5 これ未満の類似度は捨てる。上げるほど厳選される

公式の注意として、一部の設定では TopK / Score が Rerank フェーズでのみ効く場合がある。意図どおり絞りたいときは、Rerank の要否と設定画面の説明をセットで確認する。

複数ナレッジをアプリに紐づける場合は、マルチパス検索で各ナレッジから候補を集め、Weight Score または Rerank で最終順位を付ける流れになる。
Embedding モデルがナレッジ間で不一致だと Weight Score が使えず、Rerank や設定の統一が必要になる、という公式 FAQ もある。

アプリへ紐づけて動かす

代表的な流れ(チャットアシスタントを例にした公式手順):

  1. ナレッジを作成し文書を入れる
  2. Studio でアプリを作成する
  3. Context でナレッジを追加する(Chatflow/Workflow なら Knowledge Retrieval ノード)
  4. 必要なら Metadata Filtering で対象文書を絞る
  5. Retrieval Setting を確認する
  6. Citation and Attribution(引用・出典表示)を有効化すると根拠の可視化に役立つ
  7. Debug / Preview で質問を試し、問題なければ公開する

アプリ連携前に、ナレッジ画面の Retrieval Testing で「質問 → どのチャンクが返るか」を単体確認できる。
ここでの検索設定変更は一時的で、テストセッションにだけ効く。本番設定はナレッジ/アプリ側の正規設定で行う。

実装チェックリスト

  • 用途ごとにナレッジを分けるか、1つにまとめるかを決める(混ぜすぎると検索ノイズが増えやすい)
  • チャンクモードを決める前に、FAQかマニュアルかを判定する(後からモード変更不可)
  • Preview でチャンクを見て、1チャンクに複数論点が混ざっていないか確認する
  • 精度が必要なら High Quality を選び、Economical は検証用途かコスト制約時に限定する
  • 言い換え質問と Exact 語質問の両方で Retrieval Testing する
  • Hybrid なら Weight(意味/キーワード)か Rerank のどちらで順位付けするかを決める
  • アプリの Context にナレッジを紐づけ、Citation and Attribution を有効化して出典を確認する
  • TopK と Score Threshold を変え、回答の根拠が薄すぎ/多すぎないかを見る

失敗パターン

パターン1:文書を丸ごと1チャンクにして精度が出ない
→ 対策:General で段落区切り(\n\n)と最大長を見直し、Preview で「1チャンク=1トピック」に近づける。文脈が必要なら Parent-child を検討する。

パターン2:Economical のまま意味検索を期待する
→ 対策:言い換えや多言語の意味合わせが必要なら High Quality に上げる。Economical はキーワード寄りの簡易索引と割り切る。

パターン3:アプリに繋いだまま原因切り分けができず迷走する
→ 対策:先に Retrieval Testing で「取れているか」を見る。取れていないならチャンク/索引/検索の問題。取れているのに回答が悪いならプロンプトや TopK/閾値の問題、と切り分ける。

パターン4:複数ナレッジ+異なる Embedding で Weight Score が使えない
→ 対策:公式 FAQ どおり、Embedding を揃えるか Rerank モデルを使う。まずナレッジを1つに絞って挙動を固めるのも有効。

パターン5:Full Doc の Parent-child で長文が途中から消える
→ 対策:Full Doc は約10,000トークン制限がある。長い文書は Paragraph 親にするか、文書を分割して投入する。

まとめ

  • Dify のナレッジは、RAG(検索→補強→生成)で自前データを根拠にする仕組み。
  • 最初の分岐は チャンクモード索引方式。どちらも後からの自由度が低いので、FAQかマニュアルか・精度が要るかを先に決める。
  • 運用の肝は Retrieval Testing。「取れない」と「取れるが回答が悪い」を分けてからパラメータを触る。
  • アプリ側では Context 紐づけと Citation 表示までセットにすると、根拠付き回答の確認がしやすい。

次の一歩としては、短い FAQ(数問)を General + High Quality で入れ、言い換え質問で Retrieval Testing → 同じナレッジをチャットアプリの Context に載せる、までを一度通すと理解が定着する。

参考リンク

この記事を書いた人✏️@YushiYamamoto
ITPRODX.com代表 / AIアーキテクト
Next.js / TypeScript / n8nを活用した自律型アーキテクチャ設計を専門としています。
日々の自動化の検証結果や、ビジネス側の視点(ROI等)に関するより深い考察は、以下の公式サイトおよびnoteで発信しています。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?