第5章 知識検索の基本

第4章までで、基本形「ユーザー入力 → LLM → 出力」を自分で組めるようになりました。この章では、その基本形に「登録した資料を根拠に答えさせる」働きを追加し、第3章3-3で示した 「ユーザー入力 → 知識検索 → LLM → 出力」 を自分で作れるようになることが目標です。前半でナレッジを作って資料を登録し(5-2)、後半でそれをワークフローにつなぎます(5-3)。

ナレッジへの登録と、ワークフローからの検索の基本は、本章で一通り説明します。

5-1. ナレッジとRAGの考え方

AIモデルは、本市の要綱・規程・手引きの中身を知りません。そこで、答えの根拠にしたい資料をナレッジ(資料をためて検索できる保管庫。序章0-3)に登録しておき、質問が来るたびに関連する箇所を探してAIモデルに渡します。

このとき、登録した資料の全文をLLMが毎回すべて読むわけではありません。しくみは次のとおりです。

  1. 登録のとき:資料をチャンク(検索用に区切った断片)に分割し、インデックス化(検索できるように登録すること)しておきます。
  2. 質問のとき:ユーザーの質問に関連するチャンクだけを検索で拾い出します。
  3. 回答のとき:拾ったチャンクを根拠としてLLMに渡し、それをもとに答えさせます。

これが、登録した資料を根拠に探して答える仕組み(RAG/ラグ)です。毎回全文を渡さないのは、AIモデルが一度に読める量に限りがあり、量に応じた費用もかかるためです。関連する断片だけを渡すことで、資料が多くても、質問に関係する箇所を根拠にした答えを返せます。

資料をチャンクに分割して登録し、質問に関連する断片だけを検索してLLMへ渡す流れ 図5-1 登録のとき資料をチャンクに分割して登録し、質問のとき関連する断片だけを拾ってLLMへ渡す

埋め込みモデルとは

チャンクを「意味の近さで探せる形」に変換する仕組みを 埋め込みモデル と呼びます。

文章をそのまま比べると、コンピューターには「近い意味かどうか」が分かりません。そこで、文章を数字の並びに変換しておき、その数字の近さで意味の近さを判断できるようにします。この変換をするのが埋め込みモデルです。

たとえば「プロジェクターを借りたい」と「備品の貸出手続き」は、共通する言葉がほとんどありません。それでも埋め込みモデルを使うと、両方が「備品を借りる話」として近い数字に変換されるため、言葉が一致しなくても関連する箇所を拾えます。

埋め込みモデルは、登録のとき(資料のチャンクを変換)と、質問のとき(質問文を変換)の両方で使われます。どちらも同じモデルで変換するからこそ、近さを比べられます。登録に使うモデルは、この後の手順4で選びます。

この検索を担うのが、ワークフローに置く 知識検索ノード(公式ドキュメントの表記は「知識検索」。第3章3-1)です。ナレッジ本体(資料の置き場所)と、知識検索ノード(ワークフローの中で探しに行く部品)は別のものです。まず5-2でナレッジ本体を作り、5-3でノードからつなぎます。

5-2. ナレッジを作って資料を登録する

ここからは実際に操作します。まず、ナレッジを作って資料を登録し、ナレッジ単体で検索できる状態まで進めます。設定はすべて初期表示のままで構いません。各設定が何をするものかは、その設定が出てくる手順の中で説明します。

前提:Difyにログインしていること。登録する文書ファイルを手元に用意していること。この章の例では、会議室の予約方法・利用時間・備品の借り方をまとめた架空の「会議室利用の手引き」を使います。練習では、個人情報や外部に出せない情報を含む資料は使わないでください。

手順1:ナレッジを作成する

  1. ワークスペースのメニューから「ナレッジ」を開きます(序章0-3)。
  2. ナレッジを作成するボタンを押します。
  3. 資料の取り込み方を選ぶ画面が表示されます。手元のファイルを取り込む方法のほか、外部サービス(Notion)やWebページから取り込む方法、先に空のナレッジだけ作る方法があります。本章では、ファイルを取り込む方法を使います。

