Files
DevFlow/docs/03-模块文档/df-knowledge-知识库.md
绝尘 cf017f81e2 新增: Phase2 阶段收尾(Sprint 1-20)
重构:删 5 零引用 crate(df-evolve/plugin/stages/task/traceability)+ 清死模块、ai.rs 拆 11 子 module、ai.ts 拆 6 composable、i18n 拆目录
功能:知识库全栈(df-project/scan + CRUD + 时间线 + 前端)、Settings 拆分、appSettings KV 迁移、模型池、LLM 并发 Semaphore
修复:审批持久化根治、ConditionEngine 默认拒绝、NodeRegistry unimplemented 清除、promote 补偿删除、工具结果截断 50KB、路径校验防 symlink 逃逸
文档:B-03 人工审批设计、决策记录三分档、规格契约自检、经验记录、todo 看板、PROGRESS 更新

详见 PROGRESS.md。src-tauri/儿童每日打卡应用/ 与本项目无关,已排除。
2026-06-14 14:08:20 +08:00

4.9 KiB
Raw Blame History

知识库模块

创建: 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_templatePrompt 模板)/ 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

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. 逐条写 knowledgesstatus=candidatesource_ref="conv:{id}"

矛盾知识处理

不做结构层消歧,在内容和 tags 中自述限制范围。检索时两条知识都可能返回,由 LLM 上下文理解取舍。


外部工具访问(规划)

Tier 1+ 目标MCP Shell 封装(mcp-server 转发 IPC外部工具使用逻辑与内部零差异

  • 外部写入:走 candidate → 人工审核流程
  • 外部读取:knowledge_search / knowledge_listpublished

相关文档