最近一年我被问得最多的问题不是“大模型怎么部署”而是“RAG 和大模型到底是什么关系”。问的人里有刚入行想做企业知识库的也有已经在跑微调实验的还有让我帮忙判断“到底该上 RAG 还是该微调”的。每次我都会先纠正一个直觉RAG 不是大模型的一种形态也不跟微调构成非此即彼的对立。它是大模型外围的一套检索增强机制专门解决“模型不知道这件事”和“模型编造这件事”这两个老大难问题。这篇文章我不讲花哨概念尽量从原理到实战把这层核心关系一次说透。1. 为什么大模型需要“外挂记忆”RAG诞生的背景1.1 大模型的“知识截止”与幻觉问题大模型本质上是“从语料里学到一个概率分布”的参数化系统。训练结束后模型会固化成一组权重学到的是训练语料截止时间点之前的规律与知识。这就有了第一个硬限制知识截止日期。你问一个训练数据截止在2021年的模型“2023年发生了什么”它没有可靠的答案来源只能按概率生成一个听起来合理的表述。这不只是时效问题也是“是否见过”的问题。企业内部的私有文档、产品手册、实时报表根本不在公开训练语料里。就算模型很聪明它对没见过的内容也只能“编”。这个现象业内称为幻觉hallucination。可以打个比方让一个刚入职的天才实习生回答他从未读过的公司内部制度他大概率会靠常识补一段“看起来正确”的答案而不是直接承认不知道。所以业界才需要一种机制让大模型在回答问题时先把相关资料找出来再基于资料作答。这种“先检索后生成”的机制就是RAG——Retrieval-Augmented Generation检索增强生成。1.2 让模型“记住”的两种路线塞进参数 vs 挂在外部想让模型掌握新知识主要有两条路。一条是微调Fine-tuning。把新语料拿去做进一步训练把知识“写进”模型权重。这条路适合改变模型的行为风格、学会特定输出格式、或者强化对某些指令的遵循能力。代价是你要有GPU资源、清理好的训练数据而且模型每更新一次训练一轮成本不低。更麻烦的是知识一旦训进去就很难单独删除某个条目可解释性也比较弱。另一条就是RAG。模型权重不动知识放在外部库比如向量数据库里用户提问时先把相关的片段检索出来拼到Prompt里再由大模型生成回答。这条路不需要训练知识可以随时增删改回答时还能保留出处用户能直接回看是哪些文档支撑了答案。用大白话说微调是让员工去上培训班改变能力RAG是给员工配一个随时可查的资料库问问题的时候先翻资料再开口。对企业来说多数场景追求的是“及时、可追溯、成本可控”所以RAG往往比微调更先落地。这也是我看到很多团队第一版知识库都选RAG的直接原因。2. RAG到底在检索什么三大组件的分工与合作要彻底搞懂RAG和大模型的关系得先搞懂RAG自己是怎么工作的。标准RAG流水线分三段索引Indexing、检索Retrieval、生成Generation。2.1 索引阶段切分、向量化与存储索引阶段解决的核心问题把一堆文档变成机器可快速检索的格式。第一步是文档加载与解析。真实世界的文档不只是txt还有PDF、Word、HTML、Markdown、扫描件。PDF尤其麻烦很多是图片型扫描件必须先做OCR转成文本。这一步漏了后面检索质量直接报废。常见工具有paddleocr、unstructured、textract等按项目文档类型选就行。第二步是文本切分。一个文件动辄几十页不可能整篇塞进Prompt也不该整篇向量化。常见做法是按固定长度切块比如每300~500个token切一块更讲究的做法是按章节、段落、句子结构切再把标题、摘要作为元数据记录下来。为什么要切得刚刚好因为切太大向量里混了太多主题检索时匹配不精准切太小单个片段信息量不足给模型也还原不出完整意思。实践中还要设置重叠overlap避免一句话在切块边界被活生生拆成两半。第三步是向量化。要把文本转成向量需要Embedding模型。开源的、商业的都有选择标准一般是中文效果、维度数、成本、是否支持本地部署。不同Embedding模型对语言、专业术语、代码、表格的敏感度差距很大建议用自己领域的测试集跑一遍召回率再定别只看榜单。第四步是存储。向量库负责存向量和元数据并提供ANN近邻检索。常见选择有Milvus、Qdrant、Weaviate、Chroma、FAISS、pgvector等。本地快速Demo用Chroma/FAISS很顺手生产环境要考虑数据量、并发、权限通常会选更强壮的分布式向量库。这里顺带回答“RAG知识库能存储图片吗”这个问题能但要分情况。如果想检索的是“图片本身”比如找相似商品图那就用CLIP这类多模态模型给图片做向量如果想让大模型回答“图片里的数据/表格内容”那就先用OCR或视觉大模型把图片内容抽成文本再把文本存进知识库。当前大多数RAG框架默认是文本优先多模态内容需要自己做适配。2.2 检索阶段相关性召回与重排检索阶段核心任务拿到用户问题从向量库里召回最相关的Top-K个片段。先把用户问题也用同一个Embedding模型做向量化然后在向量库里做近似最近邻搜索比如余弦相似度排序。这一步速度很快但质量上有个隐患向量检索擅长语义相似却不擅长精确关键词匹配专业缩写、型号、编号很容易翻车。比如用户问“A100的显存”如果文档里写的是“NVIDIA A100 80GB”语义向量可能匹配不上——这时候就要混合检索。混合检索是业内标配向量检索 BM25关键词检索各召回一批再合并去重。BM25虽然“朴素”但在精确匹配、复杂实体上非常可靠。合并后通常还会加一个**重排Rerank**环节拿一个Cross-Encoder模型把“问题候选片段”逐一打分重新排序只取前3~5个片段。这一步对精度的提升往往比换Embedding模型还明显代价是多了些推理延迟。另外要注意召回数量。Top-K不是越大越好K取5、取10还是取20要看生成模型的上下文窗口和任务的复杂度。召回太多会把无关内容塞进Prompt模型容易被带偏太少又可能漏掉关键信息。我一般会先用K5或K8跑一个基准再用评测集看情况调。2.3 生成阶段Prompt拼接与上下文注入检索完之后RAG进入最后一步生成。这一步会有个关键约束——上下文窗口。即便是长上下文模型也不建议把所有候选片段一次性怼进去窗口满了会截断截断后的信息可能正好吃掉关键答案。所以拼接Prompt是有策略的。常见模板长这样“以下是企业内部文档中的相关片段请优先根据这些片段回答问题。如果片段中没有答案请回答‘资料中未找到相关信息’不要编造。片段列表\n1.片段A\n2.片段B…… \n用户问题……”这个模板里至少有四个要素角色约束只用给定资料、防幻觉指令找不到就说找不到、带编号的片段、最后放用户问题。片段带编号的好处有两个一是模型可以引用来源方便用户回查二是降低模型的阅读负担。还有个小规律值得记一下长上下文中模型对“中段”内容的注意力往往偏低这就是所谓的“Lost in the Middle”现象。回答问题时如果片段数量较多把最关键的片段放在开头或结尾的位置比放在中间更容易被模型采纳。3. RAG与大模型的真实关系不是替代而是“驾驶辅助”3.1 谁做主生成权仍在大模型手里很多初学者把RAG理解成“给大模型加记忆”这个说法其实不准确。RAG没有改大模型的任何一个参数也没有给模型增加任何持久记忆。它做的只是在“输入侧”做文章把检索到的资料和用户问题一起拼成一个更充实的Prompt喂给大模型。模型该怎么做、怎么理解、怎么生成还完全由模型自身决定。所以更贴切的比喻是“驾驶辅助”。RAG负责把路况信息外部知识探测好、递过来方向盘和油门还是大模型在控制。这意味着RAG的效果上限始终被基础大模型的阅读理解能力、推理能力和指令遵循能力卡着。如果基础模型太弱就算检索出一堆正确答案它也未必能答好反过来说基础模型足够强RAG才能锦上添花。这也能解释很多人踩过的坑替换更强的Embedding模型或换更好的向量库检索召回率上去了但生成效果没变化甚至更差。原因往往是基础模型本身不会用没见过的资料或者Prompt设计有问题。所以调RAG不能只盯着检索模块还得盯着生成模块。3.2 微调与RAG的边界何时选哪个“该用RAG还是该微调”是我被问得最多的问题。我的答案通常是先别急着二选一先搞清楚它们的边界。RAG更适合“知识频繁变化、需要可追溯、以事实查询为主”的场景例如企业内部文档问答、产品手册客服、政策制度查询。微调更适合“行为风格要变、输出格式要固定、指令遵循要增强”的场景例如让模型模仿某种文风、按固定JSON输出、始终用特定语气回答。两者成本结构也完全不同。RAG的主要成本在索引更新和每次请求的检索延迟微调的主要成本在训练数据和GPU算力而且模型每次更新都要重复投入。你可以拿一张表对比维度RAG微调知识更新更新检索库即可秒级完成需重新训练成本高可解释性可引用来源文档便于追溯知识在权重里无法溯源对GPU算力的依赖推理时依赖训练时基本不依赖训练和推理都依赖改变模型风格基本不改变只改输入擅长改变风格与输出格式幻觉控制能在一定程度上降低幻觉不确定性较高冷启动与门槛不用训练落地快需要数据准备与训练功底现实中用得最多的是两者组合RAG负责“提供准确事实”微调负责“让模型像个懂行的专家来回答”。比如企业客服场景用RAG把售后文档接进来解决事实问题用微调让模型语气更像品牌客服两者并不打架。3.3 常见误解RAG不是知识库本身也不是向量数据库这里集中澄清四个常被说混的概念。第一向量数据库不等于RAG。向量库只是RAG流水线里的存储和检索组件。你可以在向量库里存了一堆向量但不接大模型、不做生成那只是个检索系统不叫RAG。反过来RAG也不一定非要用向量数据库数据量小的时候用普通数据库加内存检索也能跑。第二“有了RAG大模型就不会幻觉”是错的。RAG只能降低幻觉概率。如果检索回来的片段本身不相关、片段间互相矛盾或者Prompt没有防幻觉约束模型照样编。更麻烦的是糟糕的RAG会拿“看似相关的假信息”污染模型幻觉反而更隐蔽。第三RAG不是只能做问答。基于同一套“检索生成”框架还可以做文档摘要、合同比对、多文档交叉问答、按条件抽取信息等。核心是“把自己需要的资料找出来”这一步问什么格式是次要的。第四RAG不会给大模型带来“永久记忆”。它每次请求时临时把知识塞进上下文请求结束就没了。想跨会话记住用户偏好那是另一个话题要做记忆系统不是RAG能解决的。4. 从Demo到生产RAG落地时最容易翻车的细节说完了原理聊点实在的。我用RAG做过不少项目也帮人排过很多坑这里挑三个最常翻车的点展开讲。4.1 检索不到东西切分粒度、召回数量与重排症状很典型问答界面都搭好了知识库里明明有答案但模型理直气壮地说“不知道”。我排查这类问题的顺序是固定的第一检查文档有没有真正进索引。很多人是“感觉”传进去了实际OCR没跑、解析失败、切分后全变成空字符。先抽查几条向量化后的片段看内容是否完整。第二检查切分粒度。我见过最离谱的切分是把一个80页的技术手册按字符硬切成几十块一块里既有背景介绍又有技术参数检索时每个片段都“沾点边但都不够准”。切分时尽量尊重原文档结构按标题、章节、段落来如果格式混乱给chunk设个合理上限比如512个token并加overlap。chunk之间也要保留来源和更新时间等元数据后面过滤会用到。第三检查召回数和阈值。Top-K太少或相似度阈值设太高都会直接把正确答案拒之门外。把日志打开看一眼每次召回的前20个片段到底是源头没召回还是召回后被过滤了。第四加混合检索和重排。纯向量检索召回不理想时先补BM25关键词检索再用Rerank模型合并排序。这一步在专业术语、型号、编号查询上提升最明显。做过一次客户案例加了一个Rerank之后问答准确率从72%涨到91%Embedding模型都没换。本地想跑一套RAG也很容易。我身边不少人用ollama部署一个开源大模型再配Chroma或本地数据库存向量加上bge系列Embedding模型就能搭起一个零基础可复制的本地知识库Demo。也可以用Dify这类可视化工具来编排RAG和Agent工作流门槛更低。这类教程网上很多关键是别停在Demo要把上面几步排查流程做进系统里。4.2 检索到但用不上上下文窗口与Prompt顺序另一种翻车情况检索不仅召回了正确答案也在上下文里可模型就是答错。这时候问题多半出在“喂给模型的方式”上。先看Prompt顺序。前面提到Lost in the Middle现象关键片段如果正好排在长上下文的中间被忽略的概率会明显上升。把最重要的片段往前放或者用“请优先看第1条资料”这种指令做对齐效果更稳。再看无关片段污染。如果一次召回8个片段其中只有1个是正确答案模型很难不被另外7个噪音带偏。宁可少召回几个也别滥竽充数或者在Prompt里要求模型对每个片段先做相关性判断只采用相关的部分。还有上下文窗口。模型窗口有限不是所有“召回回来的东西”都值得塞进去。长文档切成20个chunk全塞进去既可能超限也可能超过模型的有效注意力范围。生产环境里我会用一个动态策略根据问题复杂度动态决定召回K值K值小的时候留着给重排后的高置信片段K值大的时候只取前几段避免爆窗口。Prompt里的防幻觉指令也很关键。“请根据资料回答资料中没有就回答不知道”这句话一定要写在显眼位置不然模型会惯性顺着问题的语气继续编。注意在Prompt里加一句“如果资料中没有答案请回答不知道”几乎是所有生产级RAG的标配别嫌啰嗦。4.3 知识库更新、图片等非结构化内容的处理最后是更新和多模态两类问题。知识库更新是生产环境第一头痛的事。文档改了一版索引没更新模型还在用旧版本回答文档删了但历史向量还在照样能被检索到。解决思路有两种一种是定时重建索引简单粗暴适合数据量不大、变更不频繁的场景另一种是增量更新按文档ID做upsert和delete适合知识库频繁变动的场景。我建议至少在文档入库时记录一个内容hash更新时比对hash没变的文档不用重复向量化。图片能不能进RAG知识库前面简单提过这里展开一点。如果你要存储和检索的是“图片内容”比如截图里的表格、合同扫描页、报表可以先用OCR或视觉大模型把内容转成结构化文本再走文本RAG流程如果你要检索的是“图片本身”比如商品图、设计稿、相册就要用多模态Embedding模型生成图片向量库里的每个条目是“图片向量文本描述”检索时用户输入同样映射到向量空间找相似图片。这两种需求别混淆否则索引做出来也很难用。多租户权限也不能忘。企业内部知识通常带部门权限如果在检索阶段不做文档级权限过滤用户可能问到不该知道的资料。常用的做法是给文档打上权限标签检索时同步带上“当前用户可访问标签”作为过滤条件而不是在回答生成后再删敏感内容。5. RAG的瓶颈和下一步它不会替代微调也不会被替代很多人搜“rag瓶颈”说明大家已经意识到RAG不是银弹。这部分我聊清楚瓶颈在哪以及往哪个方向演化。5.1 RAG的四个瓶颈第一个瓶颈在召回质量。RAG的效果高度依赖“能不能检索到”。但文档里的信息分布往往不均衡一个问题的答案可能分散在三五个片段里而向量检索返回的是“整体相似”的片段未必能把所有碎片凑齐。跨段落推理、多条件组合查询是纯向量检索的薄弱点。这也是GraphRAG、Ontology RAG这类方案出现的原因——用知识图谱把实体和关系建成结构再配合向量检索解决“多跳”问题。第二个瓶颈在上下文窗口和信息密度。就算召回了一批片段生成阶段能注入的上下文也有限上下文一长模型还会出现注意力稀释和中间丢失。这个问题主要由基础模型的长度能力决定RAG自身能优化的空间有限。第三个瓶颈在更新实时性。理论上RAG知识库更新很便宜可真做到“文档上传后立即能被检索到”需要索引管道、并发控制、容错机制。很多团队死在“更新链路没做好”上而不是RAG本身。第四个瓶颈在评估。RAG是一个流水线Embedding模型、切分策略、召回K值、Rerank、Prompt、基础模型都会影响最终效果。系统里任何一个环节变了答案都可能变。想科学调优就得先建一套评测集用一批“问题正确答案支撑文档”作为黄金样本跑完RAG后算召回率、准确率、忠实度这些指标否则每次调整都是凭感觉。5.2 RAG与Agent、多模态的结合RAG早就不是“单轮问答”的形态了。最近更火的叫法叫“RAG智能体”。智能体把“检索”变成一种可被动态调用的工具模型先判断这个问题需不需要检索需要检索的话是查文档还是调数据库如果第一轮召回不理想还能换关键词重试。这个过程把RAG从“固定流水线”升级成“带策略的决策系统”赛道也随之变成工具调用和多函数协作。多模态方向也在往前走。前面说的“图片能不能存”就是多模态RAG的入门问题。工业检测、服装识别这类场景往往需要把图像特征和文本语义打通用CLIP类模型把图片和文字映射到同一向量空间检索时既可以用文字找图也可以用图找图。本质上都可以归入多模态RAG的范畴。5.3 未来形态RAG正在从“外挂”走向“原生”从趋势看RAG和模型的结合方式在慢慢从“外挂”走向“原生”。传统RAG是模型外的一个独立模块先查再喂进Prompt而有些新模型架构已经开始把检索机制内置到注意力或混合专家层里让模型在推理过程中自动决定“该看哪段外部信息”不需要额外搭一条RAG流水线。不过外挂式RAG在很长一段时间内仍是企业落地的主流。原因很现实它简单、透明、可插拔能配合任何主流通用大模型不需要改模型权重。对大多数团队来说选RAG不是为了“追上最新架构”而是为了用最低成本解决“大模型不知道的知识”。最后分享一下我自己的判断标准遇到新项目先问一句这个知识是经常变还是基本稳定经常变优先RAG知识可以随库更新稳定不变且需要固定输出风格再考虑微调。别一上来就上微调也别相信RAG能包治百病。搞懂RAG和大模型的核心关系本质上就是搞懂两件事知识放在哪里以及谁来负责生成。把这两件事想清楚方案自然就出来了。
阅读完成 · 觉得有帮助?