Files
zhuyongxin a1c896ebda chore(docs): 归档 ISS-001 session-dedup-knowledge-map + ISS-002 mvp 文档
- 移动 session-dedup-knowledge-map OpenSpec 到 archive 目录
- 提交 ISS-001 遗留的 devflow 档案文件
- 更新 ISS-002 状态为已修复
- 新增 mvp/architecture/action-memory-relevance.md 设计文档
- 更新 mvp/README.md 文档导航
- 更新 devflow/index.md OpenSpec 链接指向 archive
2026-07-01 18:27:04 +08:00

2.9 KiB
Raw Permalink Blame History

Tasks: session-dedup-knowledge-map

T1:数据层基础

T1-1:新增 knowledge_domain 表 ✅

  • 创建 src/main/resources/db/migration/V009__add_knowledge_domain.sql
  • 字段:id、domain_id(unique)、description、when_to_retrieve(TEXT)、document_count、created_at、updated_at

T1-2:新增 KnowledgeDomain 实体和 Repository ✅

  • KnowledgeDomain.java:JPA 实体,对应 knowledge_domain 表
  • KnowledgeDomainRepository.java:findByDomainId(String) + save

T2:Frontmatter 扩展

T2-1:Frontmatter.java / KnowledgeEntry.java 新增字段 ✅

  • Frontmatter:新增 List<String> covers、String whenToRetrieve
  • KnowledgeEntry:新增 List<String> covers、String whenToRetrieve

T2-2:FrontmatterParser 解析新字段 ✅

  • 解析 YAML 中的 covers(List)和 when_to_retrieve(String)

T2-3:KnowledgeIndexService 替换为 Jackson 解析 ✅

  • 全量替换手写 extractJsonValue/extractJsonArray 为 objectMapper.readValue(metadata, Frontmatter.class)

T2-4:LookupResult 新增 message 字段 ✅

  • 新增 String message 字段,去重时填入提示

T3:工具层去重(Part A)

T3-1:新增 RetrievedDocTracker ✅

  • RetrievedDocTracker.java:Spring @Component,ConcurrentHashMap<String, Set<String>>
  • 方法:isAlreadyRetrieved、markRetrieved、clearSession

T3-2:ChatService.finally 联动 Tracker ✅

  • executeChat / executeChatComplex 的 finally 块显式调用 retrievedDocTracker.clearSession(sessionId)

T3-3:LookupKnowledgeTool 集成去重 ✅

  • 注入 RetrievedDocTracker,检索后过滤已召回文档,全部已召回时返回去重提示

T4:文档级 LLM 生成(Part B 文档级)

T4-1:新增 DocumentFieldEnricher + 上传时调用 ✅

  • DocumentFieldEnricher.java:调用 LLM 生成 covers / whenToRetrieve
  • DocumentManagementService.uploadDocument() frontmatter 解析后调用 enrich
  • 失败时降级(covers=空列表,whenToRetrieve=summary),不阻断上传

T5:域级聚合(Part B 域级)

T5-1:新增 KnowledgeDomainService ✅

  • buildDomainSummary:同域文档聚合 → LLM → upsert knowledge_domain
  • buildKnowledgeMap:全量 knowledge_domain → YAML 字符串
  • onDocumentChange:触发 buildDomainSummary

T5-2:loadIndex 触发域生成 + 文档变更触发域重算 ✅

  • KnowledgeIndexService.loadIndex 末尾:无 DB 记录的域自动触发生成
  • DocumentManagementService.uploadDocument / deleteDocument 末尾:调用 onDocumentChange

T6:Planner 注入(Part B 注入)

T6-1:ChatService 注入 knowledge map ✅

  • buildChatPlannerAgent() 注入 KnowledgeDomainService.buildKnowledgeMap() 到 prompt

T6-2:chat-planner-prompt.md 新增规则 ✅

  • 新增知识库检索规则区块,要求 Planner 按 when_to_retrieve 决策、每域最多一次