ナレッジ画面から新規作成を開き、取り込み方の選択肢が表示された状態

手順2:ファイルや資料を登録する

用意した文書ファイルをアップロードします。登録できるファイル形式・1ファイルの容量・一度に取り込める件数の上限は、お使いの環境や契約内容により異なります。

完了した状態:アップロードしたファイルが取り込み対象として表示されている。

手順3:チャンクへの分割を設定して確認する

「次へ」を押すと、チャンク設定の画面に進みます。ここで、資料をどう区切るかを決めます。設定は初期表示のまま進めて構いませんが、それぞれが何をする項目かを知っておくと、後で調整するときに迷いません。

区切り方の方式(2つから選ぶ)

方式 画面の説明 どんなときに使うか
汎用 汎用テキスト分割モードです。検索とコンテキスト抽出に同じチャンクを使用します。 通常はこちら。探すときも、根拠として渡すときも、同じ断片を使う
親子 親子分割モード(階層分割モード)では、子チャンクを検索に、親チャンクをコンテキスト抽出に使用します。 小さい断片で正確に探しつつ、前後を含む大きなまとまりを根拠として渡したいとき

この方式は、ナレッジを作った後には変更できません(区切りの目印・長さなどの設定値は、後から変更できます)。本章では初期表示の「汎用」のまま進めます。

汎用を選んだときの設定項目

項目 何をするものか 初期値
チャンク識別子 どこで区切るかの目印。初期値の \n\n は「空行で区切る」という意味。見出しや箇条書きで区切りたいときは、その記号(例:***)を指定する \n\n
最大チャンク長 1つの断片に入れる文字数の上限(4000まで)。長くすると文脈は保てるが、関係の薄い部分も一緒に渡ることになる。短くすると狙いは絞れるが、文の途中で切れやすくなる 1,024
チャンクのオーバーラップ 隣り合う断片を、どれだけ重ねるかの文字数。重ねておくと、区切り目にまたがる内容を取りこぼしにくくなる 50
テキストの前処理ルール 登録前に本文を整える設定。「連続するスペース、改行、タブを置換する」(初期状態で有効)と「すべての URL とメールアドレスを削除する」の2つ 前者のみ有効
要約自動生成 断片ごとに要約を自動で作る設定。有効にすると登録に時間と費用がかかる 無効
Q&A 形式で分割 資料から質問と答えの組を作って登録する設定。よくある質問集のような資料で使う。右側で言語を選ぶ 無効

「チャンクをプレビュー」で区切られ方を確かめる

設定した内容で実際にどう区切られるかは、画面左下の 「チャンクをプレビュー」ボタンを押すと確認できます。

  1. 「チャンクをプレビュー」ボタンを押します。
  2. 画面右側の「プレビュー」欄に、Chunk-1Chunk-2……と、区切られた断片が順番に表示されます。断片ごとに文字数も表示されます。
  3. 上部に「推定チャンク数」が表示され、資料全体がいくつの断片になるかが分かります。

見るポイントは 「その断片だけを読んで意味が通るか」 です。文の途中で切れている箇所が目立つ場合も、まずはこのまま進め、後の検索テストで支障が出たときに見直します(5-4)。設定を変えたら、もう一度「チャンクをプレビュー」を押すと、新しい区切り方で表示し直されます。

チャンク分割の設定画面で、プレビューに区切られた断片が表示された状態

手順4:インデックス方法と検索設定を決めて登録を完了する

同じ画面を下にスクロールすると、インデックス方法検索設定があります。ここも初期表示のまま進めて構いません。

インデックス方法(2つから選ぶ)

方式 画面の説明 意味
高品質(推奨) 埋め込みモデルを呼び出してドキュメントを処理し、より正確な検索を行うと、LLM が高品質の回答を生成するのに役立ちます。 5-1で説明した埋め込みモデルで、意味の近さで探せる形に変換して登録する。言い換えや略称に強い
経済的 検索時にチャンクあたり 10 個のキーワードを使用することで、精度は低下しますが、トークン消費を抑えられます。 断片から言葉を抜き出して登録する。言葉が一致したときだけ拾えるが、費用を抑えられる

