> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dify.ai/llms.txt
> Use this file to discover all available pages before exploring further.

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

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

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

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

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

1. **ナレッジ** にアクセスし、**すぐに使えるナレッジベース** を作成してファイルをアップロードします。
2. **スタジオ** にアクセスし、アプリを作成して **チャットボット** を選択します。
3. **コンテキスト** に進んで **追加** をクリックし、作成済みのナレッジベースを選択します。
4. **メタデータフィルタリング** を使用して、ナレッジベース内のドキュメント検索を絞り込みます。
5. **コンテキスト設定** > **検索設定** で **検索設定** を構成します。
6. **機能を追加** で **引用と帰属** を有効にします。
7. **デバッグとプレビュー** で、ナレッジベースに関連するユーザーの質問を入力してデバッグします。
8. デバッグが完了したら、**公開** ボタンをクリックして、自社のナレッジベースに基づく AI アプリケーションを公開します。

### ナレッジベースの関連付けと検索モードの設定

複数のナレッジベースを利用するアプリケーションでは、検索されるコンテンツの精度を高めるために検索モードを設定することが重要です。ナレッジベースの検索モードを設定するには、**コンテキスト** > **検索設定** > **Rerank 設定** に進みます。

#### 検索設定

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

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

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

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

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

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

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

#### 重み設定

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

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

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

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

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

**Rerank モデル**

Rerank モデルは外部のスコアリングシステムで、ユーザーの質問と各候補ドキュメントの類似度スコアを計算します。これにより、セマンティックランキングの結果が改善され、類似度スコアの高い順に並べ替えたドキュメントリストが返されます。

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

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

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

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

* **TopK**

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

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

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

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

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

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

**設定手順**

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   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）を選択し、そのチャットフロー/ワークフロー**内で文書のフィルタリングに使用する変数を選択します。

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

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

      > 時間タイプのフィールドは定数によるフィルタリングのみに対応しています。日付選択ツールは、この時間タイプのフィールド用です。

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

   <Info>
     フィルタリング値は大文字と小文字を区別し、完全一致が必要です。例えば、フィルタリング条件を `starts with "App"` または `contains "App"` に設定した場合、「Apple」には一致しますが、「apple」や「APPLE」には一致しません。
   </Info>

   6. 論理演算子 `AND` または `OR` を設定します。
      * `AND`：すべての条件に一致する文書のみを検索します。
      * `OR`：いずれかの条件に一致する文書を検索します。

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

   7. パネルの外側をクリックすると、設定が保存されます。

   **チャットボット**

   **チャットボット** では、画面左下の **ナレッジ** の下にある **メタデータフィルタリング** を開きます。設定手順は **チャットフロー/ワークフロー** の場合と同じです。

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

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

   ナレッジベースの左側で、関連付けられているすべてのアプリを確認できます。円形のアイコンにカーソルを合わせると、関連付けられたアプリの一覧が表示されます。右側のジャンプボタンをクリックすると、すばやく各アプリを開けます。

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

   #### よくある質問

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

   ユーザーが正確な情報や用語を把握している場合は、キーワード検索による正確な一致が利用できます。その場合は、**重み設定** で **「キーワード」を 1** に設定します。

   ナレッジベースに正確な用語が含まれていない場合や、言語をまたぐクエリの場合は、**重み設定** で **「セマンティック」を 1** に設定することをおすすめします。

   実際のユーザークエリを把握していて、セマンティックとキーワードの比率を調整したい場合は、**重み設定** で比率を手動で調整できます。

   ナレッジベースが複雑で、単純なセマンティック検索やキーワード検索では不十分な場合、かつ高い精度の回答が必要で追加コストを許容できる場合は、コンテンツ検索に **Rerank モデル** を使用することを検討してください。

   2. **「重み設定」が見つからない、または Rerank モデルの設定を求められる場合、どうすればよいですか？**

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

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

   3. **複数のナレッジベースを参照する際、「重み設定」を調整できず、エラーメッセージが表示される場合はどうすればよいですか？**

   この問題は、参照している複数のナレッジベースで使用している埋め込みモデルが一致していないために発生します。検索コンテンツの競合を避けるため、この通知が表示されます。「モデルプロバイダー」で Rerank モデルを設定して有効にするか、各ナレッジベースの検索設定を統一することをおすすめします。

   4. **複数リコールモードで「重み設定」オプションが見つからず、Rerank モデルしか表示されないのはなぜですか？**

   ナレッジベースで「経済的」インデックス方法を使用していないか確認してください。使用している場合は、「高品質」インデックス方法に切り替えてください。
