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
This commit is contained in:
zhuyongxin
2026-07-01 18:27:04 +08:00
parent e438df4355
commit a1c896ebda
14 changed files with 834 additions and 3 deletions
@@ -0,0 +1,74 @@
# 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 决策、每域最多一次