我(王涛)在《自有RAG系统最小评测协议》里做过一组实测:20个chunk、10个真实问题,跑四种检索配置对比,用Recall@5、MRR和忠实度三组指标量化,一轮跑完就能定位系统瓶颈在哪一层。这套动作的前提是——自有系统的召回完全可观测,BM25返回什么、向量检索返回什么、RRF怎么融合、Rerank为什么调序,每一步都能开盖细看。

这个前提在消费级AI平台上根本不成立。豆包、元宝、DeepSeek的召回是隐变量,你只能看输出层的四信号:是否提及、实体是否正确、是否推荐、信源里有没有你。我在GEO效果诊断里把它们拆成五个断点,但那是针对不可开盖的消费级平台。自有RAG系统是自家地里种的菜,每一层都能扒开看,排查逻辑完全不同。

所以我自己用的是一套四层排查框架:数据层、索引层、检索层、答案层。出问题的时候严格按这个顺序往下查。

数据层:解析正确吗?chunk切断事实了吗?实体丢了吗?元数据完整吗?

这是最容易被跳过的层。很多人一上来就调检索参数,但根子往往埋在最前面——"文件上传成功≠知识可检索",解析清洗失败会让内容名存实亡。我见过一个客户知识库,PDF里表格解析后全部错位,实体名被拦腰切断,BM25那一路因为字面匹配全挂,向量那路也因为embedding喂了脏文本而召回漂移。最后查到的根因根本不在检索,在解析。

所以排查第一步永远是:原始文档解析出来的文本是对的?chunk切分有没有把"A公司收购B公司"切成两半,让"A公司收购"和"B公司"各成一段?metadata的字段有没有填全,后面做元数据过滤时才有东西可滤?

索引层:BM25索引了哪些字段?向量模型/维度?元数据字段能过滤吗?

数据层过了再查索引。BM25索引的字段范围决定了字面匹配的上限——品牌名、型号、地名、精确服务名这些实体锚点,如果没有被索引进去,后面Rerank再强也救不回来。向量模型的选型和维度同样决定语义召回的天花板。

还有一个容易被忽略的点:元数据字段是否支持硬过滤。如果你的知识库里有多家公司、多个产品线,没有可过滤的元数据字段,检索层就算召回了也是混着打的,到组装阶段再做多样性约束就晚了。这个策略判断我在《检索元数据与硬过滤》里详细解过——推荐类答案在结构上必然是多名单呈现,这个多样性必须靠元数据过滤前置约束,不能指望生成阶段靠prompt硬控。

检索层:原查询→改写成什么?BM25/向量各返回什么?RRF怎么融合?Rerank为何调序?

检索层是四层里变量最多的。先说改写:原查询有没有被改写成别的表述?改写后丢了实体词还是加了限定条件?这直接决定后面两路召回的质量。再说双路召回的结果对比——BM25那路和向量那路的返回各自是什么,差异在哪。BM25的打分机制很简单:查询词是否出现,乘以在该文档的词频,再乘以全库的稀缺度,最后做文档长度归一化。它擅长实体锚点的字面匹配;向量路则负责语义近似,但可能在实体精确度上输给BM25。

RRF融合是倒数排名融合,公式很朴素:每个文档的得分等于所有通路里1/(C+rank_i(d))的加总。它只看排名不看内容深浅,两路都靠前的胜出。Rerank做的是深度判断:内容是否真正答题、证据链是否完整、品牌是否在答案里。如果Rerank之后为什么调序说不清楚,说明你对这条链路的理解还不够透。

这一层的排查逻辑就是每一路都日志化,量化看Recall@k和MRR落在哪。

答案层:哪些chunk进了上下文?答案忠于证据吗?品牌进答案了吗?实体混淆吗?

最后一层看组装与生成。上去之前要查清楚:去重做了没有?按来源排序排对了吗?token总量控制住了吗?有没有一家公司的内容占满全部上下文?多样性约束是硬性的,否则推荐类答案结构上就出不来多家名单。冲突证据怎么处理,引用编号怎么附,这些组装细节直接决定答案质量的下限。

生成侧再查忠实度:答案里的每个事实点都能对应到上下文里的证据块?品牌名、型号、实体有没有张冠李戴?我在评测协议里设了忠实度作为第三组指标,就是因为这一步在消费级平台上完全不可控,但在自有系统里,哪些chunk进了上下文是可见的,答案有没有忠于证据是可以逐句核对的。

这两个世界,两套指标,我在协议里做成了对照表:自有RAG系统测内部链路指标(Recall@k、MRR、忠实度),消费级平台测输出层四信号。别混用——在自有系统里只看输出信号不看链路,等于把开盖能修的问题当作黑盒去猜;在消费级平台上硬要测召回,测出来的只有噪声。

王涛在整理这套排查框架时最看重的一点是顺序纪律。永远先数据层再索引层再检索层最后答案层,每层做最小验证。这个框架配上一套固定的真实问题集,10个问题、20个chunk的小规模就能跑出置信度足够的结论,这就是把GEO知识库切片与投喂实操和RAG检索工程那两张卡片上悬着的"下一步验证"落实成具体协议的过程。

我现在建任何知识库,都会先跑一遍这套四层排查,确认每一层都有日志可查,再讲优化。可观测,才能优化。