知识库能搜到,为什么还是答不准?

假设有人问:“我们正在用的这个版本,能不能处理扫描件?”

知识库搜到了三份材料:一份产品介绍、一份新版本说明,还有一份测试记录。模型读完以后回答:“支持,上传文件即可。”

听起来很顺。但再看一眼,产品介绍没有写版本,新版本说明说的是下个月准备发布的功能,测试记录只覆盖了一种文档。

问题出在哪里?材料确实找到了,可它们还不足以回答眼前这个问题。

先把“相关”和“能证明”分开

向量检索擅长寻找语义相近的内容。“扫描件识别”和“图片文字提取”即使没有共同关键词,也有机会被放到一起。

但语义相近不代表条件相同。用户问的是当前版本,而搜索结果可能属于另一个版本;用户问能否投入使用,资料可能只是概念验证。

因此,一条候选材料至少要过两道判断:它是否在谈这个问题,它是否能证明这个问题下的具体结论。

第一道判断适合交给检索和重排。第二道判断还需要版本、环境、适用范围和材料状态。

给知识补上使用条件

可以给文档或知识条目增加一些简单的字段:

1
2
3
4
5
6
7
product: example-product
version: "2.3"
environment: self-hosted
status: approved
source_type: release-note
effective_from: "2026-08-01"
source_url: "https://example.com/releases/2.3"

这只是示例结构,不是某个框架的固定配置。

其中 status 表示材料是否经过确认;它不能替代访问权限。访问范围应由服务端根据用户身份计算,并在检索前执行过滤,不能让模型自行决定哪些资料可以展示。

日期也有区别:文件上传日期、最近编辑日期和功能生效日期并不总是一回事。排序时只看“最近修改”,很容易让一篇刚修正错别字的旧文档压过新的发布说明。

把问题也拆成条件

面对“这个版本支持吗”,系统首先要知道“这个版本”是什么。

如果会话里已经提供了版本,可以继续使用,并在答案中写明。如果没有上下文,就先问一句版本号;也可以给出明确标注条件的分支回答。

一个最小处理过程可以是:

1
2
3
4
5
6
用户问题
→ 提取产品、版本、部署方式和任务
→ 按身份及已知条件筛选可用资料
→ 检索并重排
→ 检查每个结论是否有对应依据
→ 回答,或补问缺少的条件

遇到两份材料冲突时,不要单纯选得分高的一份。先核对适用条件和来源权威性;无法消除冲突,就把冲突和缺少的信息说清楚。

引用应该跟着结论走

“支持扫描件,最大 200 页,处理速度很快。[1]”这样的答案可能只有前半句能在引用里找到。

可以在内部先组织一个结论与证据的对应表:

待回答的内容 已有证据 合适的回答
是否支持扫描件 对应版本的发布说明明确支持 在指定版本与部署方式下支持
最多多少页 没找到适用配置说明 暂不能确认上限
处理速度 只有一份样本测试记录 给出测试条件及结果,不扩展为通用承诺

用户不一定需要看这张内部表,但最终答案应该保留这些边界。引用最好直接定位到相应章节,减少用户再次翻文档的成本。

没找到依据时,也可以给出有用的回答

只有一句“无法回答”,帮助不大。更好的回答可以是:

目前找到的说明适用于 2.3 版本,明确支持扫描件。你正在使用的版本还不清楚,因此暂时不能确认适用性。提供版本号后,可以继续核对。

这段话交代了已知事实、未确定的条件和下一步。模型没有必要靠补全一个看似完整的答案来结束对话。

另一个容易忽略的问题是资料里的指令。检索到的文档可能包含“忽略之前的规则”之类文本;文档只能作为数据使用,不能覆盖系统指令或授予工具权限。OWASP 的 RAG 安全指南 对权限隔离和检索内容的信任边界有更系统的说明。

从一个问题做起

刚开始不必收集几万份资料。选一个真实问题,把对应版本说明、可用证据、缺失条件和最终答案整理清楚,再检查另一个身份是否应该看到相同材料。

当这个过程可以重复,扩展资料范围才有意义。知识库的价值最终落在用户能否据此做出正确判断上,而不只是搜索结果里出现了多少段相关文字。

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2017-2026 Shadowalker
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信