新增: AI Chat多项增强(审批去重/编辑重发/导出/实体引用/会话置顶搜索)+任务推进链df-nodes落地

This commit is contained in:
2026-06-16 12:41:13 +08:00
parent 212a927eee
commit 7d5cd4c89a
62 changed files with 4576 additions and 248 deletions

View File

@@ -49,13 +49,13 @@ candidate ──→ pending_review ──→ published ──→ archived
| Command | 说明 |
|---------|------|
| `knowledge_list(status?)` | 全量列表,默认排除 archived |
| `knowledge_list(status?)` | 列表,默认仅 publishedlibrary 纯已发布F-260616-02 决策 a显式传 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_list_candidates()` | 待处理收件箱(candidate+pending_review按 confidence 排序)|
| `knowledge_archive(id)` | 软删除 |
| `knowledge_get_config()` | 读取 KnowledgeConfig |
| `knowledge_save_config(config)` | 保存 KnowledgeConfig |
@@ -133,3 +133,82 @@ Tier 1+ 目标MCP Shell 封装(`mcp-server` 转发 IPC外部工具使
- [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) — 检索方案演进决策
---
## 已知问题2026-06-16 审查)
> 来源全量源码逐行审查knowledge.rs / knowledge_inject.rs / knowledge_timeline.rs / stores/knowledge.ts / Knowledge.vue / agentic.rs / commands.rs / state.rs
### 🔴 P0 严重
#### KP-1: KnowledgeConfig 不持久化 — 重启丢失全部配置
- **位置:** `state.rs:208` 初始化 + `knowledge.rs:knowledge_save_config`
- **现象:** `knowledge_save_config` 仅写入内存 `Arc<Mutex<KnowledgeConfig>>`,未落库。应用重启后 `AppState::init` 永远用 `KnowledgeConfig::default()`
- **影响:** 用户配置的向量检索 provider、提炼参数等关闭应用后全部丢失。系统已有 `app_settings` KV 表和 `SettingsRepo` 可用,但未接入
- **修复方向:** `knowledge_save_config` / `knowledge_get_config` 读写 `SettingsRepo`key=`knowledge_config`value=JSON
#### KP-2: OnIdle 触发模式完全未实现 — 配置项为死代码
- **位置:** `state.rs` 定义 `ExtractTrigger::OnIdle` + `idle_timeout_ms``knowledge_inject.rs:maybe_spawn_extraction`
- **现象:** `maybe_spawn_extraction` 仅检查 `trigger_mode == OnComplete``OnIdle``ManualOnly` 都直接 `return Ok(())``idle_timeout_ms` 在整个 `src-tauri` 中零引用
- **影响:** 用户选择 `OnIdle` 模式后,知识提炼永远不会触发(与 ManualOnly 行为相同但无任何提示)
- **修复方向:** 要么实现 idle 定时器tokio::time::interval 轮询 AiSession 最后活动时间),要么移除 OnIdle 变体并在前端隐藏该选项
#### KP-3: 审批恢复循环路径缺失知识注入
- **位置:** `agentic.rs:try_continue_agent_loop` vs `commands.rs:ai_chat`
- **现象:** `ai_chat` 首次消息时调用 `build_knowledge_context` 注入 system prompt`try_continue_agent_loop`(审批通过后恢复循环)仅调用 `build_system_prompt`**未调用** `build_knowledge_context`
- **影响:** 对话经历工具审批流程后恢复时system prompt 中不包含任何知识库上下文AI 在多轮工具调用场景下丢失经验注入
---
### 🟡 P1 中等
#### KP-4: 前端搜索只能搜到 published 知识
- **位置:** `knowledge.rs:knowledge_search``KnowledgeRepo::search`(底层固定 `WHERE status='published'`
- **现象:** 前端搜索栏调用链 `store.search()``knowledgeApi.search()` → IPC → `repo.search()`,底层 SQL 硬编码 `status='published'`
- **影响:** 知识库 Tab 列表加载的是 `list_non_archived()`(含 candidate/pending_review/published但搜索只能命中 published导致列表显示条目数 > 可搜索条目数,体验矛盾
- **修复方向:** 前端搜索走独立的 `knowledge_list` + 前端过滤,或后端新增 `search_all_status()` 方法供前端使用
#### KP-5: 编辑操作缺失生命线事件
- **位置:** `knowledge.rs:knowledge_update`
- **现象:** `knowledge_create``record_created``knowledge_update_status``record_status_change`,但 `knowledge_update`(编辑 title/content/tags 等)**无任何 Timeline 调用**
- **影响:** 知识被编辑修改后,生命周期时间线中不显示编辑记录,审计追踪存在断档
- **修复方向:** 新增 `EVENT_UPDATED` 事件类型 + `KnowledgeTimeline::record_updated()` 方法
#### KP-6: 嵌入生成失败无重试/标记 — 可能永久无向量索引
- **位置:** `knowledge_inject.rs:spawn_embedding_for_knowledge`
- **现象:** 发布时 fire-and-forget 生成嵌入,失败只 `warn log`,无重试机制、无失败标记
- **影响:** provider 临时不可用(网络抖动/API 限流)时该知识永远不会获得向量嵌入,即使后续 provider 恢复。混合检索中该条目向量信号永久缺失
- **修复方向:** 可选方案:(a) 定期补偿任务扫描 `published AND embedding IS NULL`(b) 前端详情页显示嵌入状态并提供"重新生成"按钮
#### KP-7: 前端 updateStatus 后仅本地移除 — 不刷新列表
- **位置:** `stores/knowledge.ts:updateStatus`
- **现象:** 发布/拒绝/归档操作后仅 `filter` 移除本地数组中的条目,不重新 `loadList()` / `loadCandidates()`
- **影响:** 状态变化后需手动刷新才能看到最新列表。若其他路径(如 AI 提炼)并发写入候选列表,本地状态会进一步偏离
---
### 🟢 P2 低优先级
#### KP-8: 搜索后分类筛选状态丢失
- **位置:** `Knowledge.vue:onSearchInput`
- **现象:** 搜索框清空时触发 `store.loadList()`,但不恢复之前的 `activeKind` 分类筛选状态
#### KP-9: knowledge_search limit 硬限 3 条
- **位置:** `knowledge.rs:knowledge_search``.min(3)`
- **现象:** 即使传入 `limit=10` 也只返回最多 3 条。Tier 1 内部合理,但 Tier 2 MCP 对外开放后可能受限
#### KP-10: 矛盾知识无消歧机制
- **位置:** 模块设计层面(文档已记录此决策)
- **现象:** 两条矛盾知识可能同时返回,完全依赖 LLM 上下文理解取舍。当前 top-3 限制降低了冲突概率,但随知识积累会逐渐显现