大模型能力虽强,但为何仍需引入 RAG(检索增强生成)?本文为您深度解析 RAG 的核心原理、技术链路与应用实践。建议收藏,并分享给正在探索 AI 应用落地的开发者。
01 大模型已经很强,为什么还需要 RAG?
尽管大语言模型(LLM)表现优异,但仍存在三大核心痛点:
① 幻觉问题
LLM 基于“token by token”的概率预测生成文本,不可避免地存在“幻觉”,易生成看似合理实则错误的信息。
② 时效性问题
模型训练成本高昂且周期漫长,无法及时纳入最新数据,难以直接回答实时性极强的问题。
③ 数据安全问题
通用 LLM 缺乏企业私域数据。企业若需安全使用 LLM,最佳实践是将数据留存本地,由本地业务计算,在线大模型仅作归纳总结。
专业解读:
LLM 的知识属于“参数化知识”,更新难、溯源难。RAG 的本质是为模型外挂“非参数化知识库”,将知识存放于外部数据库,实现按需检索与调用。
02 什么是 RAG?
RAG = Retrieval Augmented Generation,即检索增强生成。
简而言之,LLM 在生成回答前,先从海量文档中检索相关信息,再基于这些信息生成响应,从而大幅提升预测质量。
典型工作流程如下:
-
1. 用户输入 Prompt(提示词); -
2. 系统从外部数据库中检索相关数据; -
3. 将检索结果与原始问题组合成增强型 Prompt; -
4. 将增强 Prompt 送入 LLM; -
5. LLM 生成最终响应并返回给用户。
形象比喻:传统 LLM 是“闭卷考试”,全靠记忆答题;引入 RAG 后变成了“开卷考试”,先查阅资料再作答。
RAG 的核心由两大模块组成:R(检索器模块) 与 G(生成器模块)。
03 R:检索器模块,决定 RAG 的上限
检索器的核心任务是从海量知识库中精准召回最相关的前 K 个文档。构建高质量检索器需攻克以下三个难题:
3.1 如何获得准确的语义表示?
方法一:块优化(Chunking)
处理文档的首要步骤是分块。分块策略需综合考量:索引内容特性、嵌入模型的最优块大小、用户查询的长度与复杂度,以及检索结果的具体应用场景。不存在“绝对最佳”,只有“最适配”的策略。
方法二:微调嵌入模型
确定 Chunk 大小后,利用嵌入模型(如 UAE、Voyage、BGE 等)将 Chunk 和查询映射至同一语义空间。
专业解读:
Chunking 是 RAG 的第一性原理。切分过碎易丢失上下文,切分过大则引入噪声。实际落地中,常需结合标题、段落、表格进行语义递归分割。
3.2 如何协调查询和文档的语义空间?
用户查询往往表达模糊或缺乏语义细节,需通过以下技术弥合查询与文档间的语义鸿沟:
关键技术一:查询重写
-
• 利用 LLM 生成指导性伪文档,再与原始查询结合; -
• 通过文本标识符构建查询向量,生成“假想”文档; -
• 多查询检索:引导 LLM 同时生成多个搜索查询,适用于复杂问题。
关键技术二:嵌入变换
-
• LlamaIndex:在查询编码器后增加特殊适配器,微调后优化查询嵌入; -
• SANTA:针对结构化信息,采用结构化与非结构化数据对比学习及实体掩码策略。
专业解读:
例如用户问“怎么报销”,而文档写的是“费用审批流程”,两者字面不匹配但语义相关。Query Rewriting 和 HyDE 等技术正是为解决此类“语义鸿沟”而生。
3.3 如何对齐检索模型输出和大语言模型偏好?
检索命中率高并不等同于最终效果好,召回的文档可能并不符合 LLM 的生成需求。
-
• REPLUG:通过 KL 散度监督训练,让 LLM 计算文档概率分布,将 LLM 作为监督信号; -
• 外部附加适配器:避免直接微调嵌入模型,降低算力与 API 限制; -
• PKG:通过指令微调将知识注入白盒模型,直接替换检索模块,按需输出相关文档。
专业解读:
检索器认为“相关”的内容,LLM 不一定“会用”。对齐两者偏好,是 RAG 从“可用”迈向“好用”的关键分水岭。
04 G:生成器模块,把资料变成答案
生成组件是 RAG 的另一核心,负责将检索到的信息转化为自然流畅、逻辑严密的文本。其输入不仅包含传统上下文,还融合了检索器召回的相关文本片段,从而确保生成内容与检索信息高度一致。
4.1 后检索处理:提升检索结果质量
在召回信息后,需进一步过滤和优化,核心策略包括:信息压缩(剔除冗余)与结果重排序(Rerank,按相关度重新排列),以更好地满足用户需求。
4.2 如何优化生成器应对输入数据?
RAG 的输入包含多种结构化或非结构化文档。在输入微调模型前,需对检索文档进行后续处理。生成器的微调方法与普通 LLM 微调大体一致,涵盖通用优化与对比学习等。
专业解读:
检索是“找食材”,生成是“炒菜”。Rerank、压缩、Prompt 组装及冲突处理决定了最终答案的质量。工业界标准流水线通常为:“召回 → 粗排 → 精排 → 压缩 → 生成”。
05 使用 RAG 的核心优势
RAG 允许开发者无需重训整个大模型,只需外挂知识库即可补充额外信息,大幅提升回答准确性,尤其在知识密集型任务中表现卓越。其核心优势包括:
-
• 可扩展性:减少模型训练成本,轻松实现知识扩展; -
• 准确性:支持引用信息来源,便于用户核实; -
• 可控性与定制性:支持知识库的动态更新与特定领域语料的精准索引; -
• 可解释性:检索项可作为预测来源的参考依据; -
• 多功能性:灵活适配 QA、文本摘要、对话系统等多种任务; -
• 及时性:精准识别最新信息,确保回答的时效性; -
• 安全性:通过数据库角色与安全控制,精细化管理数据权限。
专业解读:
RAG 的最大商业价值在于:低成本知识更新 + 结果可溯源 + 细粒度权限控制。相比重训模型,RAG 更像是“外置数据库”而非“重造大脑”。
06 RAG vs SFT:并非二选一
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
结论:RAG 与 SFT 并非替代关系。合理的落地策略是结合业务需求,取两者之长,打出“组合拳”。
07 RAG 典型实现链路:索引、检索、生成
RAG 的工程化实现主要包含三大步骤:数据索引、检索、生成。
7.1 如何构建高质量数据索引?
数据索引通常为离线过程,核心是将私域数据向量化并构建索引。流程如下:
Step 1:数据提取与清洗
从多格式原始数据(PDF、Word、Markdown等)中提取文本元素。难点在于完整恢复 PDF 中的图片、表格与段落(可借助 PP-StructureV2 等工具)。提取后需进行去重、过滤、压缩与格式化。
Step 2:文本分割(Chunking)
受限于 Embedding 模型的 Tokens 限制及语义完整性要求,需进行合理分块。常见方式包括句分割、固定大小分块及基于意图的递归分割。常用工具如 langchain.text_splitter。
Step 3:向量化及创建索引
利用 Embedding 模型(如 ChatGPT-Embedding、BGE 等)将文本转为向量矩阵,并存入向量数据库(如 FAISS、Milvus、Chromadb 等)。
专业解读:
索引质量决定检索上限,检索上限决定 RAG 上限。数据清洗和 Chunking 若做不到位,后续再强的 LLM 也无法挽救。
7.2 如何对数据进行高效检索?
检索是获取有效信息的关键环节,核心思路包括:
-
• 元数据过滤:先按元数据缩小范围,提升效率与相关度; -
• 图关系检索:引入知识图谱,将实体与关系转化为节点,适用于多跳推理问题; -
• 多元检索技术:涵盖向量相似度检索、关键词检索、全文检索及 SQL 检索; -
• 重排序(Rerank):对召回结果按业务逻辑重新调整排序; -
• 查询轮换:包括子查询(树/向量/顺序查询)及 HyDE 模板生成。
专业解读:
工业界普遍采用“混合检索”策略:向量召回 + 关键词召回 + 元数据过滤 + Rerank。单纯依赖向量检索,在处理专有名词、编号或代码时往往表现不稳。
7.3 如何生成正确回复?
文本生成的本质是 Prompt Engineering,即将原始 Query 与检索文本组合输入模型。常用框架包括 LangChain、LlamaIndex。
示意代码如下:
from langchain.chat_models import ChatOpenAI
from langchain.schema.runnable import RunnablePassthrough
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
rag_chain = {"context": retriever, "question": RunnablePassthrough()} | rag_prompt | llm
rag_chain.invoke("What is Task Decomposition?")
专业解读:
生成阶段需妥善处理上下文窗口限制、噪声干扰、信息冲突及指令遵循问题。绝非“检索到内容就万事大吉”。
08 RAG 典型应用案例
8.1 ChatPDF 及其复刻版
核心流程:读取 PDF 并清洗标准化 -> 利用 Embedding API 将分段文本转为向量 -> 用户提问时,将问题向量化并计算相似度 -> 召回最相似分段 -> 组合 Prompt 调用 Completion API -> 返回最终答案。
8.2 百川(Baichuan)搜索增强系统
该系统融合了三大模块:指令意图理解(深度解析用户指令)、智能搜索(精准驱动查询词)以及结果增强(结合 LLM 优化生成可靠性),通过协同作用大幅减少幻觉。
8.3 多模态检索增强模型(RA-CM3)
RA-CM3 利用预训练的 CLIP 模型作为检索器,CM3 Transformer 作为生成器。检索器从外部库搜索当前提示的精确信息,连同文本输入生成器进行图像合成,提升多模态生成的准确性。
专业解读:
RAG 正加速从纯文本向多模态演进。未来的 RAG 不仅是“查文档”,更是“查图、查视频、查知识图谱”。
09 RAG 当前面临的挑战
-
• 检索效果高度依赖 Embedding 与检索算法,若召回无关信息,反而会“污染”模型输出; -
• 大模型如何融合与利用检索信息仍是“黑盒”,存在生成内容与检索事实相冲突的风险; -
• 对所有任务无差别检索 K 个文本片段,不仅效率低下,还会挤占模型的上下文窗口; -
• 若缺乏完善的引用溯源机制,将无法精准查证事实,检索的真实性完全受制于数据源质量。
专业解读:
RAG 不是银弹。企业级落地必须配套完善的工程化手段:评估体系、Rerank、上下文压缩、引用溯源、权限控制及缓存机制,否则极易陷入“检索一堆,生成更乱”的困境。
10 总结:RAG 让大模型从闭卷变开卷
面对 LLM 的幻觉、时效与安全三大痛点,RAG 通过“外部知识库 + 检索 + 生成”的范式给出了最优解。其核心链路为:数据索引 → 检索 → 生成。其中,R(检索器)决定了“能不能找到”,G(生成器)决定了“能不能答好”。
RAG 与 SFT 互为补充:RAG 专精于动态知识、外部知识及可溯源场景;SFT 则擅长于风格、行为及领域能力的深度定制。展望未来,RAG 将持续向多模态、知识图谱、Agentic RAG 及自动化评估方向演进。
对于正在推进大模型应用的开发者而言,请牢记一个核心准则:
RAG 的上限,不在模型,而在数据与检索。

