大型语言模型(LLM)很强大,但有两个关键限制:
  • 有限上下文:它们无法一次摄入完整语料库。
  • 静态知识:它们的训练数据冻结在某个时间点。
检索通过在查询时获取相关外部知识来解决这些问题。这是 Retrieval-Augmented Generation(RAG) 的基础:使用特定上下文信息增强 LLM 的答案。

构建知识库

知识库是在检索期间使用的文档或结构化数据仓库。 如果你需要自定义知识库,可以使用 LangChain 的 document loaders 和 vector stores 基于自己的数据构建一个。
如果你已经有知识库(例如 SQL 数据库、CRM 或内部文档系统),不需要重新构建它。你可以:
  • 在 Agentic RAG 中将它作为代理的 tool 连接。
  • 查询它,并将检索到的内容作为上下文提供给 LLM (2-Step RAG)
查看下面的教程,构建可搜索知识库和最小 RAG 工作流:

教程:语义搜索

学习如何使用 LangChain 的 document loaders、embeddings 和 vector stores 从自己的数据创建可搜索知识库。 在本教程中,你将基于 PDF 构建搜索引擎,用于检索与查询相关的段落。你还将在该引擎之上实现最小 RAG 工作流,了解如何将外部知识集成到 LLM 推理中。

从检索到 RAG

检索让 LLM 能够在运行时访问相关上下文。但大多数真实应用会更进一步:它们会将检索与生成集成,产生有依据且上下文感知的答案。 这是 Retrieval-Augmented Generation(RAG) 背后的核心思想。检索管线会成为更广泛系统的基础,将搜索与生成结合起来。

检索管线

典型检索工作流如下: 每个组件都是模块化的:你可以替换 loaders、splitters、embeddings 或 vector stores,而无需重写应用逻辑。

构建块

Document loaders

从外部来源(Google Drive、Slack、Notion 等)摄入数据,并返回标准化的 Document 对象。

Text splitters

将大型文档拆分成更小的 chunks,使其可单独检索并适配模型上下文窗口。

Embedding models

Embedding model 会将文本转换为数字向量,使语义相近的文本在向量空间中彼此接近。

Vector stores

用于存储和搜索 embeddings 的专用数据库。

Retrievers

Retriever 是一种接口,会根据非结构化查询返回文档。

RAG 架构

RAG 可以根据系统需求用多种方式实现。下面几节概述每种类型。
架构描述控制力灵活性延迟示例用例
2-Step RAG检索总是发生在生成之前。简单且可预测✅ 高❌ 低⚡ 快FAQ、文档机器人
Agentic RAG由 LLM 驱动的代理在推理期间决定何时以及如何检索❌ 低✅ 高⏳ 可变可访问多个工具的研究助手
Hybrid结合两种方法的特征,并加入验证步骤⚖️ 中⚖️ 中⏳ 可变带质量验证的领域特定问答
延迟2-Step RAG 的延迟通常更可预测,因为 LLM 调用的最大次数已知且有上限。这种可预测性假设 LLM 推理时间是主导因素。不过,真实延迟也可能受到检索步骤性能影响,例如 API 响应时间、网络延迟或数据库查询,这些会随着所用工具和基础设施而变化。

2-step RAG

2-Step RAG 中,检索步骤总是在生成步骤之前执行。该架构直接且可预测,适合许多应用,其中检索相关文档是生成答案的明确前提。

教程:Retrieval-Augmented Generation (RAG)

了解如何使用 Retrieval-Augmented Generation 构建一个基于你的数据回答问题的问答聊天机器人。 本教程演示两种方法:
  • 使用灵活工具运行搜索的 RAG agent,非常适合通用用途。
  • 每次查询只需要一次 LLM 调用的 2-step RAG 链,对于简单任务快速高效。

Agentic RAG

Agentic Retrieval-Augmented Generation(RAG) 将 Retrieval-Augmented Generation 的优势与基于代理的推理结合起来。它不是在回答前检索文档,而是由一个(由 LLM 驱动的)代理逐步推理,并在交互期间决定何时以及如何检索信息。
代理要启用 RAG 行为,只需要访问一个或多个可以获取外部知识的 tools,例如文档 loaders、Web API 或数据库查询。
import requests
from langchain.tools import tool
from langchain.chat_models import init_chat_model
from langchain.agents import create_agent


@tool
def fetch_url(url: str) -> str:
    """Fetch text content from a URL"""
    response = requests.get(url, timeout=10.0)
    response.raise_for_status()
    return response.text

system_prompt = """\
Use fetch_url when you need to fetch information from a web-page; quote relevant snippets.
"""

agent = create_agent(
    model="claude-sonnet-4-6",
    tools=[fetch_url], # A tool for retrieval
    system_prompt=system_prompt,
)

教程:Retrieval-Augmented Generation (RAG)

了解如何使用 Retrieval-Augmented Generation 构建一个基于你的数据回答问题的问答聊天机器人。 本教程演示两种方法:
  • 使用灵活工具运行搜索的 RAG agent,非常适合通用用途。
  • 每次查询只需要一次 LLM 调用的 2-step RAG 链,对于简单任务快速高效。

Hybrid RAG

Hybrid RAG 结合了 2-Step 和 Agentic RAG 的特征。它引入查询预处理、检索验证和生成后检查等中间步骤。这些系统比固定管线更灵活,同时保留一定的执行控制力。 典型组件包括:
  • 查询增强:修改输入问题以提高检索质量。这可能包括重写不清晰查询、生成多个变体,或用额外上下文扩展查询。
  • 检索验证:评估检索到的文档是否相关且充分。如果不满足,系统可以优化查询并重新检索。
  • 答案验证:检查生成答案的准确性、完整性以及与源内容的一致性。必要时,系统可以重新生成或修订答案。
该架构通常支持在这些步骤之间多次迭代: 此架构适用于:
  • 查询模糊或说明不足的应用
  • 需要验证或质量控制步骤的系统
  • 涉及多个来源或迭代优化的工作流

教程:带自我纠正的 Agentic RAG

一个 Hybrid RAG 示例,结合了 agentic reasoning、检索和自我纠正。