Files
zclaw_openfang/docs/superpowers/specs/2026-04-18-evolution-engine-design.md
iven fa5ab4e161
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
refactor(middleware): 移除数据脱敏中间件及相关代码
移除不再使用的数据脱敏功能,包括:
1. 删除data_masking模块
2. 清理loop_runner中的unmask逻辑
3. 移除前端saas-relay-client.ts中的mask/unmask实现
4. 更新中间件层数从15层降为14层
5. 同步更新相关文档(CLAUDE.md、TRUTH.md、wiki等)

此次变更简化了系统架构,移除了不再需要的敏感数据处理逻辑。所有相关测试证据和截图已归档。
2026-04-22 19:19:07 +08:00

18 KiB
Raw Blame History

Evolution Engine 设计文档

日期: 2026-04-18 状态: Draft 目标: 让 ZCLAW 管家从"记住用户信息"进化到"从交互中自主生成新能力"

1. 问题陈述

1.1 现状

ZCLAW 在"信息层进化"方面已有基础:

能力 状态 说明
记忆闭环 可用 对话→LLM 提取→FTS5+TF-IDF 存储→检索注入 system prompt
经验存储结构 定义完整 Experience { pain_pattern, solution_steps, outcome }
语义路由 三层架构 TF-IDF + Embedding + LLM fallback
技能 CRUD API 就绪 create_skill / update_skill / delete_skill
Pipeline DAG 可执行 并行/串行/条件分支16 个 YAML 模板
轨迹记录 可用 TrajectoryRecorder 记录 UserRequest/ToolExecution/LlmGeneration

1.2 核心缺口

系统在"能力层进化"方面完全空白:

缺口 影响
没有从对话自动生成技能 用户解决了问题,系统不会记住"怎么解决的"并固化成可复用技能
Experience 是空壳 结构定义完美,但 GrowthIntegration 只提取文本记忆,不填充结构化 solution_steps
用户画像不自动更新 UserProfileStore 有字段但没有从对话自动填充的管道
轨迹数据只存不用 TrajectoryRecorder 记录了行为但没有代码消费它来改善路由
没有 plan→execute→verify 循环 只能执行预定义 Pipeline不能动态分解新任务

1.3 目标

实现 Hermes Agent 级别的自我进化能力:

  1. 对话→自动生成 SKILL.md — 用户解决了复杂问题后,系统自动将解决步骤固化为可复用技能
  2. 对话→动态 Pipeline — 从用户交互中学习工作流模式,自动组装 Pipeline
  3. 用户反馈→迭代优化 — 根据反馈调整 skill 的 prompt/参数,逐步提升质量

一句话:让管家"越用越懂你",从被动问答变成主动能力积累。

2. 设计决策

决策 选择 理由
方案 独立 EvolutionEngine 层 复用现有积木Experience/Skill/Pipeline/Memory/Trajectory只做中枢调度
目标场景 混合(自动执行 + 对话辅助) 用户群混合,管家模式会根据场景自动判断
进化时机 分层:低风险静默,高风险确认 记忆层自动、技能层征得同意、工作流层明确确认
进化粒度 混合:记忆细粒度,技能粗粒度 信息积累快,能力固化有质量门控
LLM 成本 最小化,用 Haiku 级别 进化分析不需要深度推理Haiku 足够

3. 架构总览

3.1 三层进化模型

┌─────────────────────────────────────────────────┐
│              EvolutionEngine (zclaw-growth)       │
│                                                   │
│  L1 记忆进化 (已有,增强)                          │
│  ├── 每次: 对话→提取偏好/知识/经验→FTS5存储         │
│  ├── 每次: 结构化 Experience 提取                   │
│  ├── 每次: 用户画像增量更新                          │
│  └── 每次: 轨迹事件记录                             │
│                                                   │
│  L2 技能进化 (新建)                                │
│  ├── 触发: Experience 复用次数 >= 3 或 用户主动要求  │
│  ├── 流程: 模式分析 → SKILL.md 生成/优化 → 确认    │
│  └── 产物: 新建/更新的 SKILL.md 文件               │
│                                                   │
│  L3 工作流进化 (新建)                               │
│  ├── 触发: 轨迹中检测到重复的工具调用链模式          │
│  ├── 流程: 模式提取 → Pipeline YAML 组装 → 确认    │
│  └── 产物: 新建/更新的 Pipeline YAML 文件          │
│                                                   │
│  反馈闭环 (新建)                                   │
│  ├── 用户对技能/工作流结果的反馈 → 质量评分          │
│  ├── 低评分 → 触发 L2/L3 重新优化                  │
│  └── 高评分 + 高频使用 → 提升信任度                 │
└─────────────────────────────────────────────────┘

3.2 与现有系统集成点

