Files
SuperBizAgent-java/mvp/issues/active/executor-evidence-attribution-hallucination.md

5.3 KiB
Raw Permalink Blame History

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 的最终答案:它拿到部分真实工具返回后,将以下三类内容混在一起输出为“本次事故结论”:

  1. 本次工具直接返回的事实。
  2. runbook、知识库或历史案例里的通用模式。
  3. 模型基于经验补全的推断。

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 space
  • OrderService.processLargeOrder() 内存泄漏导致 JVM OOM
  • 频繁 Full GC(10 分钟 15 次,平均 850ms)
  • users + user_profiles 慢查询 2.8s,全表扫描
  • UPDATE orders 锁等待 2.1s
  • user-service DB 查询超时 5.2s~5.8s

这些事实要么没有出现在工具返回中,要么属于其它服务或历史案例,不能作为当前会话的直接事实。


根因判断

这是一个经典的 Agent 幻觉问题,但更准确地说是:

Executor 的证据归因幻觉。

Executor 已经调用了工具,但在综合答案阶段没有严格区分:

  • direct evidence:工具本次实际返回的事实
  • reference / runbook:流程指导、历史模式、建议方向
  • hypothesis:基于已知证据的推测
  • missing evidence:还没有被工具证实的内容

因此它会把“可能相关的历史模式”写成“当前事故事实”,并把“建议排查方向”写成“已确认根因”。


影响

  • Verifier 正确拦截后,最近 Chat 会话长期停留在 LOW_CONFID。
  • 用户侧结果虽然带免责声明,但仍难以直观看出哪些内容是真实证据、哪些只是推测。
  • 评测里 verdict 分布会被 Executor 输出质量拖低,掩盖工具链本身是否已经足够。
  • 面试讲解时容易被追问:既然工具都调用了,为什么答案仍然不可信?

本 issue 目标

收紧 Executor 的最终输出契约,避免把未证实内容写成确认结论。

完成后应做到:

  1. Executor 最终答案明确分区:
    • 已证实事实
    • 合理推测
    • 证据缺口
    • 建议动作
  2. 已证实事实 只能来自本轮 evidence tools 的返回。
  3. runbook / skill / 知识库中的流程和历史案例不得直接作为本次事故事实。
  4. 其它服务的证据不得迁移为当前服务事实。
  5. 根因结论必须绑定至少一条直接或间接证据;否则只能放入 合理推测 或 证据缺口。
  6. 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.md
  • src/main/resources/prompts/chat-verifier-prompt.md
  • src/main/java/com/superbiz/agent/service/ChatService.java
  • src/main/java/com/superbiz/agent/service/ToolTraceSummaryService.java
  • src/test/java/com/superbiz/agent/service/ChatServiceSequentialAgentTest.java
  • mvp/eval/