> ## Documentation Index
> Fetch the complete documentation index at: https://dify-6c0370d8-add-new-agent.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# アプリ内でのナレッジベース統合

<Note> ⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/use-dify/knowledge/integrate-knowledge-within-application)を参照してください。</Note>

### 1 ナレッジベースの引用プロセス

ナレッジベースは、大言語モデルに対して外部知識を提供し、ユーザーの質問に正確に回答するために使用されます。Difyの[すべてのアプリタイプ](/ja/use-dify/getting-started/key-concepts#difyアプリ)内で作成されたナレッジベースを関連付けることができます。

チャットボットを例にすると、以下の手順で進めます：

1. **スタジオ -- アプリを作成 -- チャットボットを作成**に進む
2. **コンテキスト設定**に進み、**追加**をクリックし、作成済みのナレッジベースを選択
3. **コンテキスト設定 -- パラメータ設定**内で**リコール策略**を設定
4. ナレッジベース内のドキュメント検索を最適化するには、**メタデータフィルタリング**を活用します。
5. **コンテキスト設定 - 検索設定**で**検索パラメータ**を構成します。
6. **機能追加**内で**引用と帰属**をオンにする
7. **デバッグとプレビュー**内でナレッジベース関連のユーザー質問を入力してデバッグ
8. デバッグが完了したら、**保存して公開**し、AIナレッジベースQ\&Aアプリケーションとして公開

***

### ナレッジベースの関連付けとリコールモードの設定

現在のアプリケーションのコンテキストが複数のナレッジベースに関連している場合、検索結果をより正確にするためにリコールモードを設定する必要があります。**コンテキスト→パラメータ設定→リコール設定** に進み、ナレッジベースのリコールモードを選択します。

#### 検索設定

複数リコールモードでは、検索器はアプリに関連付けられたすべてのナレッジベースから、ユーザーの問題に関連するテキスト内容を検索します。そして、複数リコールの関連文書結果を統合します。以下は複数リコールモードの技術フローチャートです：

![](https://assets-docs.dify.ai/2025/04/745b9de1cdd9465bfbad2ddc5f27bd12.png)

ユーザーの意図に基づいて、すべての **「コンテキスト」** に追加されたナレッジベースを同時に検索し、関連するテキスト断片を複数のナレッジベースからクエリし、ユーザーの問題に最も一致する内容を選択します。最適なコンテンツをRerank戦略で見つけてユーザーに回答します。この方法はより科学的な検索原理です。

![](https://assets-docs.dify.ai/2025/04/7bbd3dd734d9ebc83cef0e3244fa4fb7.png)

例：アプリAのコンテキストには、K1、K2、K3 の3つのナレッジベースが関連付けられています。ユーザーが問い合わせを入力すると、3つのナレッジベースで検索を行い、複数の内容をまとめます。最適な内容を見つけるためには、Rerank戦略を使用してユーザーの問題に最も関連する内容を特定し、結果をより正確で信頼性の高いものにします。

実際の質疑応答シーンでは、各ナレッジベースのコンテンツの出典や検索方法が異なる場合があります。複数の混合コンテンツが返される検索に対して、Rerank戦略はより科学的なコンテンツの並べ替えメカニズムです。これにより、候補コンテンツリストをユーザーの問題に一致させ、複数の知識間の結果の順序を改善し、最も一致するコンテンツを見つけて回答の質とユーザーエクスペリエンスを向上させることができます。

Rerankの使用コストとビジネス要件を考慮すると、複数リコールモードは次の2つのRerank設定を提供します：

#### 重み設定

この設定には外部のRerankモデルの構成は不要で、コンテンツの再並べ替えに**追加コストは発生しません**。セマンティクスまたはキーワードの重み比率を設定します。

* **セマンティック値が1の場合**

  セマンティック検索モードが有効になります。このモードでは、埋め込みモデルを利用して、クエリに正確な単語がナレッジベースに存在しない場合でも、ベクトル距離を計算することで検索の精度を向上させ、適切なコンテンツを返すことができます。また、複数言語のコンテンツを扱う場合には、セマンティック検索が異なる言語間の意味を把握し、より正確なクロス言語検索結果を提供します。
* **キーワード値が1の場合**

  この場合、キーワード検索モードが有効になります。ユーザーが入力した情報テキストがナレッジベース全体と一致し、ユーザーが正確な情報や用語を把握している場合に適しています。この方法は計算リソースを少なく消費し、大量の文書を迅速に検索するのに適しています。
* **カスタムキーワードとセマンティックの重み**

  セマンティック検索またはキーワード検索モードのいずれかを選択する代わりに、柔軟なカスタム重み設定も利用可能です。両者の重みを調整し続けることで、ビジネスシナリオに最も適した重み比率を見つけることができます。

**Rerankモデル**

Rerankモデルは外部のスコアリングシステムで、ユーザーの質問と各候補文書の関連性スコアを計算します。これにより、セマンティックソートの結果が改善され、関連性に基づいて高い順に並べ替えられた文書リストが返されます。

この方法には追加のコストが発生しますが、ナレッジベースのコンテンツが複雑な場合に特に適しています。セマンティッククエリとキーワードマッチングのコンテンツが混在している場合や、複数言語のコンテンツが含まれる場合に優れた結果を提供します。

Difyは現在、複数のRerankモデルをサポートしており、"モデルサプライヤー"ページでRerankモデル（例：Cohere、Jina AIなど）のAPIキーを入力することができます。

![](https://assets-docs.dify.ai/2025/04/f4f4906edc67f6052a38c0a605b58469.png)

**調整可能なパラメータ**

* **TopK**

  ユーザーの質問に最も類似したテキストセグメントを選択するために使用されます。システムはモデルの選択に基づいてコンテキストウィンドウサイズを動的に調整し、セグメントの数を増やします。数値が高いほど、リコールされるテキストセグメントの数が増加します。
* **スコアの閾値**

  テキストセグメントの選択に使用される類似性の閾値を設定します。ベクトル検索の類似性スコアは、設定したスコアを超える必要があり、数値が高いほどリコールされるテキストの数が減少します。

複数のリコールモードを利用することで、高品質なリコール効果を得ることができるため、リコールモードを複数のリコールモードに設定することを強くお勧めします。

### メタデータを使用して知識をフィルタリングする

#### チャットフロー/ワークフロー

**チャットフロー/ワークフロー**の**知識検索**ノードでは、**メタデータフィルタリング**機能を使用して文書を正確に検索できます。この機能は、文書のメタデータフィールド（タグ、カテゴリ、アクセス権限など）に基づいて検索結果を最適化するのに役立ちます。

**設定手順**

1. フィルタリングモードを選択する

   * **無効モード**（デフォルト）：**メタデータフィルタリング**機能を無効にし、フィルタリング条件を設定しません。

   * **自動モード**：システムは**知識検索**ノードに渡される**クエリ変数**に基づいてフィルタリング条件を自動的に設定します。簡単なフィルタリング要件に適しています。

   > 自動モードを有効にした後も、**モデル**欄で文書検索タスクを実行するための適切な大規模モデルを選択する必要があります。

   ![モードを選択](https://assets-docs.dify.ai/2025/03/fe387793ad9923660f9f9470aacff01b.png)

   * **手動モード**：ユーザーが手動でフィルタリング条件を設定し、フィルタリングルールを自由に設定できます。複雑なフィルタリング要件に適しています。

![手動モード](https://assets-docs.dify.ai/2025/03/ec6329e265e035e3a0d6941c9313a19d.png)

2. **手動モード**を選択した場合は、以下の手順でフィルタリング条件を設定してください：

   1. **条件**ボタンをクリックすると、設定ボックスが表示されます。

   ![条件](https://assets-docs.dify.ai/2025/03/cd80d150f6f5646350b7ac8dfee46429.png)

   2. 設定ボックスの\*\*+条件を追加\*\*ボタンをクリックします：

      * ドロップダウンリストから選択したナレッジベース内の既存のメタデータフィールドを選択し、フィルタリング条件リストに追加できます。

      > 複数のナレッジベースを同時に選択した場合、ドロップダウンリストにはこれらのナレッジベースに共通するメタデータフィールドのみが表示されます。

      * **メタデータを検索**検索ボックスで必要なフィールドを検索し、フィルタリング条件リストに追加することもできます。

   ![条件を追加](https://assets-docs.dify.ai/2025/03/72678c4174f753f306378b748fbe6635.png)

   3. 複数のフィールドを追加する必要がある場合は、**+条件を追加**ボタンを繰り返しクリックします。

   ![複数のフィールドを追加](https://assets-docs.dify.ai/2025/03/aeb518c40aabdf467c9d2c23016d0a16.png)

   4. フィールドタイプごとのフィルタリング条件を設定します：

   | フィールドタイプ     | フィルタリング条件                                                                                                        | フィルタリング条件の説明と例                                                                           |
   | ------------ | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
   | 文字列          | is                                                                                                               | フィールドの値は入力した値と完全に一致する必要があります。例えば、フィルタリング条件を is `"公開済み"` に設定した場合、「公開済み」とマークされた文書のみが返されます。 |
   | is not       | フィールドの値は入力した値と一致してはいけません。例えば、フィルタリング条件を `is not "下書き"` に設定した場合、「下書き」とマークされていないすべての文書が返されます。                      |                                                                                          |
   | is empty     | フィールドの値が空です。この条件を設定すると、その文字列がマークされていない文書を検索できます。                                                                 |                                                                                          |
   | is not empty | フィールドの値が空ではありません。この条件を設定すると、その文字列がマークされている文書を検索できます。                                                             |                                                                                          |
   | contains     | フィールドの値に入力したテキストが含まれています。例えば、フィルタリング条件を `contains "レポート"` に設定した場合、「月次レポート」や「年次レポート」など、「レポート」を含むすべての文書が返されます。     |                                                                                          |
   | not contains | フィールドの値に入力したテキストが含まれていません。例えば、フィルタリング条件を `not contains "下書き"` に設定した場合、「下書き」を含まないすべての文書が返されます。                    |                                                                                          |
   | starts with  | フィールドの値が入力したテキストで始まります。例えば、フィルタリング条件を `starts with "Doc"` に設定した場合、「Doc1」や「Document」など、「Doc」で始まるすべての文書が返されます。     |                                                                                          |
   | ends with    | フィールドの値が入力したテキストで終わります。例えば、フィルタリング条件を `ends with "2024"` に設定した場合、「レポート 2024」や「概要 2024」など、「2024」で終わるすべての文書が返されます。 |                                                                                          |
   | 数値           | =                                                                                                                | フィールドの値は入力した数値と等しい必要があります。例えば、`= 10` は数値が10とマークされているすべての文書に一致します。                        |
   | ≠            | フィールドの値は入力した数値と等しくてはいけません。例えば、`≠ 5` は数値が5とマークされていないすべての文書を返します。                                                  |                                                                                          |
   | >            | フィールドの値は入力した数値より大きい必要があります。例えば、`> 100` は数値が100より大きいとマークされているすべての文書を返します。                                         |                                                                                          |
   | \<           | フィールドの値は入力した数値より小さい必要があります。例えば、`< 50` は数値が50より小さいとマークされているすべての文書を返します。                                           |                                                                                          |
   | ≥            | フィールドの値は入力した数値以上である必要があります。例えば、`≥ 20` は数値が20以上とマークされているすべての文書を返します。                                              |                                                                                          |
   | ≤            | フィールドの値は入力した数値以下である必要があります。例えば、`≤ 200` は数値が200以下とマークされているすべての文書を返します。                                            |                                                                                          |
   | is empty     | フィールドに値が設定されていません。例えば、`is empty` はそのフィールドに数値がマークされていないすべての文書を返します。                                               |                                                                                          |
   | is not empty | フィールドに値が設定されています。例えば、`is not empty` はそのフィールドに数値がマークされているすべての文書を返します。                                             |                                                                                          |
   | 時間           | is                                                                                                               | フィールドの時間値は選択した時間と完全に一致する必要があります。例えば、`is "2024-01-01"` は2024年1月1日とマークされている文書のみを返します。      |
   | before       | フィールドの時間値は選択した時間より前でなければなりません。例えば、`before "2024-01-01"` は2024年1月1日より前とマークされているすべての文書を返します。                       |                                                                                          |
   | after        | フィールドの時間値は選択した時間より後でなければなりません。例えば、`after "2024-01-01"` は2024年1月1日より後とマークされているすべての文書を返します。                        |                                                                                          |
   | is empty     | フィールドの時間値が空です。この条件を設定すると、その時間情報がマークされていない文书を検索できます。                                                              |                                                                                          |
   | is not empty | フィールドの時間値が空ではありません。この条件を設定すると、その时间信息がマークされている文书を検索できます。                                                          |                                                                                          |

   5. メタデータフィルタリング値を選択して追加します：

      * **変数**：**変数（Variable）を選択し、そのチャットフロー/ワークフロー**内で文書のフィルタリングに使用する変数を選択します。

      ![変数](https://assets-docs.dify.ai/2025/03/4c2c55ffcf0f72553fabdf23f86597d0.png)

      * **定数**：\*\*定数（Constant）\*\*を選択し、必要な定数値を手動で入力します。

      > **时间**フィールドタイプは定数のみを使用した文書フィルタリングをサポートしています。时间フィールドを使用して文书をフィルタリングする場合、システムは时间选択ツールを表示し、特定の时点を选択できるようにします。

      ![日付選択ツール](https://assets-docs.dify.ai/2025/03/593da1575ddc995d938bd0cc3847cf3c.png)

   <Info>
     定数フィルタリング值を入力する場合、そのフィルタリング值はそのメタデータフィールド值のテキストと完全に一致する必要があり、システムはその文書を返します。例えば、フィルタリング条件を `starts with "アプリ"` または `contains "アプリ"` に設定した場合、システムは「Apple」とマークされた文書を返しますが、「apple」や「APPLE」とマークされた文书は返しません。
   </Info>

   6. フィルタリング条件间の论理関系 `AND` または `OR` を设置します。
      * `AND`：文书がすべてのフィルタリング条件を满足する場合にのみ、その文书を検索できます。
      * `OR`：文书がいずれかのフィルタリング条件を满足する場合、その文书を検索できます。

   ![ロジク](https://assets-docs.dify.ai/2025/03/822dac015308dc5c01768afc0697c1ad.png)

   7. ポップアップを闭じると、システムは自动的に选択内容を保存します。

   **チャットボット**

   **チャットボット**では、**メタデータフィルタリング**构能はインターフェースの左下にある**コンテキスト**セクションの下に位置し、设置方法は**チャットフロー/ワークフロー**での操做と同じです。同じ手顺でメタデータフィルタリング条件を设置できます。

   ![チャットボット](https://assets-docs.dify.ai/2025/03/9d9a64bde687a686f24fd99d6f193c57.png)

   #### ナレッジベースでリンクされたアプリを表示する

   ナレッジベースの左侧に関連するアプリを表示し、アプリケーションページでの变更をサポートします。

   ![リンクされたアプリを表示する](https://assets-docs.dify.ai/2024/12/e729839d257617d75fbb70cb5894f796.png)

   #### よくある質問

   1. **複数のリコールモードでのRerank設定の選択方法は？**

   ユーザーが正确な信息や用语を知っている場合は、キーワード検索を使用して一致する结果を正确に取得できるため、「重み设置」の**キーワード优先モード**をおすすめします。

   ナレッジベースに正确な単语が表示されていない场合や、クロス语言クエリがある场合は、「重み设置」の**セマンティック优先モード**を选択することをおすすめします。

   ビジネスユーザーが实际の质问シナリオに详しく、セマンティックまたはキーワードの比率を积极的に调整したい场合は、「重み设置」の**カスタムモード**を选択することをお勧めします。

   ナレッジベースのコンテンツが复杂であり、セマンティックまたはキーワードのシンプルな条件で一致させることができない场合、伤っ正确な返信が必要で追加料金を支払うことを望む场合は、コンテンツ检索に**Rerankモデル**を使用することをおすすめします。

   2. **「重み设置」が见つからない、またはRerankモデルの设定が必要な场合、どのように対処すれば良いですか？**

   以下は、複数のリコール方法がナレッジベース検索に与える影响を示します：

   ![](https://assets-docs.dify.ai/2025/04/b641427faf40e90e6a5cecd54c39779c.png)

   3. **複数のナレッジベースを引用する际、「重み设置」を调整できず、エラーが表示される场合はどう対処すれば良いですか？**

   この问题が发生すると、引用される複数のナレッジベースで使用される埋め込みモデルが一致しないためです。检索コンテンツの竞争を避けるためには、以下の推荐解决策を试みてください。「モデルプロバイダー」で设置を行い、Rerankモデルを有効にするか、ナレッジベースの検索设置を统一してください。

   4. **複数のリコール方法が使用されている场合、「重み设置」オプションが见つからず、Rerankモデルしか表示されない理由は何ですか？**

   ナレッジベースが「エコノミー」モードのインデックスモードを使用しているかどうかを确认してください。その场合は、「ハイクオリティ」モードのインデックスモードに切り替えてください。
