# 知识检索

### 定义

从知识库中检索与用户问题相关的文本内容，可作为下游 LLM 节点的上下文来使用。

***

### 应用场景

常见情景：构建基于外部数据/知识的 AI 问答系统（RAG）。了解更多关于 RAG 的[基本概念](https://legacy-docs.dify.ai/zh-hans/learn-more/extended-reading/retrieval-augment)。

下图为一个最基础的知识库问答应用示例，该流程的执行逻辑为：知识库检索作为 LLM 节点的前置步骤，在用户问题传递至 LLM 节点之前，先在知识检索节点内将匹配用户问题最相关的文本内容并召回，随后在 LLM 节点内将用户问题与检索到的上下文一同作为输入，让 LLM 根据检索内容来回复问题。

<figure><img src="https://1288284732-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCdDIVDY6AtAz028MFT4d%2Fuploads%2Fy2YRW5rl2NjIn9VFnPfo%2Fimage.png?alt=media&#x26;token=91c67785-0e38-457c-a4a4-3c3a4325f144" alt=""><figcaption><p>知识库问答应用示例</p></figcaption></figure>

***

### 配置指引

**配置流程：**

1. 选择查询变量。查询变量通常代表用户输入的问题，该变量可以作为输入项并检索知识库中的相关文本分段。在常见的对话类应用中一般将开始节点的 `sys.query` 作为查询变量，知识库所能接受的最大查询内容为 200 字符；
2. 选择需要查询的知识库，可选知识库需要在 Dify 知识库内预先[创建](https://legacy-docs.dify.ai/zh-hans/guides/knowledge-base/create-knowledge-and-upload-documents)；
3. 在 元数据筛选 板块中配置元数据的筛选条件，使用元数据功能筛选知识库内的文档。详情请参阅[在应用内集成知识库](https://docs.dify.ai/zh-hans/guides/knowledge-base/integrate-knowledge-within-application)中的 **使用元数据筛选知识** 章节。
4. 指定[召回模式](https://legacy-docs.dify.ai/zh-hans/learn-more/extended-reading/retrieval-augment/retrieval)。自 9 月 1 日后，知识库的召回模式将自动切换为多路召回，不再建议使用 N 选 1 召回模式；
5. 连接并配置下游节点，一般为 LLM 节点；

<figure><img src="https://assets-docs.dify.ai/2025/03/f33b9a3ff1c9468fb5d7c1de4c1e02d6.png" alt=""><figcaption><p>知识检索配置</p></figcaption></figure>

**输出变量**

<figure><img src="https://1288284732-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCdDIVDY6AtAz028MFT4d%2Fuploads%2FNAy83340FWTooMtC3FQh%2Fimage.png?alt=media&#x26;token=7251b1e0-e2be-49ed-8c03-2e34cd531784" alt="" width="272"><figcaption><p>输出变量</p></figcaption></figure>

知识检索的输出变量 `result` 为从知识库中检索到的相关文本分段。其变量数据结构中包含了分段内容、标题、链接、图标、元数据信息。

**配置下游节点**

在常见的对话类应用中，知识库检索的下游节点一般为 LLM 节点，知识检索的**输出变量** `result` 需要配置在 LLM 节点中的 **上下文变量** 内关联赋值。关联后你可以在提示词的合适位置插入 **上下文变量**。

{% hint style="info" %}
上下文变量是 LLM 节点内定义的特殊变量类型，用于在提示词内插入外部检索的文本内容。
{% endhint %}

当用户提问时，若在知识检索中召回了相关文本，文本内容会作为上下文变量中的值填入提示词，提供 LLM 回复问题；若未在知识库检索中召回相关的文本，上下文变量值为空，LLM 则会直接回复用户问题。

<figure><img src="https://1288284732-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCdDIVDY6AtAz028MFT4d%2Fuploads%2FlRTJjSXjSN5XZBLqzr1r%2Fimage.png?alt=media&#x26;token=50091044-e33b-4123-bb81-50fd544e8767" alt=""><figcaption><p>配置下游 LLM 节点</p></figcaption></figure>

该变量除了可以作为 LLM 回复问题时的提示词上下文作为外部知识参考引用，另外由于其数据结构中包含了分段引用信息，同时可以支持应用端的 [**引用与归属**](https://legacy-docs.dify.ai/zh-hans/knowledge-base/retrieval-test-and-citation#id-2-yin-yong-yu-gui-shu) 功能。
