一句话解释
RAG(Retrieval-Augmented Generation,检索增强生成)是一种让大模型“先查资料、再回答”的方法:系统先根据问题从文档库里找出最相关的几段内容,把它们和问题一起交给模型,模型基于这些材料生成答案。
为什么需要 RAG
大语言模型的知识来自训练数据,这带来三个现实问题:
知识有截止时间。 训练完成之后发生的事情,模型不知道。
不了解你的私有数据。 公司内部文档、产品手册、客户工单,都不在公开训练数据里。
容易“一本正经地胡说”。 当模型不知道答案时,它仍可能生成看似合理但错误的内容,也就是“幻觉”。
RAG 的思路很朴素:与其指望模型把所有知识都记住,不如在回答时把相关资料直接放到它眼前,就像开卷考试。这样既能用上最新、私有的信息,又能让答案有据可查。
RAG 的基本流程
一个典型的 RAG 系统分为“离线准备”和“在线问答”两个阶段。
离线准备(建索引):
- 收集文档:PDF、网页、Wiki、数据库记录等。
- 切分(Chunking):把长文档切成较小的片段,比如几百字一段。片段太长会混入无关信息,太短又会丢失上下文。
- 向量化(Embedding):用嵌入模型把每个片段转换成一个向量,语义相近的文本,向量在空间中也相近。
- 存入索引:把向量和原文一起存进向量数据库或支持向量检索的搜索引擎。
在线问答(检索 + 生成):
- 用户提出问题,系统用同一个嵌入模型把问题转成向量。
- 在索引中找出与问题向量最接近的若干片段。
- 把这些片段和问题拼成提示词,例如“请根据以下资料回答问题,资料中没有的内容请说明不知道”。
- 大模型阅读资料并生成答案,通常还会附上引用来源。
影响效果的关键环节
RAG 的上限很大程度上由“检索”决定:如果没找到正确的资料,模型再强也答不对。常见的优化方向包括:
切分策略:按段落、标题等自然结构切分,相邻片段保留少量重叠,避免一句话被切断。
混合检索:向量检索擅长理解语义,但对产品型号、人名等精确词不够敏感;把它和传统关键词检索(如 BM25)结合,往往更稳。
重排序(Rerank):先粗召回较多候选,再用专门的重排模型精细打分,挑出最相关的几段。
查询改写:用户的问题可能口语化或省略上下文,先让模型改写成更适合检索的表述。
元数据过滤:按时间、部门、文档类型等先缩小范围,同时也能实现权限控制。
RAG 和微调怎么选
两者经常被拿来比较,但解决的问题不同:
- RAG 适合补充“知识”:资料经常更新、需要标注来源、数据量大,更新文档即可生效,无需重新训练。
- 微调适合改变“行为”:让模型学会特定的输出格式、语气或某类任务的做法。
实际项目中两者也可以结合:用微调让模型更擅长“根据资料作答”,用 RAG 提供具体资料。
常见误区
误区一:用了 RAG 就不会有幻觉。 RAG 能明显减少编造,但不能杜绝。检索到错误或无关的资料、模型没有忠实引用资料,都可能导致错误答案。
误区二:上下文窗口够大就不需要 RAG。 把所有文档一股脑塞进去,成本高、速度慢,而且模型在超长输入中定位关键信息的能力会下降。检索依然是筛选信息的有效手段。
误区三:RAG 就等于向量数据库。 向量数据库只是检索的一种实现方式。关键词搜索、结构化数据库查询,甚至调用搜索引擎,都可以作为 RAG 的检索环节。
误区四:搭起来就完事了。 RAG 需要持续评估:准备一组典型问题和标准答案,分别检查“检索到的资料对不对”和“生成的回答对不对”,才能知道该优化哪一环。