知识库问答为什么只答了一半:沿证据链定位问题
目录
本文是基于虚构制度的教学推演,不是真实线上故障复盘;分数和参数均为示例设定。
同样是漏答,原因可能出现在不同环节
用户问:“培训环境的账号找谁申请,审批后多久能开通?”系统只回答了申请对象,没有给出时限。
这时增加 TopK 可能有用,也可能完全无效:正确片段可能排在第二名,也可能早已被门槛排除;它甚至可能已经出现在检索列表里,却没有进入最终请求。
只看答案,无法区分这些情况。排查要回到证据经过的路径:资料里有没有这个事实,检索是否取回,输入是否保留,模型是否忠实使用,引用是否支持结论。

先明确一次回答需要哪些事实
假设知识库中有三条虚构规则:
| 片段 | 示例内容 | 适用环境 |
|---|---|---|
| A | 向培训负责人提交申请,由培训负责人审批 | 培训 |
| B | 审批通过后,由管理员在 1 个工作日内开通 | 培训 |
| C | 向信息安全负责人申请,审批后 3 个工作日内开通 | 生产 |
这个问题需要 A、B 两条证据。判断回答是否完整,要检查申请对象、审批关系、开通前提、执行角色与时限,而不只是观察答案里有没有数字。
如果问题改成“账号何时自动过期”,三条资料都没有适用的期限依据。此时缺的是原始事实,调大候选数量并不能补出规定。
排查的第一步因此是写出问题需要的事实和预期证据。有了这张对照,后面才能判断某一步到底丢了什么。
正确片段被数量限制排除了
先构造一个可手工检查的排序。以下分数是教学设定,不是某个 Embedding 模型的真实输出:
| 片段 | 示例相关分数 | 培训范围检查 |
|---|---|---|
| C | 0.990 | 不通过 |
| A | 0.951 | 通过 |
| B | 0.848 | 通过 |
假设先排除范围不匹配的 C,再用 0.50 作门槛,按分数排序,并最多保留前 K 条。输入预算暂时足够。
K 为 1 时,A 入选,B 落选,时限证据缺失。K 改为 2 后,A、B 都能入选。在这个确定的教学规则下,增加 K 修复了证据覆盖。
这里能得出的结论仅限于这组规则。真实系统还可能分别设置初次召回数量、重排候选数量和最终证据数量。先确认自己改的是哪一步的数量,再判断它是否会改变最终输入。
正确片段在比较名次之前就被过滤了
保持同样的分数,把门槛从 0.50 提高到 0.90。B 的 0.848 低于门槛,已经被排除。此时即使 K 增加到 10,B 也不会重新出现。
漏答现象没有变,修改点却变了:需要检查门槛、编码与查询是否合适,而不能继续只改 K。

范围过滤也要检查。如果 B 被错误标成生产环境,或者新版资料被错误的生效条件排除,它同样可能消失。排查日志应记录具体排除原因,不能只留下最终几条候选。
同时,高分 C 不能因为“看起来更相关”就进入培训答案。适用环境与访问权限各有自己的判断依据:即使用户有权阅读生产规则,也不代表这条规则适用于培训问题。不能通过关闭权限控制来追求更高召回。
门槛是否合适,需要对具体编码、计分方式和问题集做验证。本文的 0.50 与 0.90 只用于展示筛选逻辑,不是上线建议。
检索列表里有 B,模型却没读到 B
候选入选后,还要经过输入组装。应用可能需要在上下文容量内保留任务说明、用户问题、历史消息和资料,因此会给证据分配预算。
如果 B 太长、与其他片段重复,或排在已经占满预算的内容后面,它可能没有进入请求。此时检索页面看起来是对的,模型仍然没有开通时限的依据。
应该检查实际发送的输入,而不是由检索列表推断模型看到了什么。原文中的完整规则是:
审批通过后,由管理员在 1 个工作日内开通。
只留下“1 个工作日内开通”还不够,因为计时前提被删掉了。切片和组装都要检查条件是否完整。按结构切分、调整片段长度、减少重复或补充相邻内容,各有适用情形;Microsoft 的切片说明提供了相关方法,但不能替具体资料决定最佳边界。

证据完整进入输入,答案仍然写错
如果请求里已经完整包含 A、B,答案却写成“3 天开通”,排查重点才转向生成与核验。
需要检查任务要求是否明确、是否混入其他环境或旧版本的证据,以及回答中的每个事实能否由对应原文支持。可以改进提示和示例、明确资料不足时的处理,也可以检查并拦下不满足要求的输出,但不能用“提示写得更严格了”代替复测。
引用也要单独查。回答可能引用 A,却给出了 A 从未规定的时限。带了出处不等于出处支持答案。ALCE 研究把流畅性、正确性和引用质量分别评价,这一划分也提示我们不要把“有引用”直接当成“已答对”。
把四个检查点分开记录
| 检查点 | 应保留什么 | 本例要核对什么 |
|---|---|---|
| 原始资料与版本 | 生效正文、来源位置、范围及权限条件 | B 是否存在,是否为培训环境的当前规则 |
| 候选与筛选 | 候选 ID、分数、顺序、排除原因 | B 是未召回、低于门槛,还是数量限制落选 |
| 最终输入 | 实际发送的资料正文与必要条件 | B 是否完整进入,审批前提有没有丢失 |
| 输出与引用 | 回答、事实对应的证据、缺失处理 | 时限是否忠实于 B,引用是否真的支持结论 |
这些是诊断需要的信息,不意味着应该把所有内部资料长期写入日志。记录范围、可见权限和保留期限仍需按实际数据要求处理。
沿着这些记录,可以把一次漏答定位成具体问题:
flowchart TD
Q[回答缺少时限] --> D{有效资料有时限吗}
D -->|没有| N[说明缺失并确认资料]
D -->|有| R{正确片段被取回了吗}
R -->|没有| F[检查解析 切片 编码与检索]
R -->|取回了| S{筛选后仍被保留吗}
S -->|没有| K[检查范围 门槛与数量限制]
S -->|保留了| I{完整进入模型输入了吗}
I -->|没有| B[检查预算 去重与组装]
I -->|进入了| G[检查生成偏离与引用支持]修改之后,用同一组问题确认变化
本文建议先固定问题、资料版本、条件和配置,留存修改前的证据与回答,再围绕已定位的原因做一次调整。
如果增加 K 后,A、B 都进入输入,这是证据覆盖的变化;如果回答也正确保留申请对象和时限,才进一步说明本题的答案得到了改善。两个结果应分别检查。
复测还应包括原本正确的问题、不同环境的干扰问题,以及资料没有答案的问题。降低门槛可能让 B 回来,也可能让无关片段进入;修好一个漏答,不代表整套问答都变好了。速度与成本需要另外测量,不能由回答是否顺畅推断。
知识库问答的漏答,常常要沿不同环节逐项排除。把失败定位到“哪条证据在哪一步丢失或被误用”,才能知道下一次该改什么,以及修改后该验证什么。
参考资料
- Microsoft:Chunk large documents for RAG and vector search,用于核对切片与输入限制、文档结构的关系。
- Gao 等:Enabling Large Language Models to Generate Text with Citations,2023,用于核对答案质量与引用质量的分别评价,不把论文历史实验结果当作本文系统的指标。
- Spring AI:AI Concepts,图 001 的原始上下文,为本文附图来源。