新增: AI Chat多项增强(审批去重/编辑重发/导出/实体引用/会话置顶搜索)+任务推进链df-nodes落地
This commit is contained in:
@@ -49,13 +49,13 @@ candidate ──→ pending_review ──→ published ──→ archived
|
||||
|
||||
| Command | 说明 |
|
||||
|---------|------|
|
||||
| `knowledge_list(status?)` | 全量列表,默认排除 archived |
|
||||
| `knowledge_list(status?)` | 列表,默认仅 published(library 纯已发布,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 限制降低了冲突概率,但随知识积累会逐渐显现
|
||||
|
||||
Reference in New Issue
Block a user