Files
SuperBizAgent-java/devflow/projects/2026-06-29-confidence-feedback/evidence.md
T

2.0 KiB
Raw Blame History

evidence.md — confidence-feedback

代码证据

agent_step.thought 不可作为案例内容

  • 文件:AgentLoggingHook.java:135
  • 证据:thought 在写入前截断为 2000 字符,modelOutput 截断为 500 字符
  • 结论:两者均不是返回给用户的完整答案,案例质量低

ChatService 已有完整答案未持久化

  • 文件:ChatService.java:269(executeChat)、ChatService.java:353(executeChatComplex)
  • 证据:String answer = response.getText() 只用于返回前端,未写入任何持久化存储
  • 结论:加 DiagnosisSession.answer 字段是最干净的方案

ToolInvocationRepository 已有 findBySessionId

  • 文件:ToolInvocationRepository.java
  • 证据:findBySessionId(String sessionId) 已实现,返回 List<ToolInvocation>
  • 结论:规则引擎可直接读取 tool_invocation 事实,无需新增查询方法

tool_invocation 写入时序安全

  • 文件:LookupKnowledgeTool.java:144
  • 证据:saveToolInvocation 在工具执行时同步调用,早于 ChatService 的 SUCCESS 分支
  • 结论:@Async evaluate 触发时 tool_invocation 数据已在库,无竞态

项目原无 @EnableAsync

  • 证据:grep -rn "EnableAsync" 无任何命中(apply 前)
  • 结论:需要新建 AsyncConfig.java

CaseLibraryRepository.findByDiagnosisId 已有幂等检查支持

  • 文件:CaseLibraryRepository.java
  • 证据:findByDiagnosisId(String diagnosisId) 已实现
  • 结论:useful 重复提交时可用此方法检查,不重复插入

设计推导

evidence_score vs confidence 命名

  • 基于工具调用的分数衡量的是证据收集充分度,不是答案准确性
  • "confidence" 容易误解,改为 "evidence_score" 更准确
  • LLM 自评才适合叫 confidence,但当前未实现

BAD_CASE 不应混入 status

  • status 有明确执行状态语义(RUNNING/SUCCESS/FAILED)
  • 一个 SUCCESS 的 session 被标为 BAD_CASE 后,按 status 做的统计会失真
  • feedback 字段本身就够,WHERE feedback = 'not_useful' 即可查 BadCase