一文读懂RAG:检索增强生成,让大模型“博学且精准”
引言
在大模型飞速发展的今天,我们既惊叹于它的通用能力,也常常被其“知识盲区”“信息过时”“胡言乱语(幻觉)”等问题困扰。比如,让通用大模型回答你公司内部的报销规则、产品手册细节,它大概率会束手无策;让它讲解某一领域的最新技术(超出其训练数据范围),得到的答案可能早已过时。
而RAG(Retrieval-Augmented Generation,检索增强生成),正是为解决这些痛点而生的关键技术。它不是一个独立的模型,也不是一个简单的工具,而是一种“大模型+外部知识库”的融合架构,核心是让大模型在生成答案前,先从私有/外部知识库中检索相关信息,再结合自身知识完成回答——相当于给大模型“开卷考试”,既保留其语言生成能力,又弥补其知识局限性。
一、RAG 核心定义:不止是“检索+生成”,更是“精准赋能”
RAG,即检索增强生成,是一种结合了「信息检索」与「生成式AI」的技术方案。其核心逻辑可以概括为:大模型生成答案前,先通过检索模块从外部知识库中获取与问题相关的精准信息,将这些信息作为上下文补充给大模型,最终让大模型基于“自身训练知识+外部检索知识”生成更准确、更具针对性的答案。
很多人会混淆RAG与普通工具、大模型的关系,这里明确区分:
-
大模型:负责“语言理解+答案生成”,相当于“大脑”,但自带“知识保质期”和“知识边界”;
-
检索模块:负责“从外部知识库找相关信息”,相当于“私人参考书”,提供大模型没有的私有/最新知识;
-
RAG:将两者结合,形成“检索→补充→生成”的闭环,本质是「增强大模型的上下文」,间接优化生成的Prompt,让答案更精准。
简单来说,没有RAG的大模型,是“凭记忆答题”;有RAG的大模型,是“先查资料再答题”——既避免了“记不住”“记不准”的问题,也解决了“知识过时”“私有知识无法覆盖”的痛点。
二、为什么需要RAG?大模型的“天生短板”与RAG的价值
通用大模型(如GPT-3.5/4、Llama系列)虽强,但存在三个无法回避的短板,而这正是RAG的核心应用场景:
1. 知识有边界,无法覆盖私有/小众知识
大模型的训练数据是公开的、通用的,无法包含企业内部文档(如员工手册、产品说明)、行业小众知识、个人私有数据(如笔记、日志)。比如,你让GPT回答“你公司的客户服务流程”,它只能告诉你通用的客服逻辑,无法给出你公司的具体规范——而RAG可以检索你公司的内部知识库,给出精准答案。
2. 知识有保质期,无法同步最新信息
大模型的训练数据有截止日期(比如GPT-4截止到2023年10月),无法获取训练之后的最新信息(如2024年的行业政策、新技术、新事件)。比如,让大模型回答“2024年最新的Python框架更新”,它无法给出准确答案——而RAG可以检索最新的技术文档、官方公告,实时补充最新知识。
3. 易产生“幻觉”,答案缺乏可信度
当大模型遇到自己不熟悉的问题时,不会直接说“不知道”,而是会“编造”看似合理但错误的答案(即“幻觉”)。比如,让大模型讲解一个小众的技术名词,它可能会混淆概念、编造定义——而RAG检索到的外部资料的作为“参考依据”,可以有效约束大模型的生成逻辑,减少幻觉,让答案可追溯、可验证。
总结来说,RAG的核心价值:不改变大模型本身,通过“外部知识补充”,让大模型在不重新训练的前提下,实现“知识扩容、信息更新、精准度提升”,大幅降低大模型落地的成本和风险。
三、RAG 核心工作流程:两大阶段,从“数据准备”到“答案生成”
RAG的工作流程分为两大核心阶段:离线数据准备阶段(一次性/定时更新)和在线回答生成阶段(用户每问一次执行一次)。两个阶段分工明确,共同完成“检索增强”的闭环。
第一阶段:离线数据准备阶段(核心:把“原始文档”变成“可检索的知识”)

