5.3 KiB
5.3 KiB
Executor 证据归因幻觉
状态:待规划
严重程度:高
发现时间:2026-07-07
来源:Trace Workbench 复核 / 最近 Chat 诊断会话低置信分析
关联:ISS-005(证据链补齐与降级契约收敛)、ISS-006(固定诊断评测集与回归 Harness)、chat-verifier-agent、diagnosis-playbook-skills
背景
最近连续多条 Chat 诊断会话都被 Verifier 判定为 LOW_CONFID。这些会话并不是没有调用工具;相反,它们大多完成了 lookup_knowledge、query_metrics、query_logs 等证据工具调用。
问题出在 Executor 的最终答案:它拿到部分真实工具返回后,将以下三类内容混在一起输出为“本次事故结论”:
- 本次工具直接返回的事实。
- runbook、知识库或历史案例里的通用模式。
- 模型基于经验补全的推断。
Verifier 随后逐条核查 executor_final_answer,发现大量关键事实没有对应工具证据,于是按规则输出 LOW_CONFID。
现象
最近 5 条 Chat 诊断会话均为低置信:
| session | verdict | groundedness_score | direct_evidence | indirect_support | no_evidence |
|---|---|---|---|---|---|
e2e-mysql-skill-rag-20260706-2355 |
LOW_CONFID | 0.50 | 2 | 14 | 5 |
e2e-mysql-skill-rag-20260706-2312 |
LOW_CONFID | 0.37 | 4 | 11 | 14 |
e2e-mysql-skill-rag-20260706-2255 |
LOW_CONFID | 0.10 | 1 | 2 | 18 |
e2e-mysql-skill-rag-20260706-2242 |
LOW_CONFID | 0.53 | 3 | 9 | 4 |
e2e-mysql-skill-rag-20260706-2230 |
LOW_CONFID | 0.20 | 1 | 2 | 11 |
典型无证据断言:
order-service 出现 OutOfMemoryError: Java heap spaceOrderService.processLargeOrder() 内存泄漏导致 JVM OOM频繁 Full GC(10 分钟 15 次,平均 850ms)users + user_profiles 慢查询 2.8s,全表扫描UPDATE orders 锁等待 2.1suser-service DB 查询超时 5.2s~5.8s
这些事实要么没有出现在工具返回中,要么属于其它服务或历史案例,不能作为当前会话的直接事实。
根因判断
这是一个经典的 Agent 幻觉问题,但更准确地说是:
Executor 的证据归因幻觉。
Executor 已经调用了工具,但在综合答案阶段没有严格区分:
direct evidence:工具本次实际返回的事实reference / runbook:流程指导、历史模式、建议方向hypothesis:基于已知证据的推测missing evidence:还没有被工具证实的内容
因此它会把“可能相关的历史模式”写成“当前事故事实”,并把“建议排查方向”写成“已确认根因”。
影响
- Verifier 正确拦截后,最近 Chat 会话长期停留在
LOW_CONFID。 - 用户侧结果虽然带免责声明,但仍难以直观看出哪些内容是真实证据、哪些只是推测。
- 评测里 verdict 分布会被 Executor 输出质量拖低,掩盖工具链本身是否已经足够。
- 面试讲解时容易被追问:既然工具都调用了,为什么答案仍然不可信?
本 issue 目标
收紧 Executor 的最终输出契约,避免把未证实内容写成确认结论。
完成后应做到:
- Executor 最终答案明确分区:
已证实事实合理推测证据缺口建议动作
已证实事实只能来自本轮 evidence tools 的返回。- runbook / skill / 知识库中的流程和历史案例不得直接作为本次事故事实。
- 其它服务的证据不得迁移为当前服务事实。
- 根因结论必须绑定至少一条直接或间接证据;否则只能放入
合理推测或证据缺口。 - Verifier 的
LOW_CONFID缺口应能直接映射回 Executor 的分区错误。
范围
In scope
- 修改
chat-executor-prompt.md,加入证据分区和证据归因规则。 - 必要时在
ChatService.buildChatExecutorAgent(...)中注入更明确的最终答案格式约束。 - 增加 focused tests,覆盖 Executor prompt 中的证据边界规则。
- 增加或更新诊断 eval fixture,验证 unsupported claims 不会出现在确认结论中。
- Trace Workbench 可继续消费 Verifier 缺口展示低置信原因。
Out of scope
- 不放宽 Verifier 的 PASS 判定矩阵。
- 不通过调高
verifier.low-confidence-threshold掩盖问题。 - 不把 runbook 或 skill 内容写入
tool_invocation伪装成事实证据。 - 不新增数据库 schema。
验收标准
- 对 MySQL 连接池耗尽类 case,Executor 输出中:
- 已证实事实只包含工具返回的服务、指标、日志、慢 SQL 等事实。
- OOM、Full GC、连接泄漏等未证实内容只能出现在推测或证据缺口中。
- 不再把
order-service/user-service事实混入payment-service当前事故。
- Verifier 对同类会话的
no_evidence数量明显下降。 - 若证据不足,最终用户输出明确说明“当前无法确认根因”,而不是补全一个完整事故故事。
- 评测报告能捕捉 unsupported confirmed claims 的回归。
相关文件
src/main/resources/prompts/chat-executor-prompt.mdsrc/main/resources/prompts/chat-verifier-prompt.mdsrc/main/java/com/superbiz/agent/service/ChatService.javasrc/main/java/com/superbiz/agent/service/ToolTraceSummaryService.javasrc/test/java/com/superbiz/agent/service/ChatServiceSequentialAgentTest.javamvp/eval/