资讯动态

RAG第一篇:RAG 全景——从原理到实践

发布时间:2026/8/27 21:20:33 来源:尧图企业网站定制
前言大模型LLM很聪明但它有一个尴尬的问题训练完之后知识就定格了——它不知道训练之后发生的新事也不认识你公司的内部文档。更麻烦的是遇到不懂的问题它还会一本正经地编。RAGRetrieval-Augmented Generation检索增强生成就是解决这个问题的主流方案在回答之前先从外部知识库里检索相关资料再让大模型基于资料生成答案。本文是一篇 RAG 的全景图先不展开代码把三件事讲清楚RAG 到底是什么、为什么火原理RAG 和微调、长上下文怎么选决策RAG 的完整链路长什么样、怎么一步步落地实践路径一、先讲一个真实的场景理解 RAG先从一个最核心的问题出发为什么需要 RAG直接把问题丢给大模型不行吗要回答这个问题先得明白 LLM 天生有三个缺陷缺陷1幻觉 → 不懂的也敢编一本正经胡说八道 缺陷2知识过时 → 训练数据有截止日期新知识它不知道 缺陷3私有知识 → 你公司的内部文档、最新资料它根本没学过还是用中国载人登月任务举例。假设你的知识库里有这样一句话任务计划在2030年前执行将实现中国人首次登陆月球你问大模型用户载人登月任务什么时候执行没有 RAG 时大模型只会凭训练记忆回答可能答错、可能编造、可能说我不知道 2025 年之后的事。有 RAG 时系统会先从知识库里检索到那句最相关的话再让大模型基于它回答用户载人登月任务什么时候执行 知识库检索到的 - 任务计划在2030年前执行将实现中国人首次登陆月球 大模型根据资料中国载人登月任务计划在2030年前执行。看到了吗答案有依据、可追溯、不编造。这就是 RAG 的价值。二、RAG 是什么RAG 的英文全称R Retrieval 检索先找到相关资料 A Augmented 增强用资料增强回答的准确性 G Generation 生成再让大模型生成答案一句话定义先检索相关资料再让大模型基于资料回答而不是让它凭空发挥。2.1 完整链路图一个生产级的 RAG 系统完整链路是这样的┌──────────────────────────────────────────────────────────────┐ │ 离线阶段建知识库 │ │ │ │ 原始文档 → 解析 → 分块 → 向量化 → 存入向量数据库 │ │ (PDF/Word/表格) (提取正文) (切成小块) (转成向量) (建索引) │ └──────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────┐ │ 在线阶段回答问题 │ │ │ │ 用户提问 → 改写 → 检索召回 → 重排 → 组装 → 生成 → 评测 │ │ (补全意图) (找Top-K) (精选) (拼上下文)(回答) (打分) │ └──────────────────────────────────────────────────────────────┘整条链路分两大块离线阶段把文档变成可检索的知识库。核心产出是一堆向量以及支撑快速搜索的索引。在线阶段用户提问后把问题变成检索指令找到最相关的几段资料喂给大模型让它基于资料回答最后还要评测答得怎么样。三、RAG vs 微调 vs 长上下文怎么选这是理解 RAG 绕不开的对比题。先把三者说清楚RAG检索增强 给模型外挂知识库问的时候现查 微调Fine-tuning 把知识焊死进模型参数里改模型本身 长上下文Long Context把资料全部塞进 prompt让模型一次读完3.1 对比表维度RAG微调长上下文实现成本✅ 低不用改模型❌ 高要训练✅ 低改 prompt知识更新✅ 随时换资料❌ 更新要重新训练✅ 换 prompt 就行幻觉控制✅ 有资料兜底⚠️ 治标不治本✅ 有资料兜底可追溯性✅ 能指出处❌ 黑盒✅ 能指出处私有/最新知识✅ 强项✅ 强项✅ 强项上下文窗口✅ 只塞相关的省 token✅ 不占窗口❌ 全塞进去又贵又慢适合场景通用首选特定风格/领域深度小资料、单文档3.2 一句话总结RAG 是外挂知识微调是内化知识。RAG 改动小、成本低、可更新所以能上 RAG 就先上 RAG微调留给学风格、学专有表达这种 RAG 做不到的事。四、RAG 的演进Naive → Advanced → ModularRAG 并不是一步到位的它经历了三个阶段Naive RAG 检索 → 拼接 → 生成最朴素 缺点检索质量直接决定答案质量查不准就全崩 Advanced RAG 在检索前、检索后都做优化 检索前更好的分块、Query改写、混合检索 检索后重排、上下文压缩、去重 Modular RAG 把 RAG 拆成独立模块像搭积木一样自由组合 检索、记忆、路由、编排任意组合 → 面向复杂生产系统一句话总结演进逻辑Naive 是能用Advanced 是好用Modular 是可定制。五、RAG 的三大失败模式查不到、查不准、答不对RAG 做得不好问题往往出在三个地方模式1查不到 → 该检索到的资料没检索到召回问题 模式2查不准 → 检索到了但排在前面的不对排序问题 模式3答不对 → 资料对了但答案还是错的生成问题每个模式对应的根因和优化方向失败模式根因优化方向查不到分块不合理 / 只有向量一路分块策略 / 混合检索查不准向量语义近似≠精确相关重排序 Rerank查不准用户问得含糊 / 多轮指代Query 改写查不到文档解析丢了内容文档解析与清洗答不对上下文冗余 / 没有评估闭环后处理 评测全链路缺一个可运行的完整系统生产级实战这张表就是 RAG 优化的行动地图遇到问题先从查不到 / 查不准 / 答不对三个方向定位再对症下药。六、用 Go 代码画出骨架光看图不过瘾用代码把这条链路的骨架画出来。每一行代表一个阶段packagemainimportfmt// RAG 管线一张可运行的骨架 // 阶段1文档解析 —— PDF/Word/表格 变成纯文本funcparseDocument(pathstring)[]string{returnnil}// 阶段2文本分块 —— 切成合适大小的块块与块之间留 overlapfuncchunk(docs[]string,size,overlapint)[]string{returnnil}// 阶段3向量化 入库 —— 每个块转成向量存进向量数据库并建索引funcembedAndIndex(chunks[]string){}// 阶段0Query 改写 —— 把它那个补全成具体实体横切步骤funcrewrite(querystring)string{returnquery}// 阶段4检索召回 —— BM25 向量 双路召回RRF 融合funcretrieve(querystring,topKint)[]string{returnnil}// 阶段5重排序 —— Cross-Encoder 精选 Top-Kfuncrerank(querystring,candidates[]string)[]string{returnnil}// 阶段6上下文组装 生成 —— 压缩、去重、带引文funcgenerate(querystring,context[]string)string{return}// 阶段7评测 —— Faithfulness / Context Recall ...funcevaluate(query,answerstring)float64{return0}funcmain(){fmt.Println(RAG 完整链路)fmt.Println(解析 → 分块 → 向量化入库 → 改写 → 召回 → 重排 → 生成 → 评测)}这段代码现在跑不出任何结果——因为每个阶段都是空的。它的意义在于把 RAG 这条链路拆成一个个可以独立优化的小模块。后面你可以逐个把空函数填满最后串成一个能跑的生产级系统。七、RAG 全景自查20 个问题到这里RAG 的原理和实践路径已经清楚了。为了帮你检验自己是否真正理解我把 RAG 相关的 20 个核心问题按难度分层列出你可以逐个自问自答7.1 基础层理解 RAG 的本质1. RAG 是什么用一句话讲清楚 2. RAG 和微调的区别为什么优先 RAG 3. RAG 和长上下文怎么选 4. RAG 的完整流程画一下 5. 一个最小可用的 RAG 系统由哪些部分组成7.2 进阶层深入检索质量6. chunk 大小怎么定overlap 有什么用 7. 为什么向量检索对专有名词/精确匹配不友好 8. 混合检索怎么做BM25 和向量怎么融合 9. Bi-Encoder 和 Cross-Encoder 区别 10. Rerank 加在哪一步K 取多少 11. 多轮对话怎么处理它/那个这类指代 12. HyDE 是什么有什么坑 13. PDF/表格/扫描件怎么进库7.3 深度层原理与工程落地14. RAG 怎么评测RAGAS 四个指标是什么 15. 让 LLM 当裁判评测有什么坑 16. 召回太多、上下文太长怎么压缩 17. 回答怎么带引用、可追溯 18. 生产环境里 RAG 会踩哪些坑 19. 怎么判断一个 RAG 系统到底好不好 20. 从零到一落地一个 RAG 系统步骤是什么能把这些问题都答清楚你对 RAG 的理解就算真正到位了。八、总结本文是 RAG 的全景图记住五件事就够了1. RAG 检索增强生成先查资料再让模型基于资料回答 2. 它解决 LLM 三大缺陷幻觉、知识过时、不知道私有知识 3. 选型能上 RAG 先上 RAG微调留给学风格长上下文留给小资料 4. 演进Naive能用→ Advanced好用→ Modular可定制 5. 三大失败模式查不到 / 查不准 / 答不对各有对应的优化手段RAG 的核心就一句话别让大模型凭空发挥先给它喂最相关的资料。掌握了这条主线你就能顺着链路一步一步把每个环节做到位。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价