Files
SuperBizAgent-java/devflow/projects/2026-07-01-executor-action-memory-relevance/acceptance.md
T
zhuyongxin e438df4355 feat(knowledge): Executor 行动记忆 + 归一化质量等级解决 ISS-002 重复检索
- RetrievedDocTracker 升级为域级+文档级双层记录(Map<sessionId, Map<domain, Set<filePath>>>)
- LookupKnowledgeTool 新增 Min-Max 归一化层(BGE-M3 L2 距离→[0,1] similarity)
- 三等级 relevanceLevel:PRECISE / HIGHLY_RELEVANT / REFERENCE + completenessHint 兜底信号
- LookupResult 新增 relevanceLevel、completenessHint、retrievedDomainsThisSession
- Executor prompt 重写:4 条检索约束 + 合法出口不查全不追责,重复检索才惩罚
- 入库可观测性:V010 迁移 + retrieval_details JSON 扩展
- 归档 executor-action-memory-relevance change
2026-07-01 18:24:41 +08:00

3.8 KiB
Raw Blame History

Acceptance: executor-action-memory-relevance

分档

standard

任务完成状态

任务 状态 说明
T1: RetrievedDocTracker 域级升级 ✅ 完成 双层 Map 结构,域级+文档级记录
T2: LookupResult 新增字段 ✅ 完成 relevanceLevel / completenessHint / retrievedDomainsThisSession
T3: 归一化计算逻辑 ✅ 完成 Min-Max 归一化 + 三等级判定
T4: LookupKnowledgeTool 集成 ✅ 完成 归一化层 + 行动记忆注入 + 域拦截
T5: Executor Prompt 重写 ✅ 完成 4 条检索约束,无 knowledge map
T6: 入库可观测性 ✅ 完成 V010 + Entity + JSON 扩展
T7: BGE-M3 归一化验证测试 ✅ 完成 范数=1.00000002,测试通过

静态验证

  • 语法/编译检查: 所有 Java 文件编译通过
  • Impact Analysis: LookupKnowledgeTool、RetrievedDocTracker 变更范围经 gitnexus_impact 检查,均为 L2 内部接口影响
  • Cross-artifact 对齐检查: brief → proposal → design → specs → tasks 闭环,无 gap
  • Prompt 约束检查: chat-executor-prompt.md 不包含 knowledge map,包含 4 条检索约束

脚本验证

  • V010 Flyway 迁移: 迁移成功,relevance_level 和 dedup_reason 列已添加
    ALTER TABLE tool_invocation
        ADD COLUMN relevance_level VARCHAR(20),
        ADD COLUMN dedup_reason VARCHAR(32);
    
  • FullPipelineSmokeTest: BGE-M3 归一化测试通过(范数=1.00000002)
  • 数据库数据校验:
    • relevance_level 列已写入 HIGHLY_RELEVANT / REFERENCE
    • dedup_reason 列已写入 doc_retrieved / null
    • retrieval_details JSON 包含 l1_top_similarity、completeness_hint、retrieved_domains、dedup_reason

浏览器/人工验证

  • 应用启动验证: Spring Boot 应用正常启动,端口 9900
  • Chat API 调用验证: 通过 curl 测试 chat 接口,lookup_knowledge 调用链完整
    curl -X POST "http://localhost:9900/api/chat/send" \
      -H "Content-Type: application/json" \
      -d '{"sessionId": "b66d799e", "question": "..."}'
    
  • 日志验证: 应用日志可观察到 relevanceLevel、retrievedDomainsThisSession 输出
  • 归一化数学验证: l1_top_score=0.383 → l1_top_similarity=0.8085(1 - 0.383/2.0 = 0.8085)✅
  • 域追踪验证: [infrastructure] → [infrastructure, api] 域列表正常扩展

未验证

场景 原因 风险 补验建议
PRECISE 等级(L0 唯一精确匹配) 测试会话无精确匹配场景 低 — L0 matchCount=1 的判断逻辑与 HIGHLY_RELEVANT 共用,实现确定性强 构造一条 L0 精确匹配的知识库文档后测试
domain_retrieved 域级去重 需要同一域全部文档已检索再查该域才触发 低 — isDomainRetrieved 逻辑简单,与 isDocRetrieved 等价 Phase 2 启用域级硬限流时测试
DEDUPED 等级 当前 code path 去重时仍写 REFERENCE,DEDUPED 未被使用 低 — 设计预留,当前未启用 Phase 2 若启用 DEDUPED 等级时验证
Phase 2 域级硬限流 非本次范围 中 — 当前仅有软约束(prompt),LLM 仍可能在 REFERENCE 下继续检索 实测观察,如果 lookup 调用仍偏高,启动 Phase 2

剩余风险

  1. Prompt 软约束局限性:实测 10 次调用中 9 次为 REFERENCE,说明 LLM 仍倾向于继续检索。如果 prompt 约束效果不足,需启用 Phase 2 域级硬限流。
  2. L1 Metadata 解析兼容性:L1 domain 兜底路径解析 metadata JSON,如果知识库文档 frontmatter 格式不一致可能解析失败,已有 try-catch 兜底。

归档状态

  • OpenSpec change 尚未归档
  • devflow/index.md 状态为 implemented,待改为 archived