RAG是什么?
让LLM具备长期记忆
一、RAG为何而生?
主流的大语言模型基于海量公开数据进行训练,其知识存在一个明确的“截止日期”(例如,训练数据可能截至2023年初)。LLM能够在其上下文范围内,根据给定的信息进行推理和回复。然而,
通用大模型存在固有的知识局限
- 时效性缺失:对于模型训练截止之后的新事件、新闻或研究成果,LLM无法知晓。
- 领域/私有知识盲区:对于非公开、私有或高度专业化知识(如企业内部文档、个人笔记),LLM也无能为力。
面对这些未知知识,LLM并非“不能回答”,而更可能“自信地编造错误答案”(即产生幻觉)。
一种直观的解决方案是:“直接喂知识”
即:在提问时,主动为LLM提供所需的新知识。
例如,直接提问“美国现任总统是哪所大学毕业的?”可能得到过时答案。而若将问题改为“根据最新信息,美国现任总统是XXX,请问他是哪所大学毕业的?”,LLM便能基于你提供的上下文给出准确回答。但是,
“直接喂知识”的方式有三大瓶颈
- 上下文窗口限制:上下文窗口如同LLM的短期工作记忆,其大小有上限(常见的有128K、200K等token容量,一个token约等于1个汉字或0.75个英文单词)。若提供的知识文档过长,超出部分将被丢弃,模型“记了后面,忘了前面”。
- 成本激增:主流LLM API按token消耗量计费。输入冗长的背景资料会显著增加每次查询的成本。
- 效率降低:过长的输入会导致模型处理时间变长,响应变慢,同时也可能因信息过载而影响回答质量。
那么,如何在“回答的准确性”与“查询的成本效率”之间取得平衡?RAG正是为解决这一核心矛盾而诞生的主流方案。
二、RAG核心思想
效率和准确的平衡:动态提供用户问题相关的知识
在让LLM生成最终答案之前,先从外部知识源中智能地检索出与当前问题最相关的信息片段,并将片段作为补充上下文提供给LLM。
这样一来,LLM无需在训练时记住所有知识,也无需在每次提问时接收全部文档,只需基于最相关的“证据”进行生成,从而兼顾准确与高效。
一个典型的RAG流程包含三个关键阶段:
- 检索(Retrieval):从海量知识库中,精准找出与问题匹配的信息片段。
- 生成(Generation):将“系统指令 + 用户问题 + 检索到的片段”共同输入LLM,生成最终答案。
- 验证与优化(Optional):对答案的准确性、可靠性进行核查,并利用反馈优化整个系统。
三、RAG技术实现
方式一、传统RAG(检索式增强)
假设文档收集工作已完成,重点关注如何预处理和检索。
一、知识库构建(索引阶段)
此阶段是“检索”的准备,目的是将原始文档转换为便于快速搜索的结构。
- 文档分块:将长文档切分为语义连贯的小块(如按段落、按固定token数、按章节)。核心挑战:如何切割才能在查询时保留完整的语义信息?
- 向量化:使用嵌入模型(Embedding)将每个文本块转换为一个高维向量(即一组数字)。关键特性:语义相似的文本,其向量在数学空间中的距离也更近。这为后续的语义搜索奠定了基础。
- 持久化存储:将[向量,文本块]对存入向量数据库,该数据库专门为高效的高维向量相似性搜索而优化。
二、检索与生成(查询阶段)
当用户提问时,系统执行以下步骤:
- 召回:
- 将用户问题同样通过嵌入模型转化为向量。
- 在向量数据库中执行向量相似度计算,快速找出与问题向量最相似的N个文本块。这一步追求高召回率,确保不错过可能相关的信息。
- 重排(可选但推荐):
- 召回的结果可能包含一些语义相近但实际不相关的片段。
- 使用更精密但计算代价更高的重排模型(如Cross-Encoder),对召回的N个片段与问题进行精细的相关性打分和重新排序。
- 选出得分最高的M个(M ≤ N)片段作为最终上下文。这一步追求高精度。
- 生成:
- 设计清晰的系统提示词(如“请严格依据以下上下文回答问题…”),将重排后的M个文本片段与用户问题拼接,输入给LLM生成最终答案。
方式二、智能体式RAG
传统RAG的流程是线性的。智能体式RAG引入了一个具有决策能力的智能体(通常也是一个LLM),它动态地规划和控制整个检索与生成流程,例如决定检索的粒度、是否进行多轮检索、如何整合信息等。
以OpenAI展示的一种研究思路为例:
一、智能化的文档处理与筛选
- 文档加载与初步切片:将一份庞大的法律PDF文档(接近百万Token)加载并初步切分为若干部分。
- 迭代式切片与挑选:由筛选LLM(如上下文窗口较大、成本较低的GPT-4o-mini)执行一个循环:分析当前所有片段与问题的相关性,筛选出最相关的一部分;然后可能对这些选中的片段进行更细粒度的拆分,再次进行相关性筛选。如此迭代,直至达到预定循环次数或满足条件。核心:这个“切片-挑选”循环由LLM驱动,而非固定的分块规则。
二、生成与验证
- 将经过多轮筛选后得到的知识片段与用户问题,提供给更强大、更可靠的回答LLM(如GPT-4o)生成初步答案。
- 最后,可再由一个推理能力更强的验证LLM(如o4mini)对初步答案进行核实,判断其是否与提供的上下文一致、是否完整回答了问题。验证通过后,才将答案返回给用户。
核心理念:将RAG流程中的关键决策(如何分块、如何筛选)交由LLM智能体完成,并通过分工协作(专模专用)和迭代验证来提升处理复杂、长文档问题的可靠性与深度。 上面的例子用到了openai 3个不同版本的LLM:
- #筛选LLM#:使用的模型是GPT-4.1-mini,特点:上下文窗口大、成本低
- #回答LLM#:使用的模型是GPT-4.1,特点:更靠谱,保证答案的准确性
- #验证LLM#:使用的模型是o4mini,特点:推理能力强
总结
RAG通过“检索-增强-生成”的范式,巧妙地扩展了LLM的知识边界与应用能力。从固定流程的传统RAG,到具备自主规划能力的智能体式RAG,其演进方向是让AI更智能、更可靠地利用外部工具与知识,最终成为我们处理复杂信息任务的强大助手。