检索 (Retrieval)
大语言模型 (LLM) 功能强大,但有两个关键限制:
- 有限的上下文 — 它们无法一次性处理整个语料库
- 静态知识 — 它们的训练数据在某个时间点被冻结
检索通过在查询时获取相关的外部知识来解决这些问题。这是检索增强生成 (RAG) 的基础:用特定上下文的信息增强 LLM 的答案。
构建知识库
知识库是在检索过程中使用的文档或结构化数据的存储库。
如果你需要自定义知识库,可以使用 LangChain 的文档加载器和向量存储从你自己的数据构建。
注意:如果你已经有知识库(例如 SQL 数据库、CRM 或内部文档系统),你不需要重建它。你可以:
- 将其作为智能体 RAG 中的工具连接
- 查询它并将检索到的内容作为上下文提供给 LLM(两步 RAG)
从检索到 RAG
检索允许 LLM 在运行时访问相关上下文。但大多数实际应用更进一步:它们将检索与生成集成以产生有根据的、上下文感知的答案。
这是检索增强生成 (RAG) 的核心思想。检索管道成为一个更广泛系统的基础,该系统将搜索与生成相结合。
检索管道
典型的检索工作流程如下:
- 加载 - 使用文档加载器从各种来源获取数据
- 分割 - 将文档分割成较小的块
- 嵌入 - 使用嵌入模型将文本转换为向量
- 存储 - 将向量存储在向量数据库中
- 检索 - 根据查询检索相关文档
每个组件都是模块化的:你可以在不重写应用程序逻辑的情况下替换加载器、分割器、嵌入或向量存储。
构建模块
- 文档加载器 - 从外部来源(Google Drive、Slack、Notion 等)获取数据,返回标准化的
Document对象 - 嵌入模型 - 将文本转换为向量,使语义相似的文本在向量空间中彼此接近
- 向量存储 - 用于存储和搜索嵌入的专用数据库
- 检索器 - 给定非结构化查询返回文档的接口
RAG 架构
RAG 可以根据系统需求以多种方式实现。我们在下面概述每种类型。
| 架构 | 描述 | 控制性 | 灵活性 | 延迟 | 示例用例 |
|---|---|---|---|---|---|
| 两步 RAG | 检索总是在生成之前进行。简单且可预测 | 高 | 低 | 快 | FAQ、文档机器人 |
| 智能体 RAG | LLM 驱动的智能体决定何时和如何在推理过程中检索 | 低 | 高 | 可变 | 可访问多个工具的研究助手 |
| 混合 | 结合两种方法的特点,带有验证步骤 | 中等 | 中等 | 可变 | 带质量验证的领域特定问答 |
延迟说明:在两步 RAG 中,延迟通常更加可预测,因为 LLM 调用的最大次数是已知且有上限的。
两步 RAG
在两步 RAG 中,检索步骤总是在生成步骤之前执行。这种架构简单且可预测。
// 两步 RAG: 先检索,后生成
async function twoStepRAG(query: string) {
// 步骤 1: 检索
const docs = await retriever.invoke(query);
// 步骤 2: 生成
const response = await model.invoke([
{ role: "system", content: `基于以下文档回答:\n${docs.map(d => d.pageContent).join("\n")}` },
{ role: "user", content: query }
]);
return response;
}
智能体 RAG
在智能体 RAG 中,智能体决定何时以及如何检索信息。
import { createAgent, tool } from "langchain";
import * as z from "zod";
const searchDocs = tool(
async ({ query }) => {
const docs = await retriever.invoke(query);
return docs.map(d => d.pageContent).join("\n");
},
{
name: "search_docs",
description: "搜索知识库中的相关文档",
schema: z.object({
query: z.string().describe("搜索查询"),
}),
}
);
const agent = createAgent({
model: "gpt-4o",
tools: [searchDocs],
prompt: "你是一个研究助手。根据需要搜索文档来回答问题。",
});
最佳实践
- 选择合适的块大小 - 根据你的用例调整文档块的大小
- 使用元数据过滤 - 利用向量存储的元数据过滤功能缩小搜索范围
- 实现重排序 - 使用重排序模型提高检索结果的相关性
- 监控和迭代 - 跟踪检索质量并持续改进