- 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
3.8 KiB
3.8 KiB
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 / REFERENCEdedup_reason列已写入 doc_retrieved / nullretrieval_detailsJSON 包含 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 |
剩余风险
- Prompt 软约束局限性:实测 10 次调用中 9 次为 REFERENCE,说明 LLM 仍倾向于继续检索。如果 prompt 约束效果不足,需启用 Phase 2 域级硬限流。
- L1 Metadata 解析兼容性:L1 domain 兜底路径解析 metadata JSON,如果知识库文档 frontmatter 格式不一致可能解析失败,已有 try-catch 兜底。
归档状态
- OpenSpec change 尚未归档
- devflow/index.md 状态为
implemented,待改为archived