RAG(Retrieval-Augmented Generation,检索增强生成)是一种让大模型"先查资料、再开口回答"的技术。用户提问后,系统先去知识库里找出最相关的几段文本,把它们连同问题一起交给大模型,大模型照着这些资料组织答案。它要解决的问题很具体:大模型记不住、也不该去记那些只属于你的私有知识——公司文档、产品手册、最新政策,RAG 让它在回答时能"翻书"。
RAG 实际上分两步走
第一步是"建索引"。系统把文档切成几百字一段的小块,用 Embedding 模型把每段转成向量(一种能表达语义的数字表示),存进向量数据库。这一步离线完成,文档更新时重建或增量更新索引就行。
第二步是"检索加生成"。用户提问时,问题也被转成向量,系统在库里找出语义最接近的几段原文,把原文和问题一起发给大模型。大模型这时不是凭记忆作答,而是"开卷考试":照着给定的资料来组织答案,答案里通常还能标出来源是第几段。
打个比方:微调是让模型把知识"背下来",变成长期记忆;RAG 是允许它考试时"翻讲义"。两种思路解决的是不同问题。
RAG 和微调有什么区别
| 对比项 | RAG | 微调 |
|---|---|---|
| 原理 | 外挂知识库,检索到资料再回答 | 修改模型权重,把知识写进参数里 |
| 知识更新 | 换文档、重建索引,分钟级 | 需要重新训练,小时到天级 |
| 成本 | 低,主要是向量库和检索开销 | 高,需要算力和成规模的训练数据 |
| 适合 | 私有文档问答、知识频繁更新 | 改变说话风格、固化某种任务套路 |
| 短板 | 检索错了答案就跟着歪 | 知识会过期,训练偏差难察觉 |
选型逻辑很直白:知识会变、回答需要给出处,选 RAG;想让模型学会某种"说话方式"或固定解题套路,选微调。两者也不互斥,很多企业级方案是 RAG 管知识、微调管风格,一起上。
为什么不直接把文档贴进提示词里
这是新手最常问的:"上下文窗口都几十万 token 了,把文档全塞进去不就行了?"三个现实问题:
第一,装不下。企业几万页文档,再大的窗口也塞不进,RAG 只取最相关的几段,输入短得多。
第二,贵。计费按 token 来,文档越长,每次提问的输入成本越高。RAG 每次只传几段相关文本,长期用的成本差一个数量级。
第三,模型会"走神"。实测中,模型对超长输入中间部分的内容利用率明显下降,关键信息恰好在中间就容易被忽略或记混。RAG 把最相关的片段直接摆在模型面前,反而答得更稳。
所以长上下文适合"偶尔查一两份长文档",RAG 适合"长期、高频地问一个大知识库"。
关于 RAG 的三个常见误解
误区一:用了 RAG 就不会有幻觉了。RAG 大幅减少了凭空编造,但检索到错误片段、或者模型在资料之外"自由发挥"时,照样会一本正经地编。缓解不等于根除,涉及金额、日期、合规口径的结论,还是要点开原文核对一次。
误区二:RAG 一定比微调好。没有"一定",只有"适合什么"。要的是知识问答,RAG 又快又便宜;要的是行为风格,微调才是正解。把风格问题交给 RAG,就像让图书管理员去学相声——找错了人。
误区三:文档越多,RAG 效果越好。质量比数量重要得多。重复、过时、互相矛盾的文档会污染检索结果,搜出来三段互相打架的资料,模型也只能和稀泥。清洗文档、切好片段,比堆文档数量重要。
什么时候适合用 RAG,什么时候不适合
适合 RAG 的:企业知识库问答、客服话术库、产品文档助手、法规政策查询——共同点是知识私有、会更新、回答需要可追溯。
不适合 RAG 的:模型本来就知道的常识问题,加一层检索只是多此一举还变慢;想让模型"学会"某种推理套路或文风,那是微调的活;文档质量极差、互相矛盾又没人维护的库——先治理文档,否则 RAG 只是把垃圾更快地端上桌。
落地时一般用什么搭
工程上 RAG 已经是一套成熟工具链:LangChain、LlamaIndex 负责编排"切片—检索—生成"流程;向量库常用 Milvus、Qdrant 或 pgvector;想开箱即用,RAGFlow、Dify 这类带界面的开源项目把文档解析、切片、向量库和问答界面都打包好了,个人或小团队验证想法更快。选型时先看文档类型(PDF 表格多不多、要不要解析图片),再看数据能不能出内网,这两点比框架名气重要。
Q:RAG 需要训练模型吗?
A:不需要。RAG 用的是现成大模型的理解和生成能力,知识存在外部向量库里,不碰模型权重。这也是它比微调便宜、更新快的原因。
Q:个人知识库用得上 RAG 吗?
A:看规模。几十页读书笔记,直接贴进长上下文更省事;上百份文档还持续新增时,RAG 的检索才划算。小知识库硬上 RAG,属于杀鸡用牛刀。
Q:RAG 的答案能直接引用吗?
A:比纯靠模型记忆可信,因为每段关键结论都能追溯到原文片段。但检索可能出错,重要结论仍建议点开原文核对一次再引用。