现有组件 crate 集成方式
MemoryExtractor zclaw-growth L1 增强:合并 Experience 结构化提取到同一 prompt
ExperienceStore zclaw-growth L2 输入:复用 reuse_count 作为模式检测信号
TrajectoryRecorder zclaw-runtime L3 输入:分析 compressed_trajectories 的工具调用链
UserProfileStore zclaw-memory L1 增强:自动从对话更新画像字段
SkillRegistry.create_skill() zclaw-skills L2 输出:调用现有 API 生成 SKILL.md
Pipeline executor zclaw-pipeline L3 输出:生成 YAML 配置文件
ButlerRouter zclaw-runtime 消费:新技能自动加入语义路由索引
GrowthIntegration zclaw-runtime 管线增强:在 process_conversation() 中串入新提取器

3.3 关键设计约束

  1. LLM 调用最小化 — 进化分析只在触发条件满足时才调用,不是每次对话都调
  2. 人确认不可绕过 — L2/L3 的产物必须经过用户确认才生效
  3. 可回滚 — 每次进化产物附带版本号,用户可以回退到之前版本
  4. 成本感知 — 进化分析使用较便宜的模型Haiku不用 Opus
  5. 内置/用户隔离 — 用户生成的技能存放在独立目录,项目更新不覆盖定制

4. L1 记忆进化增强

4.1 现状问题

问题 根因
Experience 结构是空壳 GrowthIntegration 只提取文本记忆,不填充结构化 Experience
用户画像不自动更新 UserProfileStore 有 update_field() 但无调用方
轨迹数据只存不用 CompressedTrajectory 的 satisfaction_signal 无消费代码

4.2 新增 ExperienceExtractor

与现有 MemoryExtractor 并行运行,合并到单次 LLM 调用:

// zclaw-growth/src/experience_extractor.rs

pub struct ExperienceExtractor {
    llm: Arc<dyn LlmDriver>,
}

pub struct ExperienceCandidate {
    pub pain_pattern: String,       // 用户需求的自然语言描述
    pub context: String,            // 上下文信息
    pub solution_steps: Vec<String>, // 解决步骤(有序)
    pub outcome: Outcome,           // Success | Partial | Failed
    pub confidence: f32,            // 提取置信度
    pub tools_used: Vec<String>,    // 使用了哪些 tools/hands
    pub industry_context: Option<String>,
}

impl ExperienceExtractor {
    /// 从完整对话中提取结构化经验
    /// 与 MemoryExtractor 合并在同一次 LLM 调用中执行
    pub async fn extract(
        &self,
        conversation: &[Message],
    ) -> Result<Vec<ExperienceCandidate>> { ... }
}

4.3 增强对话后处理管线

修改 GrowthIntegration.process_conversation()

对话结束
  ├── 现有: MemoryExtractor.extract() → 文本记忆存储
  ├── 新增: ExperienceExtractor.extract() → 结构化经验存储到 ExperienceStore
  ├── 新增: UserProfileUpdater.update() → 画像增量更新
  └── 现有: TrajectoryRecorder 压缩轨迹 → 轨迹存储

4.4 画像增量更新

// zclaw-growth/src/profile_updater.rs

pub struct UserProfileUpdater;

impl UserProfileUpdater {
    /// 从单次 LLM 提取结果中更新画像
    /// 不额外调用 LLM复用 ExperienceExtractor 的输出
    pub async fn update(
        profile_store: &UserProfileStore,
        extraction: &CombinedExtraction, // 包含记忆+经验+画像信号
    ) -> Result<()> {
        // 更新字段:
        // - industry: 从 Experience 中的 industry_context 推断
        // - recent_topics: 追加本次对话主题
        // - pain_points: 追加 Experience 的 pain_pattern
        // - preferred_tools: 统计 tools_used 更新频率
        // - communication_style: 分析用户消息长度/格式
    }
}
画像维度 提取逻辑 更新频率
industry 对话中提到的行业关键词 检测到变化时
recent_topics 对话主题分类 每次对话追加
pain_points Experience 中的 pain_pattern 每次新经验
preferred_tools 轨迹中高频使用的 tools 每次对话更新
communication_style 用户消息的长度/格式偏好 每次对话微调

4.5 成本控制

  • ExperienceExtractor 和 MemoryExtractor 合并为单次 LLM 调用
  • 画像更新从同一个 LLM 响应中提取,不额外调用
  • 总新增成本:0 次额外 LLM 调用prompt 更长token 开销增加约 20%

5. L2 技能进化

5.1 触发机制

触发条件 说明 进化级别
Experience.reuse_count >= 3 同一 pain_pattern 被检索复用了 3 次+ 自动触发
用户明确要求 "帮我保存成一个技能" / "下次直接这样做" 立即触发
管家主动提议 检测到用户第 N 次问同类问题N=2 管家触发
CompressedTrajectory.outcome = Success + 高频 轨迹分析发现成功模式 批量触发

