RAG检索增强生成技术如何让大语言模型实时查阅文档?
Retrieval-Augmented Generation (RAG) is an AI framework that enhances Large Language Models (LLMs) by integrating real-time information retrieval from external knowledge bases, addressing limitations like outdated knowledge, hallucinations, and high retraining costs through a four-phase pipeline: indexing, retrieval, augmentation, and generation. 原文翻译: 检索增强生成(RAG)是一种AI框架,通过集成从外部知识库的实时信息检索来增强大型语言模型(LLMs),通过索引、检索、增强和生成四个阶段解决知识过时、幻觉和高昂的再训练成本等限制。
If you've ever wondered how ChatGPT-style apps can suddenly "know" about your company's internal documents, product manuals, or legal files without being retrained, the answer is almost always RAG — Retrieval-Augmented Generation. In this post, we'll break down what RAG is, why it exists, and walk through the full pipeline step-by-step with a real example.
你是否曾好奇,像 ChatGPT 这样的应用是如何在无需重新训练的情况下,突然“知道”你公司的内部文档、产品手册或法律文件的?答案几乎总是 RAG——检索增强生成。在本文中,我们将剖析 RAG 是什么、它为何存在,并通过一个真实示例逐步讲解其完整流程。
1. 什么是 RAG?
检索增强生成 是一种人工智能框架,它将一个信息检索组件集成到大语言模型的生成过程中,以提高事实准确性和相关性。
In plain English:
用通俗的话来说:
Instead of making the LLM remember everything, we let it look things up in a knowledge base right before answering.
我们不是让大语言模型记住所有东西,而是允许它在回答前查阅知识库。
RAG 这一术语由 Patrick Lewis 等人在 2020 年 发表于 arXiv 的研究论文(《用于知识密集型 NLP 任务的检索增强生成》)中提出。其核心洞见是:将参数化记忆(LLM 的权重)与非参数化记忆(可搜索的文档存储)相结合,从而获得两者的优势。
2. 为什么需要 RAG?动机何在?
三个主要问题催生了 RAG 的发明:
LLM 的局限性
大语言模型是静态的快照。一旦模型训练完成,它只知道其训练数据中的内容。它不知道:
即使对于它确实知道的内容,它也可能自信地产生幻觉(编造信息)。
重新训练与动态检索的成本对比
你可以在每次数据变化时重新训练或微调模型。但是:
- It takes days or weeks (这需要数天或数周时间)
动态检索(在查询时查找信息)的成本极低,并且始终保持最新。
对可靠、最新知识的需求
对于受监管的行业(金融、医疗、法律),你不能提供来自“模型记忆”的答案。你需要有可以引用和审计的来源支持的答案。
RAG 通过将知识与模型解耦,解决了所有这三个挑战。
3. RAG 全流程解析 —— 结合真实示例逐步讲解
这是大多数教程匆匆带过的部分。我们将放慢节奏,详细讲解。
让我们用一个具体例子。假设你正在为一家名为 Acme Corp 的公司构建一个内部开发者助手。员工可以向它询问关于工程手册、API 文档和值班手册的问题。
A developer asks:
一位开发者提问:
"How do I rotate the database credentials for the billing service?"
“如何为计费服务轮换数据库凭据?”
以下是幕后发生的具体过程。
阶段 1:索引(一次性完成,提前进行)
在任何人提问之前,我们需要准备好知识库。
步骤 1a —— 知识语料库
首先,我们收集我们希望助手了解的所有文档:
假设这为我们提供了 8,000 份文档。
步骤 1b —— 文档分块将文档分割成较小片段的过程,便于后续处理和检索。
大语言模型无法高效地搜索一个 50 页的 PDF。你也不想将整个 50 页的 PDF 返回给用户——你想要的是真正回答他们问题的那一段。
因此,我们将每个文档分块成更小的片段。一种常见的方法是:
我们知识库中的一个块可能如下所示:
[Chunk #4729 — Source: runbooks/billing-service.md]
"To rotate database credentials for the billing service:
1. Generate a new password in AWS Secrets Manager.
2. Update the 'billing-db' secret with the new value.
3. Trigger a rolling restart via: kubectl rollout restart deploy/billing.
4. Verify health endpoints return 200 OK.
5. Revoke the old credentials after 24h grace period."
分块后,我们的 8,000 份文档可能变成了 120,000 个块。
步骤 1c —— 向量嵌入将文本转换为高维向量的过程,用于表示语义信息,便于基于相似性进行检索。
对于每个块,我们调用一个嵌入模型(如 BERT、OpenAI 的 text-embedding-3-small 或 Cohere 的嵌入器)。这将每个块转换为一个向量——一个约 1,536 个数字的列表,代表了该块的含义。
Chunk #4729 → [0.12, -0.08, 0.44, ..., 0.91] (1,536 numbers)
步骤 1d —— 向量数据库A database system designed to store and perform high-dimensional semantic similarity searches on vector embeddings of data.
我们将这 120,000 个向量全部存储在一个向量数据库中——例如 FAISS、Pinecone、Weaviate、Milvus 或 Qdrant。数据库对它们建立索引,以便我们能够在毫秒级时间内对所有向量进行搜索。
索引完成。 这通常作为后台作业运行,并且只有在文档更改时才需要重新运行。
阶段 2:检索(在查询时进行)
Now a developer types:
现在,一位开发者输入:
"How do I rotate the database credentials for the billing service?"
“如何为计费服务轮换数据库凭据?”
步骤 2a —— 用户查询
问题以纯文本形式传入。
步骤 2b —— 查询嵌入
我们对问题运行相同的嵌入模型,生成一个查询向量:
Query → [0.15, -0.11, 0.48, ..., 0.87]
这一点至关重要:你必须使用与嵌入块时相同的模型来嵌入查询,否则向量将位于不同的空间中,相似性变得毫无意义。
步骤 2c —— 相似性搜索
现在我们询问向量数据库:“哪些块的向量最接近这个查询向量?”
接近程度通过相似性度量来衡量,最常用的是余弦相似度一种衡量两个向量方向相似程度的度量方法,值域为[-1, 1],常用于文本嵌入向量的语义相似度计算。——它测量两个向量之间的夹角。夹角越小,含义越相似。
在底层,数据库使用近似最近邻技术,可以在约 5 毫秒内搜索 120,000 个向量,而不是逐一比较。
步骤 2d —— 相关段落
数据库返回前 k 个最相似的块(通常 k=3 到 k=10)。对于我们的查询,我们可能会得到:
1. Chunk #4729 (score 0.94) — billing-service runbook, credential rotation
2. Chunk #3180 (score 0.89) — AWS Secrets Manager general guide
3. Chunk #5512 (score 0.85) — rolling restart playbook
这些是最可能包含答案的段落。
阶段 3:增强
现在我们有了相关的块,但我们不只是将它们展示给用户。我们希望大语言模型利用它们写出一个优美、综合的答案。
步骤 3a —— 原始提示
The user's raw question:
用户的原始问题:
"How do I rotate the database credentials for the billing service?"
步骤 3b —— 增强提示
我们将其包装在一个提示模板中,该模板将检索到的块作为上下文注入:
You are Acme Corp's internal engineering assistant.
Answer the user's question using ONLY the context below.
If the answer isn't in the context, say you don't know.
---CONTEXT---
[Chunk #4729]: To rotate database credentials for the billing
service: 1. Generate a new password in AWS Secrets Manager...
[Chunk #3180]: AWS Secrets Manager allows you to store and
rotate database credentials...
[Chunk #5512]: Rolling restarts can be triggered via kubectl
rollout restart deploy/<service-name>...
---END CONTEXT---
USER QUESTION: How do I rotate the database credentials
for the billing service?
这就是 RAG 中的“A”——增强。我们用检索到的知识来增强提示。
阶段 4:生成
步骤 4a —— 调用大语言模型
我们将增强后的提示发送给一个大语言模型(GPT-3/4/5、Claude、LLaMA、T5、Mistral——任选其一)。
因为模型就在其上下文窗口中拥有实际的文档,它不需要记住任何东西——它只需阅读并综合。
步骤 4b —— 最终响应
模型产生一个基于事实的答案:
"To rotate the database credentials for the billing service:
- Generate a new password in AWS Secrets Manager.
- Update the
billing-dbsecret with the new value. - Trigger a rolling restart with
kubectl rollout restart deploy/billing. - Verify that the health endpoints return 200 OK.
- Revoke the old credentials after a 24-hour grace period.
Source: runbooks/billing-service.md"
“要为计费服务轮换数据库凭据:
- 在 AWS Secrets Manager 中生成一个新密码。
- 用新值更新
billing-db密钥。 - 使用
kubectl rollout restart deploy/billing触发滚动重启。 - 验证健康端点返回 200 OK。
- 在 24 小时宽限期后撤销旧凭据。
来源:runbooks/billing-service.md”
Notice three things:
注意三点:
这就是完整的 RAG 流程。 索引 → 检索 → 增强 → 生成。
4. 检索组件详解
三个部分共同使检索工作:
嵌入模型
将文本转换为向量的模型。例如:BERT、text-embedding-3-small、Cohere Embed、Sentence-BERT。选择一个针对你的语言和领域训练良好的模型。
向量数据库
为向量相似性搜索优化的数据库。热门选项:FAISS(本地,Facebook)、Pinecone(托管)、Weaviate、Milvus、Qdrant 以及 pgvector(Postgres 扩展)。
相似性度量
我们如何衡量向量之间的“接近度”。首选是余弦相似度,但欧几里得距离和点积也常被使用。余弦相似度之所以流行,是因为它忽略向量长度,专注于方向——而语义含义就存在于方向中。
5. 增强与生成详解
提示模板
告诉大语言模型如何使用检索到的上下文的模板结构。好的模板应指定:
- Citation rules (引用规则)
管理模型上下文
大语言模型的上下文窗口是有限的。如果检索返回 30 个块,每个块 500 个 token,那么仅上下文就占用了 15,000 个 token。你必须
常见问题(FAQ)
RAG技术如何解决大语言模型知识过时的问题?
RAG通过实时检索外部知识库(如公司文档、最新数据),在生成答案前动态获取最新信息,无需重新训练模型,确保回答基于最新知识源。
相比重新训练模型,RAG为什么成本更低?
重新训练大模型需数万至数百万美元和数周时间,且每次数据更新都要重复。RAG仅需一次性建立索引,后续通过检索动态获取信息,成本极低且实时更新。
RAG如何保证生成答案的准确性和可追溯性?
RAG将生成过程与检索结合,答案直接来源于可验证的外部文档(如产品手册、法律文件),提供可引用和审计的来源,避免模型幻觉,特别适合金融、医疗等受监管领域。
版权与免责声明:本文仅用于信息分享与交流,不构成任何形式的法律、投资、医疗或其他专业建议,也不构成对任何结果的承诺或保证。
文中提及的商标、品牌、Logo、产品名称及相关图片/素材,其权利归各自合法权利人所有。本站内容可能基于公开资料整理,亦可能使用 AI 辅助生成或润色;我们尽力确保准确与合规,但不保证完整性、时效性与适用性,请读者自行甄别并以官方信息为准。
若本文内容或素材涉嫌侵权、隐私不当或存在错误,请相关权利人/当事人联系本站,我们将及时核实并采取删除、修正或下架等处理措施。也请勿在评论或联系信息中提交身份证号、手机号、住址等个人敏感信息。



