对 RAG 技术的理解
2193 字约 8 分钟
摘要介绍 RAG 架构及其核心技术,从文档处理到向量数据库检索,说明大模型如何借助外部资料减少幻觉,并实现私有知识问答。
大语言模型的知识很丰富,但它们也有明显的局限。它们就像一位读过大量书籍、却与外界隔绝的学者:几年前的典籍记得很清楚,昨天发生的新闻却一无所知。面对企业内部的私有文档,它们往往只能靠推测来补全信息。
为了解决这个问题,人们提出了 RAG(Retrieval-Augmented Generation,检索增强生成)。可以把大模型看作一个大脑,而 RAG 为它连接了一座可以随时更新、容量很大的图书馆。
RAG 的本质:大模型的“开卷考试”
在介绍技术细节之前,先给 RAG 一个直观的定义。通常情况下,大模型像是在“闭卷考试”,只能依靠训练时记在参数里的知识回答问题。但知识是有时效的,也是有边界的。
RAG 的思路是把它变成“开卷考试”。用户提出问题后,系统不会直接让模型作答,而是先到外部知识库中搜索,找出与问题最相关的几段参考资料。然后,系统把这些资料和原始问题一起交给模型,并要求它:“请根据我提供的参考内容,给出准确的回答。”
这种架构的优势在于,它不需要重新训练或微调大模型,而是通过改变输入给模型的信息,就能明显提高输出的可靠性和专业程度。
为什么需要 RAG
理解了 RAG 的工作方式,就能看出它解决了大模型应用中的几个主要问题。
首先是减少幻觉。大模型有一个常见的问题,就是会很有把握地给出错误答案,这在技术上称为幻觉。引入 RAG 后,模型回答时有了明确的依据。当模型被要求基于给定文本作答时,它的发挥空间就被限制在了文本范围内,从而减少了逻辑断裂和事实错误。
其次是数据的时效性与私密性。大模型的训练周期通常长达数月,知识库始终停留在某个时间点。对于金融行情分析、最新技术文档支持这类需要实时信息的场景,只依赖模型参数是不够的。另外,企业的内部敏感数据也不宜直接提供给公有云模型做训练。RAG 的做法是让数据留在企业本地的数据库中,只在需要时把相关片段检索出来,作为上下文提供给模型。
最后是成本与灵活性。微调虽然也能让模型学到新知识,但过程复杂、成本高,而且知识更新后还需要重新微调。RAG 更像一块可以随时更换的硬盘:更新知识库只需要对文档进行增删改查,成本低,响应也快。
如何切分文档
RAG 的第一步是检索,因此如何准备被检索的材料非常关键。这里涉及一个重要环节:文档切分(Chunking)。
我们不能直接把一本几百页的书交给模型。当前的模型都有上下文长度限制,而且一次输入过多无关信息,会造成信息过载,干扰模型的判断。因此需要把长文拆分成若干较短的片段。
切分不能只按字数截断。如果一个段落正好在阐述一个核心观点,而切分位置恰好落在中间,那么两个片段都会失去完整的语义。实践中常用重叠切分:每个片段的结尾保留一小部分内容,作为下一个片段的开头。这种类似滑动窗口的方式,可以保持上下文的连续性,让每个被检索到的片段都不至于语义残缺。
更进一步的做法是考虑文档的物理结构,例如识别标题、段落、列表和表格。对于 Markdown 或 HTML 文档,利用其自带的标签结构进行分块,通常比单纯按字符计数的效果更好。切分的本质,是在“检索的精确度”和“信息的完整性”之间找到平衡。
如何把文本转换为向量
切分完成后,还需要解决一个更核心的问题:计算机如何理解这些文本片段,并快速找到与用户问题相关的内容?
传统的关键词搜索依赖字面上的完全匹配,在处理语义时效果有限。例如,用户搜索“如何保持身体健康”,关键词搜索可能找不到只写了“锻炼身体”或“科学饮食”、却没有出现“健康”二字的文档。
为了解决这个问题,需要使用向量化(Embedding)技术。简单来说,就是用一个预训练的深度学习模型,把每段文本转换成一组数字,即向量。
这组数字可以看作文本在多维空间中的坐标。在由成百上千个维度构成的空间中,含义相近的句子位置较近,含义不同的句子则相距较远。把用户的问题同样转换为向量后,检索就变成了计算距离的问题。只需找出空间中离问题最近的几个片段,就能捕捉到语义上的相关性,而不仅仅是字面上的重合。
向量数据库的作用
有了向量,接下来要解决的是如何存储并查询数以百万计的向量。传统的 SQL 数据库是为结构化数据设计的,处理高维向量的相似度搜索效率很低。因此,向量数据库(Vector Database) 成为了 RAG 架构中的核心基础设施。
向量数据库的关键在于索引。为了在海量数据中快速找到最相近的向量,它不会逐一比对,而是使用 HNSW(层次化可导航小世界图)等算法。可以把它想象成城市中的立体交通网络:查询只需要经过少数几次跳转,就能快速到达目标区域。
但只靠向量搜索通常不够。有时用户要找的是某个专有名词或编号,这种情况下,传统的关键词检索(如 BM25 算法)反而更有效。因此,许多 RAG 系统采用混合检索:同时运行向量检索和关键词检索,再通过**重排(Reranking)**算法,按权重融合两者的结果。
混合检索提高了系统的稳定性。重排阶段通常还会使用一个更小、更精确的模型,对初步筛选出的几十个候选片段进行逐一比对,选出最能回答问题的三到五段,提供给大模型。经过这样逐层筛选,最终输入模型的信息既精简又相关。
从检索到生成
找到最相关的片段后,RAG 进入最后一步。这些片段会被填入一个提示词模板(Prompt Template)中。
模板的内容大致如下:“你是一个专业的助手。请阅读以下参考资料:<此处插入检索到的片段>。请根据这些内容回答用户的问题:<此处插入用户问题>。如果参考资料中没有相关信息,请直接告知用户你不知道,不要编造。”
此时的大模型不再只凭记忆作答,而是基于参考资料进行回答。它会综合多段资料,进行归纳和表达,最终给出一个既专业又符合语境的答案。
还可以要求模型在回答时标注引用了哪段参考资料。这种来源追溯机制既增加了答案的可信度,也方便用户在有疑问时查看原始文档进行核实。
总结
回顾整个 RAG 流程:文档切分、文本向量化、向量数据库检索、大模型整合生成,这是一套完整的技术组合,也是一种处理知识的方式。
它突破了大模型“训练完成即定型”的限制,让 AI 能够持续接入并理解私有知识。随着 Agent(智能体)技术的成熟,RAG 也可能不再只是被动地回答问题,而是主动寻找缺失的知识,并更新自己的知识库。
理解 RAG,本质上就是理解如何让机器利用人类已经积累的知识。这种让模型与真实数据保持同步的技术,很可能是通向通用人工智能的重要基础。