- docs/02 架构设计: 新增 aichat审查/异步审批构想/流式渲染调研/generating状态机/密钥迁移健壮性/工作流脚本执行边界/条件表达式引擎/F-07 trait下沉/Agent架构说明/任务推进构想/功能创意池;更新功能决策记录+归档/对抗论证/文档记录规范/经验记录
- docs/03 模块文档: 新增 AI对话引擎/DAG引擎详解;更新 df-knowledge/df-nodes/df-storage/df-workflow/df-ai
- docs/05 代码审查: 新增 全栈审查/全局review/架构审查/近期改动审查/工作区多角度走查/自研memo流式渲染审查
- docs/09 问题排查: 新增 aichat-apikey-401
- docs/INDEX+README 索引同步;docs/todo 待办看板(2026-06-15 汇总)
- PROGRESS.md Sprint 22-25;URGENT.md 加急清单快照(5 项 P0 已全修)
- scripts/cleanup_orphan_tasks.{py,sh} 孤儿任务清理工具
- .gitignore 补 *.broken.bak + tmp/ 噪音排除
136 lines
4.9 KiB
Markdown
136 lines
4.9 KiB
Markdown
# 知识库模块
|
||
|
||
> 创建: 2026-06-13 | 阶段: Tier 1 已实现
|
||
|
||
---
|
||
|
||
## 概述
|
||
|
||
知识库是 DevFlow 的"共享记忆层",被动积累 AI 对话中产生的可复用经验,供后续对话注入使用。外部工具(Claude Code / CodeX / Cursor)可通过相同 IPC 接口读写,内外零差异。
|
||
|
||
---
|
||
|
||
## 实现状态
|
||
|
||
| 功能 | 状态 |
|
||
|------|------|
|
||
| candidate→published 状态机 | ✅ Tier 1 |
|
||
| 手动录入(Knowledge.vue)| ✅ Tier 1 |
|
||
| AI 自动提炼(对话完成后)| ✅ Tier 1 |
|
||
| LIKE 关键词检索 + 注入 system prompt | ✅ Tier 1 |
|
||
| 审核收件箱(人工门控)| ✅ Tier 1 |
|
||
| 向量 embedding + 混合检索 | ✅ Phase 5.5(开关控制,默认关)|
|
||
| ai_node prompt 注入 | ⬜ Tier 2 |
|
||
| MCP 对外 API | ⬜ Tier 2 |
|
||
|
||
---
|
||
|
||
## 状态机
|
||
|
||
```
|
||
candidate ──→ pending_review ──→ published ──→ archived
|
||
│ │ │
|
||
└────────────────┴───────────────┘
|
||
(可直接到 archived)
|
||
```
|
||
|
||
- AI 提炼只产 **candidate**,绝不自动 published(人工门控)
|
||
- `knowledge_archive`:软删除(status=archived),不物理删除
|
||
|
||
---
|
||
|
||
## 知识类型(KnowledgeKind)
|
||
|
||
7 种:`pitfall`(踩坑)/ `review_rule`(审查规则)/ `prompt_template`(Prompt 模板)/ `architecture_pattern`(架构模式)/ `diagnosis`(诊断知识)/ `deployment_note`(部署经验)/ `workflow_optimization`(工作流优化)
|
||
|
||
---
|
||
|
||
## IPC 命令(11 个)
|
||
|
||
| Command | 说明 |
|
||
|---------|------|
|
||
| `knowledge_list(status?)` | 全量列表,默认排除 archived |
|
||
| `knowledge_get(id)` | 单条查询 |
|
||
| `knowledge_search(query, kind?, limit?)` | LIKE 检索,top-N≤3 |
|
||
| `knowledge_create(input)` | 创建(status=candidate)|
|
||
| `knowledge_update_status(id, status)` | 状态转换(含合法矩阵校验)|
|
||
| `knowledge_record_reuse(id)` | reuse_count +1 |
|
||
| `knowledge_list_candidates()` | 审核收件箱(按 confidence 排序)|
|
||
| `knowledge_archive(id)` | 软删除 |
|
||
| `knowledge_get_config()` | 读取 KnowledgeConfig |
|
||
| `knowledge_save_config(config)` | 保存 KnowledgeConfig |
|
||
| `knowledge_extract_now()` | 手动触发提炼(ManualOnly 模式)|
|
||
|
||
---
|
||
|
||
## KnowledgeConfig
|
||
|
||
```rust
|
||
pub struct KnowledgeConfig {
|
||
pub auto_extract: bool, // 提炼总开关,默认 true
|
||
pub trigger_mode: ExtractTrigger, // on_complete | on_idle | manual_only
|
||
pub min_messages: u32, // 守卫:最少消息数,默认 4
|
||
pub idle_timeout_ms: u64, // 闲置触发超时,默认 30000
|
||
pub auto_inject: bool, // 聊天注入开关,默认 true
|
||
pub vector_enabled: bool, // 向量检索开关,默认 false
|
||
pub embedding_provider_id: Option<String>, // 仅 openai_compat 类型
|
||
pub embedding_model: Option<String>,
|
||
}
|
||
```
|
||
|
||
存储:`AppState.knowledge_config: Arc<Mutex<KnowledgeConfig>>`(内存,重启恢复默认值)。
|
||
|
||
---
|
||
|
||
## 检索与注入
|
||
|
||
### LIKE 检索(默认)
|
||
|
||
`search(query, kind, limit=3)` → `WHERE title LIKE ? OR content LIKE ?` → `ORDER BY reuse_count DESC`
|
||
|
||
### 混合检索(vector_enabled=true)
|
||
|
||
三层降级链:
|
||
1. 开关关 → 纯 LIKE
|
||
2. embed 调用失败 → 纯 LIKE
|
||
3. 正常 → 双信号排序(同时命中 LIKE+向量 cos≥0.3 > 仅 LIKE > 仅向量 cos≥0.3)
|
||
|
||
嵌入时机:知识**发布时**(不在 candidate 阶段浪费 embed 调用),`spawn_embedding_for_knowledge` fire-and-forget。
|
||
|
||
### 注入位置
|
||
|
||
system prompt 头部([知识库上下文] --- [技能指令] --- [原始 system prompt]),仅 auto_inject=true 时生效。
|
||
|
||
---
|
||
|
||
## AI 自动提炼流程
|
||
|
||
1. `run_agentic_loop` 正常退出 → `maybe_spawn_extraction()` 守卫检查
|
||
2. 守卫:`auto_extract=true` + `messages.len() >= min_messages`
|
||
3. `tauri::async_runtime::spawn` 后台执行,不 await(不阻断聊天)
|
||
4. 取最后 6 条 user/assistant 消息 → 构造 JSON schema prompt → LLM `complete()`
|
||
5. `serde_json::from_str<Vec<ExtractedItem>>` 解析,失败整批丢弃(warn 不报错)
|
||
6. 逐条写 `knowledges`(status=candidate,source_ref="conv:{id}")
|
||
|
||
---
|
||
|
||
## 矛盾知识处理
|
||
|
||
不做结构层消歧,在内容和 tags 中自述限制范围。检索时两条知识都可能返回,由 LLM 上下文理解取舍。
|
||
|
||
---
|
||
|
||
## 外部工具访问(规划)
|
||
|
||
Tier 1+ 目标:MCP Shell 封装(`mcp-server` 转发 IPC),外部工具使用逻辑与内部零差异:
|
||
- 外部写入:走 candidate → 人工审核流程
|
||
- 外部读取:`knowledge_search` / `knowledge_list`(published)
|
||
|
||
---
|
||
|
||
## 相关文档
|
||
|
||
- [df-storage 存储层](./df-storage-存储层-2026-06-12.md) — knowledges 表结构 + 向量工具函数
|
||
- [df-ai AI 集成模块](./df-ai-AI集成模块-2026-06-12.md) — hybrid_search / generate_embedding / extract
|
||
- [功能决策记录](../02-架构设计/功能决策记录-2026-06-14.md) — 检索方案演进决策
|