「高品質」から「経済的」へは戻せません。 画面にも「高品質モードで埋め込みを終了したら、経済的モードに戻すことはできません」と表示されます(「経済的」から「高品質」への変更はできます)。迷ったら初期値の「高品質」のままにしてください。

埋め込みモデル:「高品質」を選ぶと、変換に使うモデルを選ぶ欄が表示されます。ここに出るのは、管理者がワークスペースに登録済みのモデルです。登録に使ったモデルは後から変えられないため、通常は初期表示のままにします。

検索設定(3つから選ぶ)

方式 画面の説明 得意なこと
ベクトル検索 クエリの埋め込みを生成し、そのベクトル表現に最も類似したテキストチャンクを検索します。 意味の近さで探す。質問と資料で言葉が一致していなくても拾える。略称・言い回しのずれに強い
全文検索 ドキュメント内のすべての用語をインデックス化し、ユーザーが任意の用語を検索してそれに関連するテキストチャンクを取得できるようにします。 言葉の一致で探す。様式番号・固有名称に強く、言い換えには弱い
ハイブリッド検索(推奨) 全文検索とベクトル検索を同時に実行し、ユーザーのクエリに最適なマッチを選択するために Rerank 付けを行います。 両方で候補を集めて、まとめて並べ直す。Rerank モデルの設定が必要

検索設定の細かい項目

項目 何をするものか 初期値
Rerank モデル 集めた候補を、質問との関連度で並べ直す仕組み。使うには、お使いの環境にRerank用のモデルが登録されている必要がある 環境による
トップ K 検索で拾う件数。増やすと拾い漏れは減るが、関係の薄い断片も混ざりやすくなる 3
スコア閾値 関連度の合格ライン。上げると関係の薄い断片を外せるが、根拠になる断片まで落とすことがある 0.5

設定できたら「保存して処理」を押します。登録処理が始まり、処理が終わると、その資料は検索の対象になります。

完了した状態:登録処理が終わり、資料が利用できる状態として表示されている。

手順5:検索テストで確かめる

ワークフローにつなぐ前に、ナレッジ単体で「質問に対して根拠を拾えるか」を確かめます。

  1. 作成したナレッジを開き、左側の「検索テスト」(ナレッジが根拠を拾えるかを試す機能。英語の表示例:Retrieval Testing)を開きます。
  2. 資料に書いてある内容の質問文(例:「プロジェクターを借りるにはどうすればよいですか」)を入力して実行します。
  3. 検索で拾われたチャンクが表示されます。答えの根拠になるチャンクが拾えていれば成功です。

完了した状態:資料にある内容の質問で、根拠になるチャンクが拾われて表示される。

検索テスト画面で、質問に対して拾われたチャンクと関連度の点数が表示された状態

※本章の画面手順は公式ドキュメントの記述を根拠にしています。ボタン・欄の名称や画面の構成は、環境やバージョンにより異なることがあります(序章「本書の確認環境」)。

5-3. ワークフローに知識検索をつなぐ

次に、5-2で作ったナレッジをワークフローから使います。例として、職員が会議室の使い方を質問すると、手引きを根拠に答える小さなFAQアプリを作ります。第4章で組んだ基本形に、知識検索ノードを1つ追加する形です。

前提:ワークフローを新規作成し、ユーザー入力ノードに質問の入力欄(変数名 question・型は段落)を作ってあること(作り方は第4章4-1)。

手順6:知識検索ノードを追加する

  1. ユーザー入力ノードの右側の「+」を押し、ノードの一覧から知識検索ノードを選びます。ユーザー入力ノードと線でつながります(ノードの追加操作は「チュートリアル やさしい日本語ワークフロー作成」のステップ3・第7章7-2と同じです)。

