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

# 检索（Retrieval）

<Warning>
  **Alpha 版本提示：** 本文档涵盖的是 **v1-alpha** 版本。内容尚不完整，且可能随时变更。

  如需查阅最新稳定版本，请参阅 v0 版本的 [LangChain Python 文档](https://python.langchain.com/docs/introduction/) 或 [LangChain JavaScript 文档](https://js.langchain.com/docs/introduction/)。
</Warning>

大型语言模型（LLMs）功能强大，但存在两个关键限制：

* **有限上下文** —— 它们无法一次性处理整个语料库。
* **静态知识** —— 其训练数据在某个时间点后便被冻结。

检索（Retrieval）通过在查询时获取相关的外部知识来解决这些问题。这是\*\*检索增强生成（Retrieval-Augmented Generation, RAG）\*\*的基础：利用特定上下文信息增强LLM的回答。

## 构建知识库

**知识库**是在检索过程中使用的文档或结构化数据的存储库。

如果您需要自定义知识库，可以使用LangChain的文档加载器和向量存储从您自己的数据构建一个。

<Note>
  如果您已拥有知识库（例如SQL数据库、CRM或内部文档系统），则**无需**重建它。您可以：

  * 将其作为工具连接到Agentic RAG中的智能体。
  * 查询该知识库并将检索到的内容作为上下文提供给LLM（[两步RAG](#2-step-rag)）。
</Note>

请参阅以下教程，学习如何构建可搜索的知识库及最小化RAG工作流：

<Card title="教程：语义搜索" icon="database" href="/oss/python/langchain/knowledge-base" arrow cta="了解更多">
  学习如何使用LangChain的文档加载器、嵌入模型和向量存储，从您自己的数据创建可搜索的知识库。
  在本教程中，您将基于PDF构建搜索引擎，实现根据查询检索相关段落。您还将在此引擎基础上实现最小化的RAG工作流，观察外部知识如何融入LLM的推理过程。
</Card>

### 从检索到RAG

检索使LLM能够在运行时访问相关上下文。但大多数实际应用更进一步：它们将**检索与生成相结合**，以产生有依据、上下文感知的答案。

这正是\*\*检索增强生成（RAG）\*\*的核心理念。检索流水线成为更广泛系统的基础，该系统结合了搜索与生成。

### 检索流水线

典型的检索工作流如下所示：

```mermaid theme={null}
flowchart LR
  S(["数据源<br>(Google Drive、Slack、Notion等)"]) --> L[文档加载器]
  L --> A([文档])
  A --> B[拆分为块]
  B --> C[转换为嵌入向量]
  C --> D[(向量存储)]
  Q([用户查询]) --> E[查询嵌入]
  E --> D
  D --> F[检索器]
  F --> G[LLM使用检索到的信息]
  G --> H([答案])
```

每个组件都是模块化的：您可以更换加载器、分割器、嵌入模型或向量存储，而无需重写应用程序逻辑。

### 构建模块

<Columns cols={2}>
  <Card title="文档加载器" icon="file-import" href="/oss/python/integrations/document_loaders" arrow cta="了解更多">
    从外部来源（Google Drive、Slack、Notion等）导入数据，返回标准化的`Document`对象。
  </Card>

  <Card title="文本分割器" icon="scissors" href="/oss/python/integrations/splitters" arrow cta="了解更多">
    将大文档拆分为更小的块，以便单独检索并适应模型的上下文窗口。
  </Card>

  <Card title="嵌入模型" icon="diagram-project" href="/oss/python/integrations/text_embedding" arrow cta="了解更多">
    嵌入模型将文本转换为数字向量，使语义相似的文本在向量空间中彼此靠近。
  </Card>

  <Card title="向量存储" icon="database" href="/oss/python/integrations/vectorstores/" arrow cta="了解更多">
    用于存储和搜索嵌入向量的专用数据库。
  </Card>

  <Card title="检索器" icon="binoculars" href="/oss/python/integrations/retrievers/" arrow cta="了解更多">
    检索器是一种接口，可根据非结构化查询返回文档。
  </Card>
</Columns>

## RAG架构

RAG可根据系统需求以多种方式实现。我们在以下各节中概述每种类型。

| 架构              | 描述                               | 控制性   | 灵活性   | 延迟   | 示例用例         |
| --------------- | -------------------------------- | ----- | ----- | ---- | ------------ |
| **Agentic RAG** | 由LLM驱动的智能体在推理过程中决定*何时*以及*如何*进行检索 | ❌ 低   | ✅ 高   | ⏳ 可变 | 可访问多种工具的研究助手 |
| **2-Step RAG**  | 检索总是在生成之前进行。简单且可预测               | ✅ 高   | ❌ 低   | ⚡ 快速 | 常见问题解答、文档机器人 |
| **混合型**         | 结合两种方法的特点，并加入验证步骤                | ⚖️ 中等 | ⚖️ 中等 | ⏳ 可变 | 需质量验证的领域特定问答 |

<Info>
  **延迟**：在**2-Step RAG**中，延迟通常更**可预测**，因为LLM调用的最大次数是已知且有限的。这种可预测性假设LLM推理时间是主导因素。然而，实际延迟也可能受检索步骤性能的影响——例如API响应时间、网络延迟或数据库查询——这些因素会根据所使用的工具和基础设施而变化。
</Info>

### Agentic RAG

**Agentic检索增强生成（RAG）** 结合了检索增强生成与基于智能体的推理优势。智能体（由LLM驱动）不是在回答前检索文档，而是逐步推理，并在交互过程中决定**何时**以及**如何**检索信息。

<Tip>
  要使智能体具备RAG行为，唯一需要的是访问一个或多个可以获取外部知识的**工具**——例如文档加载器、Web API或数据库查询。
</Tip>

```mermaid theme={null}
graph LR
    A[用户输入 / 问题] --> B["智能体（LLM）"]
    B --> C{需要外部信息？}
    C -- 是 --> D["使用工具搜索"]
    D --> H{信息足够回答？}
    H -- 否 --> B
    H -- 是 --> I[生成最终答案]
    C -- 否 --> I
    I --> J[返回用户]

    %% 暗色模式友好样式
    classDef startend fill:#2e7d32,stroke:#1b5e20,stroke-width:2px,color:#fff
    classDef decision fill:#f9a825,stroke:#f57f17,stroke-width:2px,color:#000
    classDef process fill:#1976d2,stroke:#0d47a1,stroke-width:1.5px,color:#fff

    class A,J startend
    class B,D,I process
    class C,H decision
```

```python theme={null}
import requests
from langchain_core.tools import tool
from langchain.chat_models import init_chat_model
from langchain.agents import create_agent

@tool
def fetch_url(url: str) -> str:
    """从URL获取文本内容"""
    response = requests.get(url, timeout=10.0)
    response.raise_for_status()
    return response.text

system_prompt = """\
当需要从网页获取信息时，请使用fetch_url；引用相关片段。
"""

agent = create_react_agent(
    model=init_chat_model("claude-sonnet-4-0"),
    tools=[fetch_url], # 用于检索的工具 [!code highlight]
    prompt=system_prompt,
)
```

<Expandable title="扩展示例：用于LangGraph llms.txt的Agentic RAG">
  本示例实现了一个**Agentic RAG系统**，用于协助用户查询LangGraph文档。智能体首先加载[llms.txt](https://llmstxt.org/)（其中列出了可用文档URL），然后可根据用户问题动态使用`fetch_documentation`工具检索并处理相关内容。

  ```python theme={null}
  import requests
  from langchain.chat_models import init_chat_model
  from langchain_core.tools import tool
  from langgraph.prebuilt import create_react_agent
  from markdownify import markdownify

  ALLOWED_DOMAINS = ["https://langchain-ai.github.io/"]
  LLMS_TXT = 'https://langchain-ai.github.io/langgraph/llms.txt'


  @tool
  def fetch_documentation(url: str) -> str:  # [!code highlight]
      """从URL获取并转换文档"""
      if not any(url.startswith(domain) for domain in ALLOWED_DOMAINS):
          return (
              "错误：URL不允许。"
              f"必须以以下之一开头：{', '.join(ALLOWED_DOMAINS)}"
          )
      response = requests.get(url, timeout=10.0)
      response.raise_for_status()
      return markdownify(response.text)


  # 我们将获取llms.txt的内容，因此这可以在不需要LLM请求的情况下提前完成。
  llms_txt_content = requests.get(LLMS_TXT).text

  # 智能体的系统提示
  system_prompt = f"""
  您是一位Python开发专家和技术助手。
  您的主要职责是帮助用户解答有关LangGraph及相关工具的问题。

  说明：

  1. 如果用户提出您不确定的问题——或可能涉及API使用、行为或配置的问题——您必须使用`fetch_documentation`工具查阅相关文档。
  2. 引用文档时，请清晰总结并包含相关内容。
  3. 不要使用允许域之外的任何URL。
  4. 如果文档获取失败，请告知用户并根据您的最佳专业知识继续回答。

  您可以从以下经批准的来源访问官方文档：

  {llms_txt_content}

  在回答用户关于LangGraph的问题之前，您必须查阅文档以获取最新信息。

  您的回答应清晰、简洁且技术准确。
  """

  tools = [fetch_documentation]

  model = init_chat_model("claude-sonnet-4-0", max_tokens=32_000)

  agent = create_react_agent(
      model=model,
      tools=tools,  # [!code highlight]
      prompt=system_prompt,  # [!code highlight]
      name="Agentic RAG",
  )

  response = agent.invoke({
      'messages': [{
          'role': 'user',
          'content': (
              "编写一个简短的langgraph智能体示例，使用预构建的create react agent。"
              "该智能体应能够查询股票价格信息。"
          )
      }]
  })

  print(response['messages'][-1].content)
  ```
</Expandable>

<Card title="教程：检索增强生成（RAG）" icon="robot" href="/oss/python/langchain/rag" arrow cta="了解更多">
  查看如何构建一个基于您数据的问答聊天机器人，使用检索增强生成技术。
  本教程涵盖两种方法：

  * 一个使用灵活工具进行搜索的**RAG智能体**——适用于通用场景。
  * 一个每次查询仅需一次LLM调用的**两步RAG链**——对简单任务快速高效。
</Card>

### 两步RAG

在**两步RAG**中，检索步骤总是在生成步骤之前执行。这种架构简单且可预测，适用于许多应用场景，其中检索相关文档是生成答案的明确前提。

```mermaid theme={null}
graph LR
    A[用户问题] --> B["检索相关文档"]
    B --> C["生成答案"]
    C --> D[返回答案给用户]

    %% 样式
    classDef startend fill:#2e7d32,stroke:#1b5e20,stroke-width:2px,color:#fff
    classDef process fill:#1976d2,stroke:#0d47a1,stroke-width:1.5px,color:#fff

    class A,D startend
    class B,C process
```

<Card title="教程：检索增强生成（RAG）" icon="robot" href="/oss/python/langchain/rag#rag-chains" arrow cta="了解更多">
  查看如何构建一个基于您数据的问答聊天机器人，使用检索增强生成技术。
  本教程涵盖两种方法：

  * 一个使用灵活工具进行搜索的**RAG智能体**——适用于通用场景。
  * 一个每次查询仅需一次LLM调用的**两步RAG链**——对简单任务快速高效。
</Card>

### 混合型RAG

混合型RAG结合了两步RAG和Agentic RAG的特点。它引入了中间步骤，如查询预处理、检索验证和生成后检查。这些系统比固定流水线更灵活，同时保持对执行过程的部分控制。

典型组件包括：

* **查询增强**：修改输入问题以提高检索质量。这可能包括重写不明确的查询、生成多个变体或通过附加上下文扩展查询。
* **检索验证**：评估检索到的文档是否相关且充分。如果不充分，系统可优化查询并再次检索。
* **答案验证**：检查生成答案的准确性、完整性和与源内容的一致性。如有必要，系统可重新生成或修订答案。

该架构通常支持这些步骤之间的多次迭代：

```mermaid theme={null}
graph LR
    A[用户问题] --> B[查询增强]
    B --> C[检索文档]
    C --> D{信息是否充分？}
    D -- 否 --> E[优化查询]
    E --> C
    D -- 是 --> F[生成答案]
    F --> G{答案质量是否合格？}
    G -- 否 --> H{尝试不同方法？}
    H -- 是 --> E
    H -- 否 --> I[返回最佳答案]
    G -- 是 --> I
    I --> J[返回用户]

    classDef startend fill:#2e7d32,stroke:#1b5e20,stroke-width:2px,color:#fff
    classDef decision fill:#f9a825,stroke:#f57f17,stroke-width:2px,color:#000
    classDef process fill:#1976d2,stroke:#0d47a1,stroke-width:1.5px,color:#fff

    class A,J startend
    class B,C,E,F,I process
    class D,G,H decision
```

这种架构适用于：

* 查询模糊或未明确指定的应用场景
* 需要验证或质量控制步骤的系统
* 涉及多个来源或迭代优化的工作流

<Card title="教程：带自我修正的Agentic RAG" icon="robot" href="/oss/python/langgraph/agentic-rag" arrow cta="了解更多">
  一个结合智能体推理、检索与自我修正的**混合型RAG**示例。
</Card>
