RAG 是什么?为什么大模型需要查资料
写在前面大模型不是资料库很多人第一次用大模型会有一个错觉它什么都知道。问历史、问代码、问产品方案它都能说。语气还很自信。于是大家很容易把大模型当成一个会说话的资料库。但用一段时间后你会发现问题它不知道你公司昨天开的会 它不知道你电脑里的 PDF 它不知道你项目最新 README 它可能记错版本 它会把没有依据的话说得像真的。这时候就轮到 RAG 出场了。RAG 的全称是 Retrieval-Augmented Generation通常翻译成“检索增强生成”。这名字有点学术其实意思很朴素先查资料再让大模型基于查到的资料回答。你可以把它理解成给大模型配了一个资料员。模型本身负责理解和表达资料员负责把相关文档找出来。为什么需要 RAG大模型有三个天然限制。第一它的知识有时间边界。模型训练完之后后面发生的新事它不一定知道。第二它不知道你的私有资料。公司文档、项目代码、个人笔记、客户材料这些不在模型训练数据里。第三它会幻觉。没有资料时它可能根据语言模式猜一个答案猜得还挺像。RAG 解决的就是这三个问题的一部分。问题RAG 怎么帮忙知识过期接入最新文档不知道私有资料从你的资料库检索容易编造要求基于引用片段回答上下文有限只塞相关片段不塞整库注意我说的是“解决一部分”不是彻底解决。RAG 做不好一样会答错。一个最小 RAG 流程假设你有一个文件夹里面放着项目文档。你想问这个项目怎么启动一个最小 RAG 系统大概会这样工作1. 读取文档 2. 把文档切成小片段 3. 把每个片段变成向量 4. 用户提问时也把问题变成向量 5. 找出最相似的几个文档片段 6. 把这些片段和问题一起发给大模型 7. 大模型基于片段生成答案 8. 最好把引用来源也返回给用户。听起来步骤很多但核心就是两件事检索找到相关资料 生成把资料整理成可读答案。这也是 RAG 名字里的两个动作。向量是什么不用想得太玄讲 RAG 很容易讲到向量数据库然后大家就开始头大。可以先不用数学化理解。你把向量当成一种“语义坐标”就行。比如这几句话如何启动项目 项目运行步骤 本地开发怎么跑起来 README 里的启动命令。它们文字不完全一样但意思接近。向量模型会把它们放到语义空间里比较近的位置。这样用户问“怎么把这个项目跑起来”系统就能找到文档里“启动步骤”相关片段而不是只靠关键词匹配。关键词搜索像是在找“字面相同”。向量检索更像是在找“意思接近”。当然向量检索也不是万能。它可能漏掉精确编号、版本号、错误码。所以很多系统会把关键词检索和向量检索结合起来。为什么不能直接把所有文档塞给模型有人会问既然模型要看资料为什么不把全部文档都丢进去原因很简单上下文有限而且贵。即使用长上下文模型把整个知识库都塞进去也不现实。你可能有几百份文档、几万行代码、几十万字资料。全部塞给模型会遇到上下文放不下 速度慢 成本高 模型注意力分散 答案反而更乱。RAG 的思路是不要把整个图书馆搬到桌上只把和问题有关的几页翻出来。这就是检索的价值。RAG 最容易出错的地方RAG 听起来像标准答案但真正落地时坑很多。1. 文档解析失败PDF、Word、网页、扫描件、表格解析质量差别很大。如果文档解析出来顺序乱了、表格丢了、标题没了后面检索再强也救不了。常见问题PDF 分栏顺序错乱 表格被拆成碎片 页眉页脚混进正文 图片里的文字没 OCR 代码块格式丢失。2. 切分不合理切分太小片段没有上下文。切分太大召回片段里噪音太多。比如一个 API 文档如果把参数表和接口说明切开模型可能只看到参数不知道接口用途。反过来如果一整章都塞进去模型又容易抓不住重点。切分不是随便按字数砍最好结合标题、段落、代码块、表格结构。3. 召回错了RAG 的答案质量很大程度取决于召回质量。用户问“登录接口错误码 401 怎么处理”系统却召回了“注册接口参数说明”那模型再聪明也只能瞎答。所以一个好 RAG 系统不只看最终回答还要看召回了哪些片段 片段来自哪份文档 相似度分数如何 有没有漏掉关键资料。4. 模型不遵守资料有些模型即使拿到了资料也会自己发挥。所以 prompt 里通常要加类似要求只根据提供的资料回答 如果资料不足请说不知道 答案后列出引用来源 不要补充资料中没有的信息。但这只是约束不是魔法。严肃场景还要做答案校验和人工审核。RAG 和本地模型是什么关系很多人接触 RAG是从本地文档问答开始的。比如 LM Studio、GPT4All、AnythingLLM、Open WebUI 这类工具都可以做一定程度的本地资料问答。你把文件加进去然后围绕文件提问。这里的核心价值是资料可以留在本地 模型可以是本地模型 检索可以在本机或内网完成 适合处理不方便上传的资料。但本地 RAG 也会受到本地模型能力限制。小模型可能看到了正确片段但表达不好或者理解复杂表格比较吃力。所以本地 RAG 适合个人知识库 内部资料初筛 低风险文档问答 离线演示 开发原型。如果是法律、医疗、财务这类高风险场景不能只靠本地小模型一句回答就下结论。一个可操作的 RAG 测试方法如果你正在试一个 RAG 工具不要只问“这个文档讲了什么”。这个问题太宽模型很容易泛泛总结。建议准备 10 个问题3 个原文明确有答案的问题 3 个需要跨段落整合的问题 2 个原文没有答案的问题 1 个包含具体数字或版本号的问题 1 个容易混淆相似概念的问题。然后观察四件事是否召回正确片段 是否承认资料不足 数字和版本号是否准确 答案是否给出引用来源。如果一个系统在“原文没有答案”的问题上也编得很流畅就要小心。RAG 的好坏不是看它能不能说而是看它知道什么时候不该说。RAG 不等于知识库全部很多产品宣传“接入文档就变知识库”。实际没那么简单。一个可用的知识库系统除了 RAG还需要文档权限 版本更新 增量索引 引用溯源 反馈纠错 敏感信息处理 多格式解析 评估集和回归测试。RAG 是核心链路但不是全部工程。个人用可以简单一点能问自己的笔记就很好。企业用就不能这么随意尤其是权限。如果员工 A 没权限看某份合同RAG 系统也不能因为向量检索把合同片段塞给他。RAG 也分很多种很多人把 RAG 当成一个单一方案其实它有很多层级。类型做法适合场景简单 RAG向量检索 大模型回答个人知识库、入门项目混合检索 RAG关键词 向量 rerank企业文档、技术文档多轮 RAG根据追问继续检索客服、复杂资料问答Agentic RAG模型决定查什么、查几次研究型问答、复杂分析Graph RAG结合实体关系和图结构组织知识、人物关系、项目依赖多模态 RAG文本、图片、表格一起检索PDF、报告、产品手册入门时不要一上来就做 Graph RAG 或 Agentic RAG。先把简单 RAG 做稳文档能解析 片段能召回 答案有引用 不知道时不乱编。这四件事做好已经能解决很多真实问题。按文档类型选择策略不同资料RAG 的处理方式不一样。1. Markdown 和纯文本这是最好处理的资料。标题、段落、列表都比较清楚切分也容易。个人知识库、项目 README、技术笔记都很适合从这里开始。建议按标题层级切分 保留标题路径 代码块不要拆碎 答案里返回文件名和标题。2. PDFPDF 是最常见也最麻烦的格式。问题包括分栏 页眉页脚 表格 图片 扫描件 脚注 目录。如果是扫描 PDF还要 OCR。OCR 错了后面全都会受影响。3. 表格表格不适合简单按段落切。比如一张价格表如果把表头和数据行拆开模型就不知道每个数字是什么意思。表格类资料最好保留结构列名 行号 单位 备注 来源页码。4. 代码仓库代码 RAG 和文档 RAG 不一样。代码有依赖关系、调用关系、文件结构。只靠向量相似度容易漏掉关键上下文。更好的方式是结合文件路径 符号索引 函数调用 测试文件 README 错误日志。5. 会议纪要和聊天记录这类资料口语化、重复多、上下文强。建议先做整理按会议切分 标出时间 标出角色 提取决策和待办 保留原文引用。否则模型很容易把讨论过程当成最终结论。RAG 的评估指标不要只看“答案像不像”。RAG 至少要分开评估检索和生成。指标看什么召回率正确资料有没有被找出来精确率找出来的资料是不是相关引用准确性答案引用是否真的支持结论忠实度是否只基于资料回答完整性关键点有没有漏拒答能力资料不足时会不会说不知道一个 RAG 系统可能答案很好看但引用完全不支持结论。这种系统不能用于严肃场景。测试时可以准备三类问题资料里明确有答案 需要跨多个片段整合 资料里没有答案。第三类特别重要。一个不会拒答的 RAG 系统迟早会出问题。RAG 常见架构选择轻量个人版适合个人知识库和本地资料问答。本地文档 本地 embedding 本地向量库 本地模型或云端模型 简单界面。重点是方便不追求复杂权限。团队知识库版适合几十人内部使用。统一文档源 增量索引 权限过滤 引用来源 反馈按钮 管理员重建索引。这里权限非常关键。检索阶段就要过滤无权限资料不能等答案生成后再删。生产业务版适合嵌入业务系统。评估集 灰度发布 监控告警 答案质量抽检 失败兜底 敏感内容处理 版本回滚。这时 RAG 已经不是 demo而是一个需要持续维护的系统。RAG 和微调怎么选很多人会问我应该做 RAG还是微调模型简单说需要引入事实资料优先 RAG 需要改变输出风格或固定任务能力考虑微调 资料经常更新优先 RAG 需要模型学会某种格式微调可能有用 需要引用来源RAG 更合适。比如公司制度问答制度会变还需要引用原文RAG 更合适。比如客服回复风格统一、分类标签稳定微调可能有价值。很多真实系统会两者都用RAG 提供资料微调或 prompt 约束输出风格。最终结论RAG 不是一个神秘概念它就是先从资料库里找相关内容 再让大模型基于这些内容回答。大模型需要 RAG是因为它本身不是你的实时资料库也不天然知道你的私有文档。但 RAG 也不是万能解药。它的效果取决于文档解析 切分策略 检索质量 模型能力 prompt 约束 引用和校验机制。如果你刚开始学别急着搭复杂架构。先拿 5 份文档、10 个问题测一遍召回和答案。你会很快理解 RAG 的本质不是让模型变成资料库而是让模型学会带着资料说话。