1. 为什么Agent需要一条知识获取管道先讲一个我实际遇到过的场景。半年前我在做一个企业内部的问答Agent模型用的是某个通用大模型知识库是几十份产品文档和售后工单。一开始大家很乐观——大模型什么都知道直接把文档喂进上下文不就完了结果上线不到两天就翻车了。翻车的原因不是模型不够强而是它根本拿不到正确的知识。你问它“某个旧版本客户端的导出功能在哪个菜单下”它可以一本正经地编一个根本不存在的位置。这不是模型笨而是它训练时压根没见过你们公司的文档。通用大模型的知识是“截止到某个时间点的公共知识”企业内部那些几万字的操作手册、埋在各种表格里的产品参数它对它们一无所知。所以AI Agent在解决具体问题之前必须先解决一件事怎么把外部知识准确、高效地送到模型面前。这条通路就是知识获取管道。目前业界最主流的实现方式就是RAG——Retrieval-Augmented Generation检索增强生成。如果把Agent比作一个刚入职的员工大模型是他的大脑RAG就是给他配的档案室。这个档案室不只是堆资料还得有索引、有分类、有快速调阅的能力。没有档案室这个员工再聪明也只能靠自己的“常识”猜着回答。有了档案室他回答之前先翻资料答案才有依据。这一篇我就把这条管道的里里外外拆开讲清楚包括每个环节的工作原理、关键参数怎么定、实际跑通后会踩到什么坑。这篇文章适合两类人一类是想给Agent加知识库能力但没系统梳理过RAG的开发者一类是已经在用LangChain或类似框架跑RAG、但总感觉检索结果不稳定的同学。看完你应该能理解这套管道每个阀门的作用也能自己动手调优而不是黑盒试错。2. 先拆开看看RAG管道的五个核心阀门RAG这个词看起来挺高大上其实背后的逻辑非常朴素先找到相关资料再把资料和问题一起交给模型生成答案。整个流程拆开看就是一条流水线我习惯把它分成五个核心环节。2.1 文档加载与清洗垃圾进垃圾出第一步是把知识源“读”进来。常见来源是PDF、Word、Markdown、HTML网页、数据库导出的文本甚至是音频转写后的文字。这一环节看起来最简单其实是整个管道里最容易被低估的一步。我见过太多人在这上面吃亏PDF排版复杂的比如双栏、表格、页眉页脚混排直接解析出来经常是一团乱麻——文字顺序错乱、表格变成一行行碎片、页眉夹杂在正文中间。要是把这种数据直接切块后向量化检索出来的片段往往前言不搭后语。我的建议是文档加载前先做一轮清洗规则至少包含去空白页、去重复段落、修正编码乱码、过滤页眉页脚。如果文档格式非常重要优先尝试专用的解析器而不是依赖通用文件读取库。图片型PDF需要OCR这个务必在管道设计阶段就留出接口别等到上线才发现文档里全是扫描件。2.2 文本切分粒度决定检索效果的上限文本切分是RAG里最讲究手感的环节。一本几十页的文档你不能把它整体塞进向量数据库模型上下文装不下检索也不精确但切得太碎也不行比如把一句话切成一个片段信息又不完整。我常用的切分策略是按“语义完整单元”来切优先用Markdown标题、章节号作为边界。比如一篇有#一级标题、##二级标题的文档我会先按##来划分大块再根据长度决定是否继续下探。没有结构标识的纯文本就按段落切段落太长再按句号做二次分割。切分粒度直接影响后续检索的命中质量。块太大检索出来的片段会掺杂大量无关信息影响生成准确性块太小又容易丢失上下文语义。我一般会把块的大小控制在300到800个token之间重叠率设置10%到15%。这个重叠不是可有可无的它能让边界处的上下文保持连贯避免语义被拦腰截断。2.3 向量化嵌入把文字变成坐标机器不理解文字它只理解数字。向量化嵌入Embedding的作用就是把一段文字映射到一个高维空间里的一个点语义相近的文字在空间里的距离也近。这么一来“怎么找回相关文档”就变成了“怎么找出空间里最近的几个点”。选嵌入模型时中英文混合场景要特别注意。有些通用嵌入模型对中文支持很好但对英文一般或者反过来。最好在你的真实语料上各测一批问题看哪组模型检索出来的结果最贴合预期。别只看公开榜单得分那些分数是通用数据集的未必代表你领域里的表现。如果团队有预算和精力可以在自己的知识库上微调一个领域嵌入模型效果提升通常是明显的。但这不是入门阶段的必修课先用好通用模型把管道其余部分调顺了再考虑这一步。2.4 向量存储与索引备好一个能快速查找的档案柜向量化之后所有文本片段都变成了高维向量。接下来需要一个专门的存储系统——也就是向量数据库——来保存这些向量并支持高效的相似度检索。市面上主流的向量数据库有Milvus、Qdrant、Weaviate、Chroma等还有像PostgreSQL加pgvector或Elasticsearch加向量插件这种“在传统数据库上扩展”的方案。选型时核心看几个指标数据量级、查询并发、是否需要与其他元数据过滤配合。几十万条向量的规模方案选择非常宽裕不用过度纠结。我个人建议刚起步时先别引入独立部署的向量数据库复杂度会直接翻倍。先用一个支持向量检索的轻量方案把流程跑通等数据量和并发上来了再迁移到独立向量数据库不迟。架构上把存储访问封装成接口后面换存储后端业务代码不用大改。2.5 检索与生成最后这步决定回答长什么样检索环节本质上是把用户的问题也向量化然后在数据库里找出与它最相似的若干片段。这个“若干”就是常说的Top-KK值的选择很关键K太小可能漏掉重要信息K太大噪声片段会稀释关键信息。我一般从K4或K5开始调根据生成效果上下浮动。把检索出来的片段拼装成Prompt时顺序也有讲究。最相关的片段应该放在离问题最近的位置也就是Prompt尾部。很多模型的注意力机制对靠近末尾的内容更敏感这一点在长上下文场景下尤其明显。生成的环节看似是大模型的工作但Prompt怎么写直接决定回答质量。我不会简单地写“请根据以下资料回答问题”而是会明确告诉模型只能依据给定资料作答资料中没有的信息要明确说不知道不要自行补充。3. 检索质量翻车现场我从“看似正常”到“稳定可用”的调优记录理论讲再多不如看一次真实的翻车过程。我把自己调优一个客服知识库RAG系统的过程复盘一下。这个知识库大约有三千多篇文档内容是产品FAQ、售后排查手册和版本更新日志。第一版管道跑通之后我信心满满地拿了一批测试问题去验证结果惨不忍睹。3.1 问题一检索到的片段确实相似但答非所问我提了一个问题“手机连不上公司Wi-Fi如何排查”检索回来的Top-5片段里有三段都在讲“如何配置Wi-Fi”这跟“连不上如何排查”在语义上确实相关向量距离也近但一个是配置指导一个是故障排查任务性质完全不同。模型依据这些片段给出的回答自然偏向配置说明而不是排查步骤。这个问题出在只有向量检索、缺少意图引导上。我做的调整是在问题输入检索前加了一步轻量的问题改写——把口语化问题先归类到意图模板里。其实没有引入多复杂的分类模型就用规则加少量样本分类识别出“连接失败”“无法上网”“频繁断线”等故障关键词再结合向量检索命中的文档类型标签做二次筛选。改完之后检索准确率明显回升。3.2 问题二多个知识源互相矛盾模型编了一段“缝合答案”知识库里有一篇旧版产品说明写着“支持自动备份”但另一篇新版升级日志又说“默认关闭自动备份功能需手动开启”。问“这款软件是否支持自动备份”时模型把两篇都检索回来了然后生成了一段含糊其辞的答案既说“支持”又建议“可能需要手动开启”等于什么都没说。这个问题在RAG里很典型根因是知识库里存在版本冲突。处理方式是两层第一层在文档预处理阶段就做好版本标记建立元数据过滤规则检索时直接排除已下线的旧版本第二层在Prompt中增加约束告诉模型遇到资料不一致时要指出信息冲突而不是自行调和。这两招虽然不能根治所有矛盾但能让模型暴露问题而不是掩盖问题。3.3 问题三检索命中率不低但Answer的引用位置经常错这是我当时花费最久排查的问题。模型给出的回答里有引用标注但引用指向的文档编号和实际内容对不上。查了一圈发现不是生成环节的错而是切分环节的锅——我的切分器把文档编号和正文切到了不同块里导致向量化后编号与内容的关联被切断检索召回了内容片段但对应的编号信息不在返回结果里。后来我把切分逻辑改为文档编号、标题等元信息在切分时强制跟随正文块而不是单独成块。这就是一个典型的“管道上游小问题下游放大成怪故障”的案例。排查这类问题一定不要只盯着生成结果看要从后往前沿着管道一级级检查数据流。3.4 问题四效果波动大同一个问题上午和下午回答不一样这个现象一度让我怀疑模型是不是抽风了。后来定位到是文档更新后向量索引没有同步重建造成了新旧版本数据混存。知识库不是静态的文档会更新向量库里就会同时存在旧向量和新向量。我的处理方案是建立文档版本与向量索引的映射关系每次文档更新时先删除旧版本对应的向量再写入新向量。检索时通过元数据指定只查有效版本。这条经验非常实用任何长期运营的RAG系统都绕不开知识更新问题。4. 管道之外的隐形组件元数据、重排序与上下文管理核心五步只是RAG的骨架实际工程中决定体验好坏的往往是一些“边上”的组件。这一节讲三个让我受益最多的组件它们都不是标准RAG流程里的必选项但加入之后系统可用性提升了一个级别。4.1 元数据过滤让检索不再把整个数据库翻一遍元数据就是描述数据的数据比如文档的来源、部门、时间、版本、类型。给每个文本块打上元数据标签后检索时可以先按元数据过滤掉候选集再做向量相似度计算。我的经验是这能显著提升检索精度同时减少无效计算。举个例子一个跨区域的售后知识库用户问题带有“华东区”这个限定词。如果向量检索直接在全部文档里找相似可能会命中其他区域的流程文档。加上区域字段的预过滤后候选范围直接缩小了几分之一命中率自然更高。元数据过滤的设计要趁早最晚在文档加载阶段就要确定标签体系。等向量库里存了几百万条数据再补标签来回清洗的成本会高得让人崩溃。4.2 重排序向量检索的“第一轮海选”不等于最终答案向量检索返回的Top-K结果是按向量距离排的。但“向量距离近”不代表“就是用户想要的答案”。这是RAG一个很微妙的地方——粗排求的是“不能漏掉潜在正确项”而最终进入Prompt的片段必须“高精度”。业界通行做法是引入一个重排序Rerank模型对粗排返回的候选片段做一次精细化打分。重排序模型通常是交叉编码器架构会把问题和片段拼接在一起过一遍模型考虑得比双塔向量模型更细致。我实际测试过的场景里重排序常常能把正确答案从第8、第9位提到前3位效果非常直观。加入重排序之后你可以把粗排的K值调大一些比如先取20个候选重排序后取前5个。这个策略比单纯把向量检索K值调大整体效果要稳定得多。4.3 让Agent真正“带着问题”去检索而不是机械地拼接到这里RAG还只是“一次检索一次生成”的简单管道。现实中很多问题没法一次检索就能找到答案比如用户问“帮我对比A和B两个方案的区别”你需要分别检索A相关资料和B相关资料再把它们组合起来。这时候单轮RAG就不够用了要进入Agent化RAG的范畴。我实践下来比较有效的模式是把检索工具封装成Agent可调用的函数Agent先分析用户意图再决定调用哪个检索接口、检索几次、如何汇总结果。比如遇到对比类问题它会分两次检索先查方案A的文档再查方案B的文档最后汇总对比。这个能力一旦加上RAG就不再是“一条管道”而是一个“有判断力的检索执行者”。从工程实现上看这一步可以把检索逻辑封装成Tool或Function集成到Agent框架里。前期不一定要上特别复杂的多智能体编排先把“基于检索结果的决策”做好就能覆盖大部分知识问答场景。5. 评估一条RAG管道别只看“答案对不对”评估RAG系统是个容易被忽略但极其重要的工程环节。很多团队把管道搭起来用几个内部问题试了试感觉效果不错就上线了结果一放到真实用户手里各种问题才暴露出来。RAG的评估至少要从三个层面分别看不然出了问题很难定位是哪一段的责任。5.1 检索质量先确认资料有没有找对检索质量最直接的指标是命中率。做法是准备一组测试问题每个问题都标注出知识库里对应的正确文档片段然后看系统检索返回的前K个结果里有没有包含这些正确片段。命中率低说明上游的切分、向量化、检索策略有问题生成结果再好也白搭。另一个指标是排序质量。模型把正确答案排到了第1位还是第9位体验完全不同。可以用MRR这类指标来衡量但在产品层面最简单的做法是人工查看一批检索结果的排序感受一下“正确答案平均在第几位”。如果普遍靠后优先调嵌入模型或加重排序。5.2 生成质量答案准不准引用能不能溯源生成环节的评估更复杂一些因为大模型生成的结果没有标准答案可对。我的做法是把评估维度拆成回答对问题的覆盖度、是否严格基于检索资料、有没有关键信息缺失、回答中的引用能否对应到检索片段。这些维度可以通过一份人工评估标注集来完成。引用溯源是我非常看重的一项。任何RAG系统都应该让用户能点开回答里的引用直接看到原始文档对应位置。这不仅是体验问题更是信任问题。如果引用是模型编造的用户发现一次就不会再信这个产品。5.3 端到端评估从用户视角看整体体验分模块评估完了最后还得做端到端测试。我的习惯是准备三类测试问题基础知识问答、多文档综合问答、知识库外的问题。分别看系统能否正确答出、能否整合多个文档的信息、能否诚实承认自己不知道。第三类特别重要很多系统在这上面翻车——明明知识库里没有相关材料它还是硬答一通。端到端评估的频率建议跟着版本走每次改切分策略、换嵌入模型、调整Prompt都要完整跑一遍回归。RAG系统是一套联动组件任何一个环节变化都可能让整体效果偏移。6. 从“能用”到“好用”的三个进阶方向基础RAG跑通之后如果还想让知识获取能力更进一步有三个方面值得投入。6.1 混合检索向量检索不是唯一的路向量检索擅长处理语义层面的相似但对精确关键词匹配、代码片段、产品型号这类信息表现反而不如传统的关键词检索。比如用户搜索“型号ABC-123的固件版本”如果向量化时这个词被泛化了精确匹配反而更容易命中。所以现在很多系统采用混合检索同时执行向量检索和关键词检索比如BM25或全文索引再把两路结果合并打分。合并的策略可以简单做加权也可以用Rerank模型统一精排。实测下来混合检索对“精确查询”和“模糊查询”混杂的真实业务场景稳定度比纯向量检索高不少。6.2 结构化知识从文档到知识的实体化纯粹基于文档块的RAG有一个天然局限文档是叙述性的信息被语言包裹着检索和引用都不够精确。进阶的做法是把文档中的部分信息结构化比如把产品参数抽取成表格、把故障现象和解决方案抽成“问题-对策”对。结构化的信息可以直接入库也可以作为RAG检索结果的增强补充。比如用户问“某某功能在哪个版本上线”如果有一张版本功能对照表这个问题的回答就变成查表而不是翻文档准确率是质的提升。这条路做起来费功夫但确实是RAG真正落到企业场景后绕不开的升级方向。6.3 Agent化检索让知识获取具备任务理解能力再往后就是我前面提到的Agentic RAG。检索不再是“查一次就返回”而是Agent根据用户目标制定检索计划、分步执行、动态判断结果是否足够。比如问到“帮我写一段售前方案”Agent会先检索产品资料、再检索典型部署案例、还可能检索行业方案模板最后组合成一份完整回答。这种模式对工程能力的要求明显更高但从体验上讲它更接近“配了一个会查资料的助理”。我建议先把基础管道和评估体系做好再逐步往这个方向演进。跳步容易翻车。这套管道走到这里骨架已经很清晰了。过程中最值得记住的一点是RAG不是某个单一模型或单一数据库的功劳它的效果取决于整条链路上每一个组件协同配合。我做过的每一次效果提升几乎都不是靠换一个大模型解决问题而是把切分、检索、排序、Prompt这些基础环节一处一处打磨出来的。 SEO 优化官网定制响应式建站教育培训建站