5.2 技能生成流程

触发信号
  │
  ▼
Phase 1: 模式聚合 (PatternAggregator)
  收集同一 pain_pattern 下的所有 Experience
  对比 solution_steps找出共同步骤
  │
  ▼
Phase 2: 技能生成 (SkillGenerator) — LLM 调用Haiku
  输入:聚合的模式 + 原始对话样本
  输出SKILL.md 文件内容
  包含name, description, triggers, tools, steps
  │
  ▼
Phase 3: 质量门控 (QualityGate)
  - triggers 不与现有 75 个内置技能冲突
  - tools 依赖是否已在 HandRegistry 注册
  - SKILL.md 格式校验loader.rs 可解析)
  - 置信度 >= 0.7
  │
  ▼
Phase 4: 用户确认 (ConfirmationGate)
  管家对话中呈现:
  "我注意到你经常做 [X]
   我帮你整理成了一个技能 [技能名]
   以后直接说 [触发词] 就能用了。确认?"
  用户可以:确认 / 修改 / 拒绝
  │
  ▼ (确认)
Phase 5: 注册生效 (SkillRegistrar)
  调用 SkillRegistry.create_skill()
  自动重建语义路由索引
  通知 ButlerRouter 新技能可用

5.3 核心数据结构

// zclaw-growth/src/skill_generator.rs

pub struct SkillCandidate {
    pub name: String,
    pub description: String,
    pub triggers: Vec<String>,
    pub tools: Vec<String>,
    pub steps: Vec<SkillStep>,
    pub category: String,
    pub source_experiences: Vec<Uuid>,  // 来源 Experience ID
    pub confidence: f32,
    pub version: u32,                   // 迭代版本
}

pub struct SkillStep {
    pub instruction: String,   // 步骤说明
    pub tool: Option<String>,  // 使用的工具(如果有)
    pub expected_output: String, // 预期输出
}

pub struct EvolutionEvent {
    pub id: Uuid,
    pub event_type: EvolutionEventType,
    pub candidate: SkillCandidate,
    pub status: EvolutionStatus,   // Pending | Confirmed | Rejected | Optimized
    pub user_feedback: Option<String>,
    pub created_at: DateTime<Utc>,
}

5.4 技能迭代优化

用户使用自动生成的技能
  │
  ├── 满意 → reuse_count++ → 强化(不改动)
  │
  └── 不满意 → 收集反馈信号
        │
        ▼
      反馈分析 (LLM 调用)
        │
        ├── 修改 triggers → 重新路由
        ├── 修改 steps → 优化流程
        ├── 修改 tools → 换工具
        └── 降级为记忆 → 不够通用,回退为 Experience

5.5 技能存储隔离

类型 存储路径 来源 可修改
内置技能 skills/ 随项目发布
用户技能 ~/.zclaw/skills/ 或 SaaS 存储 L2 进化生成
临时技能 仅内存 对话中临时 自动销毁

SkillRegistry 已支持 add_skill_dir(),只需增加用户技能目录扫描。

6. L3 工作流进化

6.1 触发机制

TrajectoryAnalyzer后台周期任务每小时执行一次
  │
  ├── 扫描最近 7 天的 CompressedTrajectory
  ├── 按相似度聚类(工具链序列相似度)
  ├── 发现重复模式(出现 2 次以上的相同工具链)
  │
  └── 触发信号:发现可固化的工作流模式

6.2 Pipeline 自动组装

// zclaw-growth/src/workflow_composer.rs

pub struct WorkflowComposer {
    llm: Arc<dyn LlmDriver>,
}

pub struct PipelineCandidate {
    pub name: String,
    pub description: String,
    pub triggers: Vec<String>,
    pub yaml_content: String,          // 生成的 Pipeline YAML
    pub source_trajectories: Vec<Uuid>, // 来源轨迹
    pub confidence: f32,
}

impl WorkflowComposer {
    /// 从相似轨迹中组装 Pipeline
    /// 输入:聚类后的轨迹组(相同工具链模式)
    /// 输出PipelineCandidateYAML + 元数据)
    pub async fn compose(
        &self,
        trajectories: &[CompressedTrajectory],
        hand_registry: &HandRegistry,
    ) -> Result<Option<PipelineCandidate>> { ... }
}

6.3 生成示例

用户经常做:搜索→抓取→总结→格式化

# 自动生成的 Pipeline
name: "每日资讯简报"
description: "搜索指定主题,抓取内容,生成结构化简报"
triggers:
  - "每日简报"
  - "资讯汇总"
  - "新闻总结"