手順7:使用するナレッジと検索クエリを設定する

  1. 知識検索ノードの設定欄で、検索対象のナレッジとして5-2で作ったナレッジを選びます(複数のナレッジを同時に指定することもできます)。
  2. クエリテキスト(何を手がかりに探すかの欄)に、ユーザー入力ノードで作った変数 question を指定します。これで、利用者が入力した質問文がそのまま検索の手がかりになります。

完了した状態:知識検索ノードに、探しに行くナレッジと、検索の手がかりにする変数 question が設定されている。

知識検索ノードの設定欄で、使用するナレッジと変数 question が設定された状態

手順8:検索結果をLLMノードのコンテキストへ渡す

  1. 知識検索ノードの後ろにLLMノードを追加します。

  2. LLMノードの「コンテキスト」欄(回答の根拠を与える欄。第4章4-2)に、知識検索ノードの出力変数 result(拾ったチャンクの一覧)を選んで割り当てます。

  3. SYSTEM欄に、コンテキストを根拠に答えさせる指示文を書きます。例:

    あなたは庁内の問い合わせ対応の担当です。コンテキストに渡された資料の内容だけを根拠に、質問に答えてください。資料に書かれていないことは推測せず、「お渡しした資料には記載がありません」と答えてください。

  4. 同じSYSTEM欄に、コンテキストと質問文の2つを差し込みます。 指示文の続きで改行し、次のように入力します。

    • 「参考資料:」と入力し、続けて「/」を押して候補一覧から コンテキスト を選びます。
    • さらに改行して「質問:」と入力し、「/」を押して候補一覧から question(手順7で使った変数)を選びます。

手順4の割り当てだけでは足りません。 コンテキスト欄に result を割り当てても、指示文の中にコンテキストを差し込んでいないと、画面に「コンテキスト利用時はプロンプトに変数を明記してください」と表示され、資料が根拠として使われません。同じように、質問文(question)も指示文に差し込まないと、LLMには質問が届かず「ご質問が入力されていません」といった答えが返ります(実機確認:2026-09-02)。

ここが本章の中心です。よく「LLMノードでナレッジを選択する」と一言で説明されますが、それでは設定の実体が分かりません。実際には、次の3つがそろって初めて、資料を根拠にした回答になります。

そろえるもの 設定する場所 欠けると起きること
どのナレッジを・何を手がかりに探すか 知識検索ノード(手順7) 資料が検索されない
検索結果 result をLLMへ渡す LLMノードのコンテキスト欄(手順8の2) 資料がLLMに届かない
コンテキストと質問文を指示文に差し込む LLMノードのSYSTEM欄(手順8の4) 資料が使われない/質問が届かない

完了した状態:LLMノードのコンテキストに result が割り当てられ、SYSTEM欄に指示文・コンテキスト・質問文の3つが入っている。

手順9:ナレッジに基づいた回答を確認する

  1. LLMノードの後ろに出力ノードをつなぎ、LLMノードの text を出力する変数に割り当てます(第4章4-3)。
  2. テスト実行で、次の2つを確かめます。
    • 資料にある内容の質問(例:「プロジェクターを借りるには?」)→ 手引きの記載に沿った回答が返ること。
    • 資料にない内容の質問(例:「出張旅費の精算方法は?」)→ 「記載がありません」の趣旨の回答が返ること。

完了した状態:「ユーザー入力 → 知識検索 → LLM → 出力」の4ノードがつながり、登録した資料を根拠にした回答が返る。

テスト実行で、資料を根拠にした回答が表示された状態

5-4. 初期表示のまま作って、必要になったら調整する

本章の進め方をまとめると、次の順番になります。

  1. まず初期表示のままナレッジを作る(5-2)。最初から設定を作り込む必要はありません。
  2. 検索テストで、根拠を拾えるかを確かめる(5-2の手順5)。拾えていれば、そのままワークフローにつないで使い始めます。
  3. 答えの根拠を拾えないときに、初めて設定を調整する

チャンクの長さ・重なりの値の決め方、検索方式の使い分け、Rerankを使うかどうかの判断は、資料の性格と質問のしかたによって最適な値が変わります。あらかじめ正解を決めることはできないため、「初期表示のまま作り、検索テストで確かめ、必要になったら1つずつ調整する」という進め方を身につけてください。

