
1. 为什么我要做这个专栏从三次翻车说起去年秋天我帮一个做工业设备维保的团队搭知识库问答系统。他们的需求听起来特别朴素把三千多份PDF格式的检修手册、故障代码表和工单记录灌进去让一线工程师用自然语言提问系统给出准确答案。我当时的反应是这不就是RAG的经典场景吗拍着胸脯说两周交付。结果第一版上线当天就翻车了。工程师问3号压缩机报E047怎么处理系统检索出来的却是E047传感器更换步骤——答案本身没错但那是另一台型号的设备。问题出在切块策略上我把所有PDF按固定500字符切分导致设备型号这个关键上下文被切到了相邻块里。这是第一次翻车教会我一个道理RAG的瓶颈从来不在模型而在数据进入向量库之前的那段路。第二次翻车是在评测环节。我自认为检索效果不错随手抽了二十个问题测了一下命中率挺高就交付了。客户用了两周后反馈越用越不准。我回去一查发现我测的全是手册里能直接搜到原句的问题而真实用户的提问方式是口语化的、带错别字的、甚至隐含了多轮上下文的。我的评测集和真实分布完全脱节。这是第二次翻车让我意识到没有科学评测的RAG项目等于闭着眼睛开车。第三次翻车最有意思。客户后来提出要支持图片——他们的手册里有大量电路图和爆炸图工程师希望能拍一张设备照片问这是哪个部件。我一开始想当然地以为向量库只能存文本差点建议客户放弃这个需求。后来深入研究才发现多模态检索这条路早就通了只是我自己的知识停留在纯文本时代。这是第三次翻车也是促使我系统梳理整个RAG技术栈的直接原因。这三次翻车经历基本覆盖了RAG落地过程中最容易踩的坑数据预处理、检索评测、多模态扩展。市面上讲RAG的文章不少但大多停留在调个LangChain、接个向量库、跑通Demo的层面真正讲清楚为什么这么设计哪里会出问题怎么评测的内容很少。这就是我做《RAG进阶实战》这个专栏的初衷——不写入门科普只写那些真正落地过、踩过坑、验证过的经验。这个专栏适合三类人一是已经跑通过RAG Demo、但效果不稳定的开发者二是正在做企业级知识库、需要系统方法论的技术负责人三是对RAG架构设计、评测体系、多模态扩展感兴趣想少走弯路的从业者。如果你还在纠结什么是向量数据库那这个专栏可能偏深了但如果你已经在问为什么我的召回率上不去那这里的内容应该对你有用。2. 专栏的整体架构设计从MVP到生产级的四层递进2.1 为什么不做从零到一的线性教程我见过太多RAG教程是按安装依赖→加载文档→切块→嵌入→检索→生成这条线走的。这条线本身没错但它有个致命问题它假设每一步都是独立的、线性的、一次做对的。而真实的RAG项目是高度耦合的——切块策略会影响检索效果检索效果会影响评测指标评测指标又会反过来指导切块策略的调整。你不可能先做完切块再想检索。所以这个专栏的架构不是线性的而是分层递进的。每一层解决一类核心问题层与层之间有明确的依赖关系但同一层内部的各个技术点是可以并行探索的。具体分四层层级核心问题关键产出对应章节第一层数据层文档怎么进库高质量切块与元数据方案第3章第二层检索层怎么找得准混合检索与重排策略第4章第三层评测层怎么知道好不好可复现的评测集与指标第5章第四层扩展层怎么应对复杂场景多模态与知识图谱融合第6章这个分层的好处是你可以根据自己项目的成熟度直接跳到对应的层级。如果你的Demo已经跑通但效果差直接从第二层开始看如果你连数据怎么切都没想清楚那就从第一层老老实实做起。2.2 MVP框架的边界什么该做什么坚决不做热词里出现了mvp框架这个词在RAG语境下特别值得聊。我的观点很明确RAG的MVP不是功能最少而是验证核心假设的最小闭环。很多团队做MVP时容易走两个极端。一个极端是什么都做——上来就搞多路召回、重排、知识图谱、Agent编排结果三个月过去了还没上线。另一个极端是什么都不做——直接拿LangChain的默认配置跑一遍发现效果不行就断定RAG不靠谱。我定义的RAG MVP应该包含且仅包含以下要素一个真实的数据源不要用网上的公开数据集用你自己业务里最典型的100份文档。因为公开数据集的分布和你的业务分布完全不同测出来的效果没有参考价值。一套可解释的切块策略能说清楚为什么这么切而不是默认参数就是这样。一个基础检索链路向量检索即可先不上混合检索和重排。一个最小评测集50到100个真实问题带标准答案能算出召回率和准确率。一个明确的失败案例库把检索错的、答偏的案例记下来这是后续优化的金矿。MVP阶段坚决不做的事情不做多轮对话、不做权限管理、不做前端界面美化、不做多模态。这些不是不重要而是它们会分散你对核心假设的注意力。RAG的核心假设只有一个你的文档里确实有答案且向量检索能找到它。如果这个假设不成立后面做再多都是白搭。2.3 专栏的更新节奏与配套资源这个专栏我计划按每两周一个深度主题的节奏更新每个主题配一篇主文加若干补充笔记。主文讲透原理和设计决策补充笔记记录实操中的具体命令、参数和踩坑记录。配套资源方面我会提供三样东西一是可复现的评测集模板包含问题设计规范、标注格式和指标计算脚本二是切块策略对照表把常见的几种切块方式在不同文档类型上的表现列出来三是架构决策记录模板帮你在团队内部把为什么选这个方案讲清楚。这些东西不会直接给答案而是给你一个思考框架让你能根据自己的业务场景做判断。3. 数据层切块、元数据与知识库类型的选型逻辑3.1 切块策略不是调参是信息架构设计回到我开头说的第一次翻车。固定500字符切块为什么失败因为它假设信息是均匀分布的而真实文档的信息密度是极不均匀的。一份检修手册里安全警告可能占了大段篇幅但信息量很低故障代码对照表可能只有几行但每个字都关键。我现在用的切块策略是语义切块加结构切块混合。具体做法是先用文档的天然结构标题、章节、表格边界做粗切保证每个块不跨越逻辑边界然后在粗切的基础上用嵌入模型计算相邻句子的语义相似度在相似度骤降的地方做细切。这样切出来的块既保留了结构完整性又避免了一句话被切成两半的问题。这里有个实操细节切块大小不要追求统一。技术手册的表格块可能只有100字符而叙述性章节的块可能有800字符。关键是每个块要能独立回答一个问题。你可以用这个标准来检验把切出来的块单独拿给一个没看过原文的人他能不能理解这个块在说什么如果不能说明这个块缺上下文需要合并或补充元数据。3.2 元数据设计被严重低估的检索增强手段大多数人做RAG时元数据只存个来源文件名。这是巨大的浪费。元数据在检索阶段可以发挥的作用远超你的想象。我现在的元数据方案包含四类字段来源标识文件名、页码、章节路径。用于答案溯源让用户知道答案从哪来。业务标签设备型号、文档类型、生效日期、版本号。用于检索时的硬过滤。比如用户问3号压缩机我可以在检索前先过滤出设备型号3号的块把检索范围缩小80%。语义标签文档主题、关键实体、内容类型步骤/警告/参数表。用于重排时的加权。比如用户问怎么处理步骤类内容的权重就应该调高。质量标签文档置信度、最后审核日期、是否过期。用于过滤低质量内容。这套元数据方案的关键在于它把一部分语义理解的工作前置到了数据层。与其让向量检索去猜这个块是不是关于3号压缩机的不如直接在元数据里标好检索时直接过滤。这比任何重排模型都可靠。3.3 RAG知识库、KG知识库与结构化知识库的边界热词里有个很好的问题kg知识库、rag知识库和结构知识库区分以及应用场景。这个问题我在实际项目中反复被问到这里给出我的判断框架。RAG知识库的本质是非结构化文本的语义检索。它擅长处理叙述性、解释性、步骤性的内容。比如这个故障怎么排查这个参数是什么意思。它的弱点是不擅长精确的数值计算、不擅长多跳推理、不擅长处理强结构化关系。KG知识库知识图谱的本质是实体和关系的精确表示。它擅长处理谁是谁的上级哪个部件属于哪个系统A故障会导致B故障这类关系型问题。它的弱点是构建成本极高且难以覆盖长尾知识。结构化知识库比如SQL数据库、Excel表的本质是精确的字段查询。它擅长处理上个月故障率最高的设备是哪台这类聚合统计问题。我的建议是不要试图用一种知识库解决所有问题。一个成熟的系统往往是三者组合RAG负责回答怎么做KG负责回答是什么关系结构化库负责回答是多少。专栏的第6章会详细讲这三种知识库的融合架构包括怎么让RAG的检索结果去KG里做关系补全怎么让结构化查询的结果作为RAG的上下文。3.4 图片存储RAG知识库到底能不能存图热词里rag知识库能存储图片嘛这个问题答案是能但存法和你想的不一样。向量库本身存的是向量不是原始文件。图片要进RAG有三条路第一条是图片描述法用多模态模型给每张图生成一段文字描述把描述文本嵌入向量库。检索时匹配描述返回原图。这条路成本低但描述质量决定了检索上限。第二条是多模态嵌入法用CLIP这类模型直接把图片编码成向量和文本向量放在同一个空间里。检索时可以用文字搜图也可以用图搜图。这条路效果好但对向量库有要求且需要处理文本和图片向量的对齐问题。第三条是图文绑定法把图片和它周围的文本作为一个整体块处理图片本身不单独嵌入但检索到文本块时把图片一起返回。这条路最简单适合图片只是辅助说明的场景。我在工业手册场景里用的是第三条加第一条的组合图片和它的图注、上下文一起切块同时用多模态模型生成一段描述作为补充元数据。这样既保证了图文不分离又让图片内容可以被文字检索到。4. 检索层混合检索、重排与那些看起来很美的陷阱4.1 纯向量检索的天花板在哪里向量检索的核心优势是语义匹配——用户问设备发烫怎么办能匹配到温度过高处理流程即使两者没有一个字相同。这个能力确实强大但它有个明确的天花板对精确匹配和长尾实体的无力。我做过一个测试在三千份文档里搜E047这个故障代码。纯向量检索的召回率只有60%左右因为E047这种无意义字符串在嵌入空间里没有稳定的语义表示不同模型编码出来的向量差异很大。而加上BM25关键词检索后召回率直接拉到95%以上。这就是为什么我现在默认用混合检索向量检索负责语义召回BM25负责精确召回两路结果用RRF倒数排名融合合并。RRF的好处是不需要调权重对两路检索的分数尺度不敏感特别适合快速上线。4.2 重排模型什么时候值得上什么时候是浪费重排Rerank是RAG进阶的标配但我要泼一盆冷水不是所有场景都值得上重排。重排的本质是用一个更贵的模型对初步召回的Top-K结果做精细排序。它的收益取决于两个条件一是初步召回的Top-K里确实包含正确答案召回率够高二是正确答案的排名不够靠前排序有问题。如果初步召回根本没召回正确答案重排再强也没用如果初步召回的Top-3已经全是正确答案重排就是浪费算力。我的经验法则是先测召回率再决定要不要重排。如果Top-20召回率低于80%优先优化切块和检索策略别急着上重排。如果Top-20召回率超过90%但Top-3准确率低那重排的收益就很大。重排模型的选择上我实测下来小模型如bge-reranker-base在大多数场景下已经够用大模型如bge-reranker-large的边际收益有限但延迟增加明显。如果你的QPS要求高建议先用小模型把省下来的算力用在更好的切块上。4.3 检索瓶颈的三种典型症状与对应解法热词里rag瓶颈这个词很值得展开。我把常见的检索瓶颈归纳为三种症状每种对应不同的解法症状一答案在库里但就是搜不出来。这是召回问题。解法优先级优化切块让答案块更完整 补充元数据过滤缩小检索范围 增加检索路数混合检索 换嵌入模型。症状二搜出来了但排不到前面。这是排序问题。解法优先级加重排模型 调整元数据权重 优化查询改写。症状三搜出来的都对但拼在一起答非所问。这是生成问题不是检索问题。解法优化Prompt模板、控制上下文长度、增加答案引用约束。这三种症状的排查顺序不能乱。很多人一上来就换嵌入模型其实大部分时候问题出在切块上。我的建议是每次只改一个变量改完立刻用评测集验证。否则你永远不知道是哪个改动起了作用。4.4 查询改写一个被低估的免费提升手段在检索之前加一步查询改写是我实测下来投入产出比最高的优化手段之一。具体做法是用户输入原始问题后先用一个小模型把它改写成更适合检索的形式。改写策略包括去口语化这玩意儿咋整改成如何处理、补全上下文多轮对话中把它替换成具体实体、扩展同义词发烫扩展为发烫 过热 温度过高、拆解复合问题A和B有什么区别拆成两个独立查询。这一步的成本很低——一个小模型跑一次改写延迟增加不到100毫秒。但效果提升很明显我在几个项目里实测查询改写能让Top-5准确率提升10到15个百分点。而且它和切块、重排是正交的可以叠加使用。5. 评测层没有评测集的RAG项目等于裸奔5.1 评测集构建从真实问题出发而不是从文档出发热词里agent评测集构建是个好切入点。我见过太多团队构建评测集的方式是打开文档找一段话根据这段话编一个问题。这种方式构建出来的评测集测的是检索系统能不能找到这段话而不是系统能不能回答用户的真实问题。正确的做法是从真实问题出发。具体步骤收集真实问题从客服记录、工单系统、用户群聊里捞至少200个真实提问。这些问题的价值在于它们的分布是真实的——有口语化的、有带错别字的、有隐含上下文的。标注标准答案对每个问题人工标注它应该匹配哪些文档块以及最终答案应该是什么。这一步最耗时但绝对不能省。分层抽样把问题按难度分层——简单直接匹配、中等需要语义理解、困难需要多跳推理。评测集里三层的比例应该和真实分布一致。定期更新业务在变用户问题也在变。我建议每季度更新一次评测集把新出现的典型问题加进去。评测集的规模不需要很大100到200个高质量问题就足够指导优化方向了。关键是质量不是数量。5.2 指标选择召回率、准确率、MRR到底看哪个评测指标的选择取决于你当前优化的阶段。我的建议是分阶段看不同指标优化阶段核心指标辅助指标说明数据层优化Top-20召回率块完整率先保证答案能被召回检索层优化Top-5准确率MRR再保证答案排得靠前生成层优化答案准确率引用准确率最后保证生成的答案对整体验收端到端通过率平均延迟综合评估这里特别说一下MRR平均倒数排名。这个指标衡量的是正确答案的平均排名对排序优化特别敏感。如果你的Top-5准确率不错但MRR很低说明正确答案虽然在前五里但排名靠后这时候上重排的收益就很大。还有一个容易被忽略的指标是引用准确率系统给出的答案是否真的来自它引用的文档块。这个指标在合规要求高的场景里特别重要。我见过系统答对了但引用错了的情况这在医疗、法律场景里是致命的。5.3 评测自动化怎么让评测跑起来不费人人工评测准确但不可持续。我的做法是分层自动化召回率评测全自动因为标准答案是应该匹配哪些块这是确定性的脚本可以直接算。答案准确率半自动用一个大模型做裁判判断生成的答案和标准答案是否语义一致。裁判模型会有误差但可以通过人工抽检校准。引用准确率全自动检查答案里的引用标记是否真的指向了检索到的块这是确定性的。这套自动化评测跑一次全量评测集大概需要十几分钟成本可以接受。关键是它能让你在每次改动后立刻看到指标变化形成改动→评测→决策的快速闭环。5.4 那些评测中的反直觉发现做评测多了会遇到一些反直觉的现象。分享三个我印象最深的发现一增加检索块数量不一定提升效果。我一度以为Top-10比Top-5好因为召回率更高。但实测发现当Top-10里混入太多不相关块时生成模型反而容易被干扰答案准确率下降。现在我的默认配置是Top-5检索加Top-3重排。发现二更贵的嵌入模型不一定更好。我在一个中文工业文档场景里对比过几个嵌入模型结果一个中等规模的模型在领域内表现最好因为它的训练数据里工业语料占比更高。模型选型要看领域匹配度不是看排行榜。发现三评测集里的简单问题最有价值。我一开始觉得简单问题测不出东西后来发现简单问题的失败往往暴露的是最基础的工程问题——切块切错了、元数据标错了、检索路数配错了。把简单问题全部答对系统的基础就稳了。6. 扩展层多模态、知识图谱与Agent编排的融合路径6.1 多模态RAG图片检索的三种落地形态第3章讲了图片怎么存这里讲图片怎么用。多模态RAG在实际项目里有三种落地形态形态一图作为答案。用户问这个部件长什么样系统检索到相关文本块返回关联的图片。这种形态最简单本质还是文本检索图片只是附加输出。形态二图作为查询。用户拍一张设备照片系统检索出这个设备的名称、型号、相关文档。这种形态需要图片嵌入模型把图片编码成向量去检索文本向量库。技术难点在于图文向量的对齐。形态三图作为推理依据。用户问这个电路图里哪个是保险丝系统需要理解图片内容并定位。这种形态需要多模态大模型参与成本最高但能力最强。我的建议是从形态一开始验证需求真实性后再往上升级。很多团队一上来就想做形态三结果发现用户根本不需要那么复杂的功能。6.2 Ontology RAG知识图谱不是替代RAG是补全RAG热词里ontology rag是个前沿方向。我的理解是Ontology RAG的核心思想是用本体Ontology来约束和增强检索。传统RAG的检索是扁平的——所有块都在同一个向量空间里靠相似度排序。而Ontology RAG会先定义领域本体比如设备-部件-故障-处理方案这套关系然后把文档块映射到本体上。检索时系统不仅看语义相似度还看本体上的关系路径。举个例子用户问3号压缩机的E047故障怎么处理。传统RAG可能检索到E047故障处理这个块但不知道它属于哪台设备。Ontology RAG会沿着3号压缩机→属于→某型号→有故障→E047→处理方案这条路径检索保证答案的设备上下文正确。这条路的效果确实好但构建成本高。我的建议是在领域关系特别重要、且文档量足够大的场景下才考虑。小规模场景用元数据过滤就能达到类似效果。6.3 Agent编排RAG从问答到做事的跨越热词里rag智能体和agent评测集构建都指向同一个趋势RAG正在从检索加生成的固定流程演化为Agent自主编排的灵活流程。传统RAG的流程是固定的检索→重排→生成。而Agent RAG的流程是动态的Agent根据问题决定要不要检索、检索几次、要不要调用工具、要不要追问用户。这个跨越的价值在于它能处理传统RAG处理不了的复杂任务。比如帮我对比3号机和4号机的故障率并给出维护建议传统RAG只能检索到两段文本然后拼在一起而Agent RAG可以分别查询两台设备的故障记录、调用统计工具计算故障率、再生成对比建议。但Agent编排也带来了新的评测难题流程不固定怎么评测我的做法是评测最终结果不评测中间步骤。只要最终答案正确、引用准确、延迟可接受中间走了几步不重要。当然对于关键步骤比如工具调用还是要单独监控成功率。6.4 本地化部署Mac上搭建RAG知识库的实操要点热词里怎么在mac上搭建rag知识库和有没有本地的rag文本拆解工具反映了很强的本地化需求。我自己的开发环境就是Mac这里分享几个实操要点。向量库选择本地开发推荐Chroma或Qdrant的本地模式安装简单Python API友好。数据量超过百万级再考虑Milvus。嵌入模型本地跑嵌入模型推荐用Ollama加载Mac的Metal加速对中小模型支持很好。如果追求效果可以用API调用但要注意数据合规。文本拆解工具本地拆PDF推荐PyMuPDF速度快、对表格支持好。拆Word用python-docx。拆HTML用BeautifulSoup。这些工具都是纯PythonMac上装起来没坑。一个容易忽略的点Mac的文件系统对大小写不敏感而很多向量库的集合名是大小写敏感的。我在本地测试时用Docs建集合部署到Linux服务器上用docs查结果查不到。这种坑在本地开发时很难发现建议从一开始就统一用小写命名。7. 我在专栏策划中想清楚的三件事第一件事专栏的价值不在于覆盖多少技术点而在于讲清楚多少个为什么。RAG的技术栈更新很快今天讲LangChain明天可能就有新框架。但为什么这么切块为什么要评测为什么混合检索有效这些底层逻辑是稳定的。我宁愿少讲几个工具也要把每个决策背后的逻辑讲透。第二件事实战经验必须包含失败案例。我翻过很多RAG教程几乎全是这样做就对了很少有人讲我这样做错了错在哪。但恰恰是失败案例最有价值因为它能帮你避开同样的坑。这个专栏里我会尽量多分享翻车经历包括那些最后没解决的难题。第三件事评测要贯穿始终而不是最后补。我见过太多项目把评测当成验收环节结果发现效果不行时已经来不及改了。正确的做法是从MVP阶段就建评测集每次改动都跑评测让数据驱动决策。这个专栏会把评测作为一条主线贯穿数据层、检索层、扩展层的每一个环节。最后分享一个我在策划过程中反复提醒自己的原则不要为了显得专业而堆砌术语。RAG领域的新词很多——混合检索、重排、Ontology、Agent编排——但术语本身不创造价值解决问题才创造价值。如果一段内容不能用大白话讲清楚那说明我自己还没想明白。这个专栏的每一篇我都会用能不能讲给一个刚入行的同事听懂来检验自己。