这个阶段的目的是将杂乱的原始文档(PDF、Word、Markdown等),处理成向量库能存储、检索模块能快速匹配的结构化数据,相当于“提前整理好参考书”,供后续检索使用。步骤如下:
1. 原始文档接入
接入需要用到的所有外部知识源,包括但不限于:企业内部文档(员工手册、产品手册、会议纪要)、公开文档(技术博客、官方文档)、私有数据(个人笔记、日志)等。核心是“把需要用到的知识,全部收集起来”。
2. 文本清洗与预处理
原始文档中往往包含乱码、水印、无效空格、重复内容等干扰信息,需要先进行清洗:去除无关内容、统一文本格式、修正错别字,最终得到“干净、纯净”的文本内容——避免干扰后续的检索和生成。
3. 文本分块(Chunking)
大模型有上下文长度限制(Context Window),无法一次性处理整本书、整篇长文档;同时,过长的文本会导致检索精度下降(找不到核心片段)。因此,需要将清洗后的文本,按照“语义完整性”或“固定长度”切割成短小的文本片段(称为Chunk)。
比如,一篇10000字的产品手册,可能会切割成50-100字/段的片段,确保每个片段都包含一个完整的知识点(如“某功能的使用步骤”“某规则的具体要求”)。
4. 向量化(Embedding)
计算机无法直接理解文本的语义,只能处理数字。因此,需要调用Embedding(嵌入)模型,将每个文本片段(Chunk)转换成一串浮点数向量(称为“嵌入向量”)。
嵌入向量的核心特点:语义越相似的文本,其向量距离越近。比如,“如何报销差旅费”和“差旅费报销流程”的向量距离很近,便于后续检索时快速匹配。
常用的Embedding模型有:OpenAI的text-embedding-ada-002、Sentence-BERT、讯飞的Embedding模型等。
5. 向量入库存储
将“文本片段+对应嵌入向量”一起存入专门的向量数据库(Vector Database),向量数据库会优化向量的存储和检索效率,支持快速的相似度比对。
常用的向量数据库:FAISS(Facebook开源,轻量易用)、Chroma(轻量、适合开发测试)、Milvus(高性能、适合大规模数据)、Elasticsearch(支持向量检索+全文检索)等。
一句话总结数据准备阶段:文档 → 清洗 → 分块 → 向量化 → 存向量库,全程离线执行,后续只需定时更新(如新增文档、更新文档时)即可。
第二阶段:在线回答生成阶段(核心:“检索+增强+生成”闭环)

