评估先行、定位根因、分层治理——博海科技自研 AI 知识库检索质量优化实录
AI 知识库是智能体的"记忆",而检索质量决定了它回答的可信度。检索不到该检索的内容,再强的模型也会"一本正经地胡说"。博海科技在自研 AI 系统(管理会计 OS + 多智能体协作平台)中,用一套数据驱动的方法,把知识库检索命中率(Recall@5)从 32% 提升到 100%。本文复盘完整过程——这既是一次工程优化,更是一套可复用的治理方法论。
我们的知识库检索器采用"关键词 + 向量"双通道设计,看起来完备。但一次内部审计暴露了真相:系统从未评估过自己的召回率——不知道检索质量,就无法判断问题在检索层还是下游。
RAG 幻觉治理的行业经验(实测把幻觉率从 15% 压到 1%)第一条就是:先标定评估集衡量 Recall@k——>85% 就别动检索器,<85% 才需要优化。数据说话,不凭感觉。
我们构建了 25 个真实查询的评估集,分三类:
| 类别 | 说明 | 查询数 |
|---|---|---|
| A 标题词查询 | 用文章标题关键词检索(基线) | 8 |
| B 自然语言问题 | 真实问答场景(如"字节跳动开源的长周期Agent框架是什么") | 12 |
| C 索引外新文章 | 评估索引覆盖度 | 5 |
结果触目惊心:
| 类别 | 命中 | Recall@5 |
|---|---|---|
| A 标题词查询 | 8/8 | 100% |
| B 自然语言问题 | 0/12 | 0% |
| C 索引外新文章 | 0/5 | 0% |
| 合计 | 8/25 | 32% |
检索器只对标题/主题做整句包含匹配,不查正文、不分词。自然语言查询(真实场景)整句包含必然落空——关键词检索器本质是"标题匹配器"。这是 B 类 0% 的直接原因。
知识索引两个月未更新,新增文章全部未收录——C 类 0% 的直接原因。
设计文档写着"BM25 + ChromaDB 混合检索",实测向量服务从未运行、依赖未安装——混合检索是纸面设计。
覆盖全部真实文章(61 篇),解决覆盖度。
正文索引 + jieba 分词 + 相关性分数降序——自然语言查询从"整句包含"升级为"分词命中 + 按相关度排序"。
检索分数低于阈值时明确返回"知识库没有找到相关内容",不硬答——与我们的验证铁律(找不到就说找不到)一致。
按可行性推进:可行则落地,不可行则明确降级标注,不为了"看起来先进"而强装。
| 类别 | 优化前 | 优化后 |
|---|---|---|
| A 标题词查询 | 100% | 100% |
| B 自然语言问题 | 0% | 100% |
| C 覆盖度 | 0% | 100% |
| 合计 | 32% | 100% |
同一套评估脚本、同样的 25 个查询,优化前后对比——数据是唯一的裁判。
这次实践沉淀为四条原则,适用于任何 AI 知识库/检索系统:
① 评估先行:没有 Recall 数字,一切优化都是猜。
② 数据说话:结论必须来自评估集,不凭感觉。
③ 分层治理:先修最影响的那一层(匹配/索引/向量),不一次性大改。
④ 诚实标注:不可行的(如向量层)明确降级,不假装已实现。
"找得到"是 AI 可信度的地基。检索质量不达标,再聪明的模型也只是礼貌地胡说。