調整するときの基本のポイント

設定を変更するときは、一度に1つだけ変えて、同じ質問の検索テストで前後を比べます。複数の設定を同時に変えると、どれが効いたのか分からなくなります。質問を変えてしまうと、設定の効果なのか質問の違いなのかが分からなくなります。

拾えないときに見直す順番の目安は、次のとおりです。

症状 まず見直す設定 見直す場所
関係する断片がまったく拾われない トップ K を増やす/スコア閾値を下げる 手順4の検索設定
関係の薄い断片ばかり拾われる スコア閾値を上げる/トップ K を減らす 手順4の検索設定
断片が文の途中で切れていて意味が通らない 最大チャンク長・チャンクのオーバーラップ・チャンク識別子 手順3のチャンク設定
言い換えた質問だと拾えない 検索設定をベクトル検索またはハイブリッド検索にする 手順4の検索設定
様式番号や固有の名称で拾えない 検索設定を全文検索またはハイブリッド検索にする 手順4の検索設定

なお、トップ K・スコア閾値・Rerankは、ナレッジ本体側の設定とは別に、知識検索ノード側でもノード単位で調整できます。同じナレッジを複数のアプリから使い、アプリごとに検索の効かせ方を変えたいときに使います。

また、検索テストの画面で設定を変えて試すこともできますが、そこでの変更はその場限りです。確定するにはナレッジ本体の設定を変更してください(5-2の手順5)。

まとめ

次に進む

次は、第6章「条件分岐」で、入力の内容によって処理を分けるノード(IF/ELSEノード・質問分類器・変数集約器)の設定を説明します。

出典一覧

本章の記述の根拠です(いずれも確認日:2026-09-02)。

内容 出典
ナレッジ作成の手順(取り込み方4種=ローカルファイル・Notion・Webページ・空のナレッジ/チャンク設定とプレビュー/インデックス方式と検索設定/処理完了で検索対象になる) https://docs.dify.ai/en/guides/knowledge-base/create-knowledge-and-upload-documents
チャンク(一般/親子の2方式・区切りの目印・最大の長さ・重なり・プレビュー・方式は作成後に変更不可、設定値は変更可) https://docs.dify.ai/en/guides/knowledge-base/create-knowledge-and-upload-documents/chunking-and-cleaning-text
インデックス方式(高品質=埋め込みモデルで変換/経済的=言葉を抜き出して登録・高品質から経済的へは戻せない・経済的から高品質へは変更可)・検索方式3種(ベクトル・全文・ハイブリッドと比重指定)・Top K既定値3・スコアしきい値既定値0.5・Rerankは初期無効 https://docs.dify.ai/en/guides/knowledge-base/create-knowledge-and-upload-documents/setting-indexing-methods
検索テスト(質問を入力して検索の拾い方を試せる・テスト内の設定変更はその場限り・入力した質問は記録に残る) https://docs.dify.ai/en/guides/knowledge-base/retrieval-test-and-citation
知識検索ノード(クエリの変数指定・複数ナレッジの指定・ノード単位の検索設定=Rerank/Top K/スコアしきい値・出力変数 result=拾ったチャンクの一覧・LLMノードのコンテキストに result を選んで指示文から参照する) https://docs.dify.ai/en/cloud/use-dify/nodes/knowledge-retrieval.md

※本章の画面手順は、上記の公式ドキュメントの記述のみを根拠としています(本章の執筆にあたっての実機確認は行っていません。ノードの端の「+」からノードを追加できることのみ、チュートリアル「やさしい日本語ワークフロー作成」の実機確認(2026-09-02・クラウド版)を根拠としています)。ボタン・欄の文言や画面の名称は、環境・バージョンにより異なることがあります(序章「本書の確認環境」参照)。5-3の指示文の例と、5-5の「初期表示のまま作って必要時に調整する」進め方は、公式ドキュメントの仕様ではなく本書の書き方の提案です。