steps:
  - id: search
    action: hand
    hand: researcher
    params:
      action: search
      query: "${inputs.topic}"
  - id: fetch
    action: hand
    hand: collector
    params:
      urls: "${steps.search.output.urls}"
  - id: summarize
    action: llm_generate
    params:
      prompt: "将以下内容整理为结构化简报:${steps.fetch.output}"

7. 反馈闭环

7.1 反馈信号收集

信号类型 收集方式 权重
显式反馈 用户说"不好"/"换一个"/"就这样"
隐式反馈 用户是否继续追问同类问题
使用频率 技能/Pipeline 被调用的次数
完成率 技能执行后用户是否继续操作
对比评分 同一任务使用技能 vs 不使用的满意度差异

7.2 闭环路径

用户使用进化产物(技能/Pipeline
  │
  ├── 正面反馈 → 信任度++ → 推荐优先级提升
  │               → 如果足够成熟 → 提升为"推荐技能"
  │
  ├── 负面反馈 → 信任度-- → 触发优化循环
  │               → LLM 分析失败原因
  │               → 修改技能 steps/triggers/tools
  │               → 重新请用户确认
  │
  └── 长期不用 → 自然衰减 → 降级为记忆 → 最终清理

7.3 反馈数据结构

// zclaw-growth/src/feedback_collector.rs

pub struct EvolutionFeedback {
    pub evolution_id: Uuid,           // 关联的 EvolutionEvent
    pub artifact_type: ArtifactType,  // Skill | Pipeline
    pub signal: FeedbackSignal,       // Explicit | Implicit | Usage | Completion
    pub sentiment: Sentiment,         // Positive | Negative | Neutral
    pub details: Option<String>,      // 用户原始反馈文本
    pub timestamp: DateTime<Utc>,
}

8. 数据流全景

用户对话
  │
  ├──[L1] 每次对话后 ──→ 合并 LLM 提取
  │                         ├── 文本记忆 (偏好/知识/经验)
  │                         ├── 结构化 Experience (pain→solution→outcome)
  │                         ├── 画像增量更新
  │                         └── 轨迹事件记录
  │                         │
  │                         ▼
  │                    经验库 (FTS5)
  │                    轨迹库 (SQLite)
  │                    用户画像 (SQLite)
  │                         │
  ├──[L2] 模式触发时 ──→ 模式聚合 → 技能生成 → 质量门控 → 用户确认 → 注册
  │
  ├──[L3] 周期分析时 ──→ 轨迹聚类 → 工作流组装 → 质量门控 → 用户确认 → 注册
  │
  └──[反馈] 使用后 ──→ 质量评分 → 优化/衰减/提升

9. 新增模块清单

所有模块在 zclaw-growth crate 中,不新增 crate

模块 文件 职责
ExperienceExtractor experience_extractor.rs 结构化经验提取
ProfileUpdater profile_updater.rs 画像增量更新
PatternAggregator pattern_aggregator.rs 经验模式聚合
SkillGenerator skill_generator.rs SKILL.md 生成
WorkflowComposer workflow_composer.rs Pipeline YAML 组装
QualityGate quality_gate.rs 质量门控验证
EvolutionEngine evolution_engine.rs 中枢调度(触发+协调)
FeedbackCollector feedback_collector.rs 反馈信号收集与分析

需修改的现有文件:

文件 修改内容
zclaw-runtime/src/growth.rs GrowthIntegration 增加新提取器和触发检查
zclaw-runtime/src/middleware/butler_router.rs 消费进化事件,呈现确认对话
zclaw-skills/src/registry.rs 增加用户技能目录扫描
zclaw-kernel/src/kernel/skills.rs 暴露进化相关 Tauri 命令
zclaw-kernel/src/kernel/mod.rs 注册 EvolutionEngine 到 Kernel

10. 实施建议

10.1 分阶段实施

阶段 内容 依赖
Phase 1: L1 增强 ExperienceExtractor + ProfileUpdater + 合并提取 无外部依赖
Phase 2: L2 核心 PatternAggregator + SkillGenerator + QualityGate Phase 1
Phase 3: L2 集成 确认对话 UI + SkillRegistrar + ButlerRouter 集成 Phase 2
Phase 4: L3 核心 TrajectoryAnalyzer + WorkflowComposer Phase 1
Phase 5: 反馈闭环 FeedbackCollector + 优化循环 Phase 2 + 3

10.2 风险和缓解

风险 缓解措施
LLM 提取质量不稳定 置信度阈值过滤 + 质量门控 + 用户确认
进化产物与内置技能冲突 QualityGate 检查 triggers 冲突
用户技能目录膨胀 信任度衰减 + 长期不用自动归档
增加系统复杂度 所有进化逻辑集中在 zclaw-growth不侵入运行时主流程
隐私问题 经验/技能数据本地存储,用户可查看/删除