LangChain:检索器和检索增强生成(RAG)
LangChain 的检索器是 RAG(检索增强生成)系统的核心组件,它提供了一套统一的接口来连接各种不同的数据源。无论是向量数据库、搜索引擎,还是传统的数据库,都可以通过这个接口被 LLM 应用轻松调用。
大型语言模型(LLM)功能强大,但它们有两个关键限制:
- 有限的上下文——无法一次性处理整个语料库。
- 静态的知识——它们的训练数据在某个时间点之后就固定了。
检索通过在查询时获取相关的外部知识来解决这些问题。这是检索增强生成(RAG)的基础:用特定上下文的信息来增强大型语言模型(LLM)的答案。
构建知识库
知识库是检索时使用的文档或结构化数据的存储库。如果你需要一个自定义知识库,可以使用 LangChain 的文档加载器和向量存储来基于你自己的数据构建一个。
如果已经有一个知识库(例如 SQL 数据库、CRM 或内部文档系统),则无需重建。可以:
- 将其作为工具连接到 Agentic RAG 中的智能体。
- 查询它,并将检索到的内容作为上下文提供给 LLM(2步式 RAG)。
请参考以下教程,构建一个可搜索的知识库和一个最小化的 RAG 工作流:
从检索到 RAG
检索使大语言模型( LLMs)能够在运行时访问相关上下文。但大多数实际应用更进一步:它们将检索与生成相结合,以生成有据可依、具备上下文感知的答案。
这就是 检索增强生成(RAG) 背后的核心理念。检索管道成为了一个更广泛系统的基石,该系统将搜索与生成相结合。
检索管道
一个典型的检索工作流如下所示:
flowchart LR S(["Sources
(Google Drive, Slack, Notion, etc.)"]) --> L[Document Loaders] L --> A([Documents]) A --> B[Split into chunks] B --> C[Turn into embeddings] C --> D[(Vector Store)] Q([User Query]) --> E[Query embedding] E --> D D --> F[Retriever] F --> G[LLM uses retrieved info] G --> H([Answer]) classDef trigger fill:#DCFCE7,stroke:#16A34A,stroke-width:2px,color:#14532D classDef process fill:#DBEAFE,stroke:#2563EB,stroke-width:2px,color:#1E3A8A classDef output fill:#F3E8FF,stroke:#9333EA,stroke-width:2px,color:#581C87 classDef neutral fill:#F3F4F6,stroke:#9CA3AF,stroke-width:2px,color:#374151 class S,Q trigger class L,B,C,E,F,G process class D output class A,H neutral
每个组件都是模块化的:你可以更换加载器、分割器、嵌入模型或向量存储,而无需重写应用程序的逻辑。
构建模块
使用到的组件:
- 文档加载器:从外部来源(如Google Drive、Slack、Notion等)获取数据,并返回标准化的Document对象。
- 嵌入模型:将文本转换为数字向量,以便语义相似的文本在向量空间中聚集在一起。
- 向量数据库:用于存储和搜索嵌入数据的专用数据库。
- 检索器:是一个接口,它根据非结构化查询返回文档。
RAG 架构
RAG 可以通过多种方式实现,具体取决于你的系统需求。我们将在以下各节中概述每种类型。
| 架构 | 描述 | 控制力 | 灵活性 | 延迟 | 示例用例 |
|---|---|---|---|---|---|
| 2步式 RAG | 检索总是在生成之前执行。简单且可预测 | ✅ 高 | ❌ 低 | ⚡ 快 | 常见问题解答、文档机器人 |
| Agentic RAG | 由 LLM 驱动的智能体在推理过程中决定何时以及如何检索 | ❌ 低 | ✅ 高 | ⏳ 可变 | 可访问多个工具的研究助手 |
| 混合式 | 结合了两种方法的特点,并加入了验证步骤 | ⚖️ 中等 | ⚖️ 中等 | ⏳ 可变 | 带有质量验证的领域特定问答 |
延迟:在 2步式 RAG 中,延迟通常更可预测,因为 LLM 调用的最大次数是已知且有上限的。这种可预测性假设 LLM 推理时间是主导因素。然而,实际延迟也可能受检索步骤性能的影响——例如 API 响应时间、网络延迟或数据库查询——这些可能因所使用的工具和基础设施而异。
2步式 RAG
在 2步式 RAG 中,检索步骤总是在生成步骤之前执行。这种架构简单明了且可预测,适合许多应用场景,在这些场景中,检索相关文档作为生成答案的明确前提条件。
graph LR
A[User Question] --> B["Retrieve Relevant Documents"]
B --> C["Generate Answer"]
C --> D[Return Answer to User]
%% Styling
classDef startend fill:#DCFCE7,stroke:#16A34A,stroke-width:2px,color:#14532D
classDef process fill:#DBEAFE,stroke:#2563EB,stroke-width:1.5px,color:#1E3A8A
class A,D startend
class B,C process
教程:检索增强生成(RAG) -> 使用LangChain构建RAG智能体
了解如何使用检索增强生成技术构建一个能够基于你的数据回答问题的问题与回答(Q&A)聊天机器人。本教程将介绍两种方法:
- 一个使用灵活工具进行搜索的RAG智能体——非常适合通用用途。
- 一个两步的RAG链,每个查询只需要调用一次大型语言模型(LLM)——对于较简单的任务来说,既快速又高效。
Agentic RAG
Agentic 检索增强生成(RAG)结合了检索增强生成的优势和基于智能体的推理能力。智能体(由大语言模型 LLM 驱动)不是先检索再回答,而是逐步推理,并在交互过程中决定何时以及如何检索信息。
智能体要实现 RAG 行为,唯一需要的是能够访问一个或多个可以获取外部知识的**工具(tools)**——例如文档加载器、网络 API 或数据库查询。
graph LR
A[User Input / Question] --> B["Agent (LLM)"]
B --> C{Need external info?}
C -- Yes --> D["Search using tool(s)"]
D --> H{Enough to answer?}
H -- No --> B
H -- Yes --> I[Generate final answer]
C -- No --> I
I --> J[Return to user]
%% Dark-mode friendly styling
classDef startend fill:#DCFCE7,stroke:#16A34A,stroke-width:2px,color:#14532D
classDef decision fill:#FEF3C7,stroke:#F59E0B,stroke-width:2px,color:#78350F
classDef process fill:#DBEAFE,stroke:#2563EB,stroke-width:1.5px,color:#1E3A8A
class A,J startend
class B,D,I process
class C,H decision
1 | import { tool, createAgent } from "langchain"; |
扩展示例,创建一个能够获取文档的LangChain智能体:针对 LangGraph 的 llms.txt 的 Agentic RAG
此示例实现了一个 Agentic RAG 系统,以帮助用户查询 LangGraph 文档。智能体首先加载 llms.txt,其中列出了可用的文档 URL,然后可以根据用户的问题动态使用 fetch_documentation 工具来检索和处理相关内容。
1 | // 1. 导入必要的模块 |
这段代码演示了如何构建一个 Agentic RAG 智能体:
- 智能体拥有一个名为
fetch_documentation的工具,可以从 LangChain 官方文档域名下获取网页内容。 - 系统提示强制智能体在回答关于 LangGraph 的问题前,必须使用该工具查阅最新文档。
- 通过预先加载
llms.txt,智能体知道有哪些可用文档的 URL。 - 最终用户询问一个具体示例时,智能体会先调用工具获取相关文档,再根据文档内容生成答案。
混合式 RAG
混合式 RAG 结合了 2步式 RAG 和 Agentic RAG 的特点。它引入了中间步骤,例如查询预处理、检索验证和生成后检查。这些系统提供了比固定管道更高的灵活性,同时保留了对执行流程的一定控制。典型组件包括:
- 查询增强:修改输入问题以提高检索质量。这可能涉及重写模糊的查询、生成多个变体或使用附加上下文扩展查询。
- 检索验证:评估检索到的文档是否相关且充分。如果不是,系统可能会优化查询并重新检索。
- 答案验证:检查生成的答案的准确性、完整性以及与源内容的一致性。如果需要,系统可以重新生成或修改答案。
该架构通常支持在这些步骤之间进行多次迭代:
graph LR
A[User Question] --> B[Query Enhancement]
B --> C[Retrieve Documents]
C --> D{Sufficient Info?}
D -- No --> E[Refine Query]
E --> C
D -- Yes --> F[Generate Answer]
F --> G{Answer Quality OK?}
G -- No --> H{Try Different Approach?}
H -- Yes --> E
H -- No --> I[Return Best Answer]
G -- Yes --> I
I --> J[Return to User]
classDef startend fill:#DCFCE7,stroke:#16A34A,stroke-width:2px,color:#14532D
classDef decision fill:#FEF3C7,stroke:#F59E0B,stroke-width:2px,color:#78350F
classDef process fill:#DBEAFE,stroke:#2563EB,stroke-width:1.5px,color:#1E3A8A
class A,J startend
class B,C,E,F,I process
class D,G,H decision
此架构适用于:
- 查询模糊或条件不足的应用
- 需要验证或质量控制步骤的系统
- 涉及多个来源或迭代优化的工作流
教程:具有自我修正功能的主动式RAG ->使用LangGraph构建一个自定义的RAG代理
一个将代理推理与检索和自我纠正相结合的混合式检索增强生成(RAG)示例。
RAG示例
使用LangChain构建RAG智能体:https://docs.langchain.com/oss/javascript/langchain/rag#rag-chains
使用LangGraph构建一个自定义的RAG代理:https://docs.langchain.com/oss/javascript/langgraph/agentic-rag
LangChain:检索器和检索增强生成(RAG)
http://blog.gxitsky.com/2026/03/24/AI-LangChain-029-Retrieval/

