Files
DevFlow/docs/03-模块文档/df-knowledge-知识库-2026-06-14.md
绝尘 f3c0967f41 修复: AR-3 审批 reason 查项目名拼对象名(用户再反馈 P0)
build_approval_reason 改 async + 接收 db,对 delete/restore/purge/update/bind/create_task 的 id/project_id 查 ProjectRepo.get_by_id 拼「项目名」(id=x)(原只拼裸 id,用户反馈'只返回 ID 不知道是什么数据')
新增 resolve_project_label helper;process_tool_calls 调用改 await
来源 aichat审查报告 第二章 + 用户 2026-06-14 再反馈;cargo 0 err
2026-06-14 17:16:28 +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

相关文档