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

75 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 决策、每域最多一次