这个阶段是用户提问后,RAG实时工作的过程,核心是“找到相关知识→补充给大模型→生成精准答案”,步骤如下:
1. 接收用户提问
用户输入具体问题,比如“我们公司差旅费报销需要提供哪些材料?”“2024年Python最新的Web框架有哪些?”。
2. 问题向量化
用和“数据准备阶段”相同的Embedding模型,将用户的问题转换成嵌入向量——确保问题和文本片段的向量“同维度、可比对”。
3. 向量相似度检索
将用户问题的向量,传入向量数据库,进行相似度比对,召回“语义最相似的Top-K个文本片段”(K值可调整,一般取3-5个,既保证精度,又避免冗余)。
比如,用户问“差旅费报销材料”,检索模块会从向量库中,找到与“报销材料”“差旅费”相关的3-5个文本片段(如“差旅费报销需提供发票、行程单、报销单”)。
4. 上下文拼接与增强
将检索到的Top-K文本片段,拼接成“参考上下文”(Context),并过滤掉冗余、不相关的内容——这一步是RAG的核心,相当于给大模型“递小抄”,补充它没有的知识。
5. 构造增强型Prompt
将“系统提示词 + 参考上下文 + 用户问题”拼接成完整的Prompt,发给大模型。其中,系统提示词需要明确要求大模型:“结合参考上下文回答,不要编造信息,若参考上下文没有相关内容,直接说明不知道”。
示例Prompt:
你是一个专业的企业客服助手,必须结合以下参考上下文回答用户问题,不要编造信息,若参考上下文没有相关内容,直接说明“暂无相关信息”。 参考上下文:1. 差旅费报销需提供正式发票、行程单、公司统一报销单,报销单需部门负责人签字;2. 差旅费报销时效为出差结束后15个工作日内;3. 高铁票、飞机票可直接作为报销凭证。 用户问题:我们公司差旅费报销需要提供哪些材料?
6. 大模型生成答案
大模型接收增强型Prompt后,结合“参考上下文”(外部知识)和自身训练知识,生成精准、可验证的答案。比如,针对上面的问题,大模型会直接基于参考上下文,列出需要的报销材料,不会编造额外内容。
一句话总结回答生成阶段:用户提问 → 问题向量化 → 向量检索 → 拼接上下文 → 构造增强Prompt → 大模型生成答案,全程在线实时执行,每一次提问都对应一次完整的检索和增强。
四、RAG 技术架构拆解
在实际落地中,RAG常与Agent(智能体)结合——将RAG封装成一个 tool “检索工具”,Agent负责判断“是否需要检索”:如果是常识问题,直接让大模型回答;如果是需要私有/最新知识的问题,调用RAG工具检索,再生成答案,进一步提升智能化程度。
用户提问
│
▼
┌─────────────────────────────┐
│ Prompt(规则+约束) │
└───────────────┬─────────────┘
│
┌───────────────▼─────────────┐
│ Agent(LLM 决策大脑) │ ← create_openai_tools_agent
└───────────────┬─────────────┘
│ (决定调用哪些工具)
┌───────┴───────┐
│ │
┌───────▼───────┐ ┌─────▼─────────┐
│ 普通 Tool │ │ RAG Tool │
│(计算器/API…)│ │(检索知识库) │
└───────┬───────┘ └─────┬─────────┘
│ │
└───────┬───────┘
│
┌───────────────▼─────────────┐
│ AgentExecutor(执行器) │ ← 这里传入所有 tools
└───────────────┬─────────────┘
│
▼
回答(整合结果)
RAG 和 Tool 的关系
RAG 本身不是工具,但 RAG 可以包装成一个工具给 Agent 调用
# RAG 系统(知识库)
def rag_query(question):
# 从你的文档里检索资料
return "找到的资料:xxx"
# 把 RAG 变成一个工具
tools = [
rag_query, # 知识库工具
calculator, # 计算工具
get_time # 时间工具
]
# 提示词 Prompt(核心)
prompt = ChatPromptTemplate.from_messages([
("system", "你是公司客服,只使用提供的工具回答,不要编造。"),
("user", "{input}"),
MessagesPlaceholder(variable_name="agent_scratchpad"),
])
# 大模型 + Agent
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
agent = create_openai_tools_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 调用
agent_executor.invoke({"input": "上班时间是几点?"})
这里需要注意的是,在LangChain 新版 Tool-Calling Agent 底层设计哲学中,以上代码的agent在定义时 tool 可以传空数组(不给 agent 传 tool):
# 纯大脑:只装「认知+规则」,不需要手脚
agent = create_openai_tools_agent(llm, tools=[], prompt)
# tool手脚:执行
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
那么问题来了,大脑在调用promp规则的时候,此时并不知道具体有哪些工具,那大脑是什么时候知道工具的?
答案:tool 是在运行时,由 AgentExecutor 喂给Agent大脑的!!
这就引发我们即将讨论的下一个问题:agent 和 AgentExecutor
Agent 和 AgentExecutor 的关系
流程是这样的(真实底层流程):
-
你创建 Agent(大脑)它只拿到了 Prompt + LLM完全不知道有什么工具
-
你创建 AgentExecutor(身体)它把 tools = [rag, calculator] 握在手里
-
真正调用时(invoke)
- Executor 把工具列表自动塞进 Prompt
- 再发给 LLM(大脑)
- 大脑这时才知道:哦!我有这些工具!
总结:
Agent(大脑)本身不存储工具清单,AgentExecutor(身体)才持有工具清单;
在每次问答开始前,身体会将工具清单注入 Prompt 上下文,让大脑知道自己拥有哪些能力,再进行思考与决策
五、RAG 典型应用场景
RAG的应用场景非常广泛,核心是“需要结合私有/最新知识回答问题”的场景,常见的有:
-
企业知识库问答:员工查询内部制度、产品手册、技术文档(如“报销规则”“产品功能用法”);
-
智能客服:基于企业的服务规范、常见问题库,回答用户的咨询(如“如何开通会员”“售后流程”);
-
学术研究:检索最新的论文、文献,辅助研究人员总结观点、生成报告;
-
个人知识管理:检索个人笔记、日志、收藏的文章,快速获取所需信息;
-
行业咨询:结合行业最新政策、数据,生成精准的咨询报告(如金融、医疗、教育领域)。
六、RAG 核心优势与注意事项
核心优势
-
成本低:无需重新训练大模型,只需更新知识库,就能实现知识迭代;
-
精度高:基于外部检索的知识生成答案,减少幻觉,提升可信度;
-
灵活性强:可快速接入新的文档、更新知识,适配不同场景;
-
可追溯:生成的答案可对应到具体的文档片段,便于验证和排查问题。
注意事项
-
文本分块质量:分块过细会导致语义不完整,过粗会影响检索精度,需结合场景调整;
-
Embedding模型选择:不同模型的语义理解能力不同,需根据文档类型(如技术文档、通用文本)选择合适的模型;
-
向量库选择:小规模数据可选用FAISS、Chroma,大规模数据建议选用Milvus、Elasticsearch;
-
冗余过滤:检索到的片段可能存在冗余,需进行过滤,避免占用过多上下文空间。
七、总结:RAG 不是“替代大模型”,而是“赋能大模型”
最后,我们再回到核心:RAG不是一个独立的技术,而是一种“大模型+知识库”的融合思路。它的核心价值,是让大模型从“凭记忆答题”变成“查资料答题”,解决了大模型知识边界、信息过时、幻觉等核心痛点。
对于企业和开发者而言,RAG是大模型落地的“必备工具”——无需投入大量成本训练专属大模型,只需搭建RAG架构,接入自身的私有文档、最新知识,就能让通用大模型适配自身业务场景,实现“精准回答、可追溯、可迭代”。
随着大模型技术的不断发展,RAG也在不断优化(如结合多模态检索、增强分块策略、与Agent深度融合),但核心逻辑始终不变:用检索补充知识,用生成优化体验。
如果你正在考虑将大模型落地到企业业务、个人知识管理等场景,RAG,无疑是性价比最高、最易落地的选择。
更多推荐


所有评论(0)