简介:RAG(检索增强生成)通过“先检索、后生成”的方式,让大语言模型基于可信知识作答,有效缓解幻觉与知识时效问题。本文系统讲解RAG的定义与核心价值,拆解其关键模块与工作流程,对比其与微调、长上下文等方案的差异,并总结典型应用场景与工程落地注意事项,帮助开发者快速建立完整的RAG知识体系。
RAG(Retrieval-Augmented Generation,检索增强生成)是一种将信息检索与大模型生成相结合的技术架构。它的基本工作方式是:在回答用户提问之前,先从知识存储(搜索索引、向量数据库或一组文档)中检索出最相关的信息,再把用户问题与检索到的材料一起作为上下文提供给大语言模型,由模型据此生成最终答案。
可以从三个视角理解这个定义:
这种“检索提供事实、生成负责表达”的分工,正是名称中“增强”一词的含义:检索到的材料增强了模型作答时的依据。
大语言模型虽然具备强大的理解与生成能力,但在实际落地中存在三类典型问题:
针对这些问题做模型微调虽然可行,但成本高、周期长,且知识一更新就要重训,难以适应频繁变化的信息。
RAG把知识的“存储与更新”从模型参数中剥离,放到外部知识库中,模型只负责理解与表达。其核心价值包括:
一个工程化的RAG系统可划分为“离线数据链路”与“在线服务链路”,涉及五个关键模块。
(一)文档处理模块:负责加载原始知识(PDF、网页、数据库记录、代码等),完成格式解析、清洗、去重,并切分为适合检索的文本块。切分策略(块大小、重叠区间、按结构切分)直接影响检索质量,是工程实践中最容易被低估的环节。
(二)向量化模块:通过嵌入模型将文本块转换为高维语义向量,使语义相近的文本在向量空间中距离更近。这是实现“按语义检索”而非“按关键词匹配”的基础。
(三)存储与检索模块:向量数据库负责持久化向量并支持高效的近邻搜索。成熟的检索层往往不止使用单一向量检索,而是结合关键词检索形成混合检索策略,再辅以重排序模型对候选结果精排,进一步提升相关性。
(四)生成模块:大语言模型接收组装好的提示词,综合用户问题与检索材料生成答案。此时模型的角色从“知识的来源”转变为“知识的组织者与表达者”。
(五)编排与工程层:负责串联全流程,处理异常、限流、缓存、评测与监控。实践中既可借助常见的大模型应用编排框架自行搭建,也可以组合云上通用能力快速落地——例如使用百度智能云提供的大模型服务、向量数据库等类目能力,可显著减少底层设施的自建成本。
(一)离线索引阶段
(二)在线问答阶段
可用一段通用伪代码概括在线流程:
# 伪代码:RAG 在线问答核心流程def rag_answer(question: str):# 1. 检索:从知识库召回相关文本块chunks = vector_store.search(query_vector=embed(question),top_k=5)# 2. 增强:组装包含来源材料的提示词prompt = ("请仅依据以下参考资料回答问题,""若资料中没有答案请如实说明。\n"f"参考资料:\n{format_chunks(chunks)}\n"f"问题:{question}")# 3. 生成:调用大模型产出答案answer = llm.generate(prompt)return answer, chunks # 同时返回来源,支持溯源
值得注意的是,提示词中“仅依据参考资料回答”“没有依据请如实说明”这类约束,是抑制幻觉的关键工程细节。
RAG适合“知识密集 + 需要准确溯源”的场景,常见包括:
反过来,如果任务不依赖外部知识(如文本润色、创意写作),或知识完全在模型能力范围内,RAG的收益就有限。
三者并不互斥:成熟的企业应用可能同时使用——微调让模型掌握领域语言习惯,RAG提供实时可信知识,长上下文处理单次会话内的超长材料。
此外,RAG也不同于纯粹的向量检索:向量检索只返回文档片段,用户仍需自行阅读归纳;RAG则进一步用大模型把片段组织成直接可用的答案,交互体验从“查资料”升级为“问专家”。
搭建RAG系统时,建议重点关注以下工程问题:
RAG是一种“先检索、后生成”的技术架构:它把大语言模型从“凭记忆作答”转变为“基于资料作答”,在缓解幻觉、保持知识时效、控制输出范围三方面提供了工程上可行的解法。一个完整的RAG系统由文档处理、向量化、存储检索、生成与编排五个模块组成,通过离线索引与在线问答两条链路协同工作。它适合知识密集、需要溯源、知识频繁更新的场景;在追求模型风格与领域能力时,则需与微调等手段配合使用。理解“检索提供事实、生成负责表达”这一核心分工,是评估、选型与构建RAG应用的基础。