- 移动 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
2.9 KiB
2.9 KiB
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 whenToRetrieveKnowledgeEntry:新增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 / whenToRetrieveDocumentManagementService.uploadDocument()frontmatter 解析后调用 enrich- 失败时降级(covers=空列表,whenToRetrieve=summary),不阻断上传
T5:域级聚合(Part B 域级)
T5-1:新增 KnowledgeDomainService ✅
buildDomainSummary:同域文档聚合 → LLM → upsert knowledge_domainbuildKnowledgeMap:全量 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 决策、每域最多一次