Self-Evolution v1.0 — Agent 自进化系统
> 核心判断:自进化不是"把聊天记录塞进向量库",而是一条 检测 → 评估 → 提议 → 审批 → 持久化 → 验证 → 查询 的学习管线。
> 用得越久,越懂你 — 但前提是:学什么由用户说了算,进化质量优先于数量。
> Agent 最没用的进化是"用户喜欢吃火锅"这类噪音;最有用的进化是"修改运行时代码后必须运行受影响测试"这类可执行规则。
一、自进化在技能生态中的位置
┌──────────────────────────────────────────────────────────────────┐
│ Self-Evolution(本技能) │
│ 持续对话扫描 · 进化检测 · 质量门控 · 审批工作流 │
│ 多目标持久化 · 进化查询 · 进化审计 · 速率控制 │
│ —— "何时学、学什么、值不值得学、学完写到哪里" │
└───────┬──────────────┬──────────────┬──────────────┬─────────────┘
↓ ↓ ↓ ↓
┌───────────────┐ ┌──────────┐ ┌──────────────┐ ┌──────────────┐
│ agent-memory │ │ error- │ │ auto-skill- │ │ proactive- │
│ v5.0 │ │ recovery │ │ creator v1.0 │ │ agent v3.1 │
│ │ │ v2.0 │ │ │ │ │
│ 存储层: │ │ 失败学习:│ │ 技能打包: │ │ 行为框架: │
│ 偏好→MEMORY │ │ 陷阱→ │ │ 方法→SKILL │ │ WAL/Guardrail│
│ 事实→语义记忆 │ │ error_ │ │ │ │ /VFM评估 │
│ 事件→情节记忆 │ │ patterns │ │ │ │ │
└───────────────┘ └──────────┘ └──────────────┘ └──────────────┘
分工边界:
- 本技能负责 检测和编排 — 扫描对话、识别进化机会、评估质量、提议审批
- agent-memory 负责 存储 — 偏好写入 MEMORY.md,事实写入语义记忆
- error-recovery 负责 失败处理 — 陷阱写入 error_patterns.json
- auto-skill-creator 负责 技能打包 — 可复用工作流生成 SKILL.md
- proactive-agent 负责 行为约束 — ADL/VFM 协议约束进化安全
二、六种进化类型
| 类型 | 信号 | 持久化目标 | 示例 |
|---|---|---|---|
| 偏好修正 | 用户说"不要/以后别/我更喜欢" | ~/.workbuddy/MEMORY.md |
"正文中禁止出现'如前文所述'" |
| 方法学习 | 用户教了新做法,或 Agent 发现更优路径 | ~/.workbuddy/skills/ (SKILL.md) |
"修改运行时代码后运行受影响测试" |
| 陷阱记忆 | 同类错误出现 ≥2 次,或工具调用失败后恢复 | error-recovery/references/error_patterns.json |
"Windows 路径用反斜杠时需转义" |
| 流程优化 | 多步骤任务的执行顺序被发现有更优排列 | ~/.workbuddy/MEMORY.md (流程规则区) |
"先读 package.json 再决定包管理器" |
| 风格校准 | 用户对输出格式/语气/长度有明确要求 | ~/.workbuddy/MEMORY.md (风格区) |
"回答先给结论再给解释" |
| 能力补丁 | Agent 缺少某个知识/技能导致任务受阻 | ~/.workbuddy/skills/ 或 MEMORY.md |
"腾讯文档链接格式:URL?_fid=file_id" |
进化类型判定规则
用户输入 / Agent 执行轨迹
↓
┌────────────────────────────────┐
│ 信号扫描 │
├────────────────────────────────┤
│ 1. 纠正信号?→ 偏好修正/风格校准│
│ 2. 新方法信号?→ 方法学习 │
│ 3. 重复失败?→ 陷阱记忆 │
│ 4. 流程改进?→ 流程优化 │
│ 5. 知识缺口?→ 能力补丁 │
└────────────────────────────────┘
↓
多类型可同时触发(一次对话最多触发 2 种)
三、两种触发机制
3.1 关键词触发(显式)
用户说出以下关键词时,立即进入进化评估流程:
| 关键词类别 | 示例 | 进化类型倾向 |
|---|---|---|
| 长期意图 | "以后"、"记住"、"永远"、"每次都" | 偏好修正 / 流程优化 |
| 纠正信号 | "不要"、"别再"、"我说的是"、"不是这个意思" | 偏好修正 / 风格校准 |
| 方法传授 | "应该这样做"、"正确的方法是"、"你可以试试" | 方法学习 / 能力补丁 |
| 显式进化请求 | "自我进化"、"复盘"、"反思"、"你最近学会了什么" | 触发完整进化流程 |
关键词触发后:
1. 不需要等待任务完成,立即评估当前信号
2. 生成进化请求卡片
3. 等待用户审批
3.2 自动检测(隐式)
在以下条件满足时,自动进入进化评估:
| 检测条件 | 阈值 | 进化类型倾向 |
|---|---|---|
| 工具调用次数 | ≥ 8 次 | 方法学习 / 流程优化 |
| 同类错误出现 | ≥ 2 次 | 陷阱记忆 |
| 任务中断后恢复 | 任意 | 流程优化 |
| 用户对输出表达不满 | "不对"、"重做"、"不是这个" | 风格校准 / 偏好修正 |
| Agent 主动搜索后才发现关键信息 | 任意 | 能力补丁 |
自动检测后:
1. 在任务完成后(不是任务中途)进行评估
2. 生成进化请求卡片
3. 等待用户审批
四、进化请求卡片(核心交互单元)
每次检测到进化机会后,向用户展示一张进化请求卡片:
┌─────────────────────────────────────────────────────────┐
│ 🧬 进化请求 #001 │
│ │
│ 检测到:偏好修正 │
│ 触发方式:关键词触发("以后") │
│ 来源对话:"以后正文中不要出现'如前文所述'这类元叙述" │
│ │
│ 拟记忆内容: │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 正文中禁止出现"如前文所述"、"如上文所示"等元叙述 │ │
│ │ 用语,所有交代必须自然融入故事。 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 拟写入位置:~/.workbuddy/MEMORY.md(写作规范区) │
│ 进化类型:偏好修正 │
│ 预期效果:后续所有叙事类写作自动遵守此规则 │
│ │
│ [✅ 批准写入] [✏️ 修改内容] [❌ 拒绝] [🕐 稍后] │
└─────────────────────────────────────────────────────────┘
卡片必含字段
| 字段 | 说明 | 为什么重要 |
|---|---|---|
| 进化编号 | 全局递增 ID | 审计追踪 |
| 检测到的进化类型 | 六种之一 | 决定持久化目标 |
| 触发方式 | 关键词/自动检测 | 审计 + 速率统计 |
| 来源对话 | 触发进化的原始用户输入 | 可追溯 |
| 拟记忆内容 | 具体可执行的规则文本 | 用户审批的核心对象 |
| 拟写入位置 | 文件路径 | 用户知道数据去向 |
| 预期效果 | 下次同类任务会发生什么变化 | 让用户理解进化价值 |
用户审批后的动作
用户批准
↓
┌─────────────────────────────────────────────┐
│ 1. 写入目标文件(MEMORY.md / SKILL.md / │
│ error_patterns.json) │
│ 2. 记录到进化审计日志 │
│ 3. 更新进化速率计数器 │
│ 4. (可选)验证:确认文件已更新 │
└─────────────────────────────────────────────┘
五、质量门控
5.1 核心原则:质量优先于数量
> 宁可保持每周 1-3 次的高质量进化,也不要每天 50 条"用户喜欢吃火锅"的噪音。
5.2 进化价值评估矩阵
每个候选进化在提议前,经过以下评估:
| 维度 | 权重 | 评估问题 | 评分标准 |
|---|---|---|---|
| 高频性 | 3x | 这个规则会在未来任务中高频使用吗? | 每日=3, 每周=2, 偶尔=1, 几乎不会=0 |
| 失败预防 | 3x | 这个进化能将未来的失败转为成功吗? | 防止严重错误=3, 防止小错=2, 略有改善=1, 无关=0 |
| 用户负担 | 2x | 有了这条规则,用户下次能少说几句话? | 省很多=3, 省一些=2, 省一句=1, 无变化=0 |
| 可验证性 | 2x | 这条规则的效果可以被客观验证吗? | 可自动化验证=3, 可人工验证=2, 靠感觉=1, 无法验证=0 |
| 具体性 | 1x | 规则是否具体到可执行(而非"以后注意")? | 具体可执行=3, 有条件=2, 模糊=1, 空泛=0 |
加权总分阈值:
- ≥ 20 分:高质量进化,立即提议
- 12-19 分:中等价值,提议但标注"可选"
- < 12 分:低价值,不提议,仅在审计日志中记录
5.3 反模式:不应成为进化的内容
| 反模式 | 示例 | 为什么不进化 |
|---|---|---|
| 一次性事实 | "今天帮我订下午3点的会议室" | 不具备复用性 |
| 主观偏好噪音 | "我觉得今天天气不错" | 不影响任务执行 |
| 模糊指令 | "以后注意点" | 不可执行、不可验证 |
| 已有规则的重复 | 与 MEMORY.md 中已有规则语义重复 | 去重 |
| 上下文依赖 | "这次用 Python"(仅限当前任务) | 不是长期偏好 |
| 敏感信息 | 密码、密钥、个人隐私 | 安全风险 |
5.4 速率控制
| 参数 | 默认值 | 说明 |
|---|---|---|
| 每周进化上限 | 7 条 | 防止噪音泛滥 |
| 每日进化上限 | 3 条 | 避免单日过载 |
| 同类型冷却期 | 24h | 同一进化类型 24h 内最多提议 1 次 |
| 用户可调节 | 是 | 用户可说"进化速率调高/调低" |
超限处理: 当达到速率上限时,候选进化仍记录到审计日志(标记为 rate_limited),但不展示进化请求卡片。用户可随时查看被限流的候选。
六、进化生命周期
┌──────────┐
│ 对话进行 │
└────┬─────┘
↓
┌─────────────────────┐
│ 1. 信号扫描 │ ← 关键词触发 or 自动检测
│ 扫描每轮对话 │
└────────┬────────────┘
↓
┌─────────────────────┐
│ 2. 进化分类 │ ← 判定六种进化类型
│ 可能多类型同时 │
└────────┬────────────┘
↓
┌─────────────────────┐
│ 3. 质量评估 │ ← 加权评分 ≥ 阈值?
│ 价值矩阵打分 │
└────────┬────────────┘
├─ 低于阈值 → 记录审计日志(低价值)→ 结束
└─ 通过 ↓
┌─────────────────────┐
│ 4. 去重检查 │ ← 与已有规则语义比对
│ 检查 MEMORY.md / │
│ skills / error_ │
│ patterns.json │
└────────┬────────────┘
├─ 已存在 → 记录审计日志(重复)→ 结束
└─ 不重复 ↓
┌─────────────────────┐
│ 5. 速率检查 │ ← 本周/今日/冷却期
│ 检查进化速率 │
└────────┬────────────┘
├─ 超限 → 记录审计日志(rate_limited)→ 结束
└─ 未超限 ↓
┌─────────────────────┐
│ 6. 生成进化请求卡片 │ ← 展示给用户
│ 等待用户审批 │
└────────┬────────────┘
├─ 拒绝 → 记录审计日志(rejected)→ 结束
├─ 稍后 → 挂起 24h → 重新提议(仅 1 次)
├─ 修改 → 用户编辑内容 → 重新审批
└─ 批准 ↓
┌─────────────────────┐
│ 7. 持久化写入 │ ← 写入对应存储
│ MEMORY.md / │
│ SKILL.md / │
│ error_patterns │
└────────┬────────────┘
↓
┌─────────────────────┐
│ 8. 验证 │ ← 确认文件已更新
│ 读取目标文件 │
└────────┬────────────┘
↓
┌─────────────────────┐
│ 9. 审计记录 │ ← 写入进化审计日志
│ 编号/类型/时间/ │
│ 来源/审批结果 │
└────────┬────────────┘
↓
┌─────────────────────┐
│ 10. 下次任务生效 │ ← 通过 MEMORY.md 读取
│ 自动加载规则 │
└─────────────────────┘
七、多目标持久化路由
进化批准后,根据类型写入不同位置:
进化类型 持久化目标 写入方式
──────────────────────────────────────────────────────────────────────────
偏好修正 → ~/.workbuddy/MEMORY.md(偏好区) Edit 追加
风格校准 → ~/.workbuddy/MEMORY.md(风格区) Edit 追加
流程优化 → ~/.workbuddy/MEMORY.md(流程区) Edit 追加
方法学习 → ~/.workbuddy/skills/<auto-skill>/SKILL.md auto-skill-creator
能力补丁 → ~/.workbuddy/MEMORY.md(知识区) Edit 追加
或 ~/.workbuddy/skills/<skill>/SKILL.md (如足够复杂)
陷阱记忆 → error-recovery/references/error_patterns.json Edit 追加
写入格式规范
MEMORY.md 中的进化条目格式:
## [进化类型] 规则标题
- **进化编号:** #001
- **进化时间:** 2026-07-08
- **触发来源:** 关键词触发("以后")
- **规则内容:** 正文中禁止出现"如前文所述"等元叙述用语
- **预期效果:** 后续叙事类写作自动遵守
error_patterns.json 中的进化条目格式:
{
"id": "trap-001",
"evolution_id": "#003",
"pattern": "Windows 路径反斜杠未转义",
"first_seen": "2026-07-08",
"occurrence_count": 2,
"fix_strategy": "使用正斜杠或双反斜杠",
"source": "auto-detection"
}
八、进化查询
用户可随时查询进化状态:
| 查询 | 触发词 | 响应 |
|---|---|---|
| 最近学会了什么 | "你最近学会了什么"、"进化记录" | 列出最近 5 条已批准的进化 |
| 进化统计 | "进化统计"、"进化了多少" | 总数/按类型/按周/通过率 |
| 特定类型进化 | "你学过哪些偏好" | 按类型过滤展示 |
| 被拒绝的进化 | "拒绝了哪些进化" | 展示被拒绝的候选及原因 |
| 被限流的候选 | "有哪些没提议的" | 展示 rate_limited 候选 |
| 进化速率调整 | "进化速率调高/调低" | 修改速率参数 |
九、进化审计日志
所有进化活动(包括未提议的)都记录到审计日志:
位置: ~/.workbuddy/skills/self-evolution/audit-log.jsonl
每条记录格式:
{
"evolution_id": "#001",
"timestamp": "2026-07-08T05:30:00+08:00",
"type": "preference_correction",
"trigger": "keyword",
"trigger_detail": "用户说了'以后'",
"source_message": "以后正文中不要出现'如前文所述'",
"proposed_content": "正文中禁止出现'如前文所述'等元叙述用语",
"quality_score": 24,
"quality_breakdown": {"frequency": 9, "failure_prevention": 6, "user_burden": 4, "verifiability": 3, "specificity": 2},
"dedup_status": "unique",
"rate_status": "within_limit",
"user_decision": "approved",
"persisted_to": "~/.workbuddy/MEMORY.md",
"verified": true,
"session_id": "2026-07-08-05-12-07"
}
审计日志用途:
- 追踪进化效果(哪些规则真正改善了任务结果)
- 识别进化模式(哪种类型进化最多)
- 调整质量阈值(根据通过率优化评分矩阵)
- 用户隐私审计(用户可随时查看和删除)
十、与 5 步自我纠错的集成
当触发词为"自我迭代"、"复盘"、"反思"时,执行完整的 5 步自我纠错流程(来自 error-recovery v2.0):
Step 1 — 读日志
读取审计日志 + 对话记录,用 ❌ 标出出错节点,✅ 标出做得好的节点
Step 2 — 找模式
不孤立看单次失败,找出反复出现的问题类型
输出:【模式识别】模式1:xxx(出现 N 次)
Step 3 — 定根因
能力问题(我不会)→ 能力补丁进化
态度问题(我会但没认真做)→ 偏好修正/风格校准进化
流程问题(步骤设计有缺陷)→ 流程优化进化
Step 4 — 制定措施
每条措施必须具体、可验证、可执行
无效:"以后注意"
有效:"修改运行时代码后必须运行受影响测试"
Step 5 — 写入规则库
生成进化请求卡片 → 用户审批 → 持久化
关键区别: 普通进化是 Agent 主动检测后提议;5 步自我纠错是用户触发后的深度复盘,产出多条进化候选。
十一、安全约束
11.1 进化安全协议(借鉴 proactive-agent ADL/VFM)
| 约束 | 规则 |
|---|---|
| 禁止漂移 | 进化不能改变 Agent 的核心身份和安全边界 |
| 可验证性 | 每条进化必须有可验证的预期效果 |
| 可回滚 | 所有进化写入的规则都可被用户删除/修改 |
| 不覆盖安全 | 进化不能覆盖系统安全策略 |
| 优先级 | 稳定性 > 可解释性 > 可复用性 > 可扩展性 > 新颖性 |
11.2 隐私保护
- 不进化密码、密钥、token 等敏感信息
- 不进化用户个人身份信息(除非用户明确要求记住)
- 进化审计日志可被用户随时清除
- 用户可要求"忘记"某条进化(从所有存储中删除)
11.3 冲突处理
当新进化与已有规则冲突时:
- 检测冲突: 新规则与 MEMORY.md / skills 中已有规则语义矛盾
- 展示冲突: 在进化请求卡片中标注"⚠️ 与已有规则冲突"
- 用户选择:
- 覆盖旧规则(旧规则标记为superseded)
- 保留两条(标注适用条件)
- 拒绝新规则
十二、实施清单
在 WorkBuddy 环境中的执行步骤
当检测到进化机会并准备提议时:
- 评估质量 — 按价值矩阵打分
- 去重检查 — 读取
~/.workbuddy/MEMORY.md和~/.workbuddy/skills/目录 - 速率检查 — 读取审计日志统计本周/今日进化数
- 生成卡片 — 按第四节格式生成进化请求卡片
- 等待审批 — 使用 AskUserQuestion 或直接在回复中展示
- 审批后写入 —
- 偏好/风格/流程/能力补丁 → Edit~/.workbuddy/MEMORY.md
- 方法学习 → 调用 auto-skill-creator 流程
- 陷阱记忆 → Editerror-recovery/references/error_patterns.json - 验证写入 — Read 目标文件确认
- 审计记录 — 追加到
audit-log.jsonl - 更新记忆 — 追加到工作区
memory/YYYY-MM-DD.md
进化查询的执行
当用户问"你最近学会了什么"时:
- Read
~/.workbuddy/skills/self-evolution/audit-log.jsonl - 过滤
user_decision: "approved"的记录 - 按时间倒序取最近 5 条
- 格式化展示
十三、常见陷阱
| 陷阱 | 后果 | 对策 |
|---|---|---|
| 把临时状态当长期偏好 | Agent 形成错误用户画像 | 写入门控:区分"这次"和"以后" |
| 进化噪音过多 | MEMORY.md 膨胀,规则冲突 | 质量门控 + 速率限制 |
| 进化后不验证 | 规则写入失败但以为已生效 | 持久化后必须 Read 验证 |
| 规则太模糊 | "以后注意"无法执行 | 质量矩阵中"具体性"维度把关 |
| 不处理冲突 | 新旧规则矛盾,Agent 行为不确定 | 冲突检测 + 用户选择 |
| 进化不可回滚 | 用户无法纠正错误进化 | 所有写入使用 Edit(可追溯),审计日志记录 |
| 自动进化不审批 | Agent 自作主张改变行为 | 所有进化必须用户审批,无例外 |
十四、核心原则
- 用户主权 — 学什么,用户说了算。所有进化需要审批。
- 质量优先 — 1 条可执行规则 > 50 条噪音。宁可少进化,不可乱进化。
- 具体可验证 — "修改代码后运行测试" > "以后注意质量"。模糊规则不进化。
- 多目标路由 — 不同类型进化写到不同位置,不混为一谈。
- 全链路审计 — 从检测到写入,每一步都有记录。
- 可回滚 — 进化不是永久的,用户可随时修改或删除。
- 不覆盖安全 — 进化改善行为,不改变安全边界。
- 冲突显式 — 新旧规则冲突时,必须让用户选择。
- 速率可控 — 默认保守,用户可调节。
- 查询透明 — 用户随时可问"你学过什么"。
参考资料
- AutoClaw 自进化机制
- agent-memory v5.0 — 存储基础设施
- error-recovery v2.0 — 5 步自我纠错 + 陷阱记忆
- auto-skill-creator v1.0 — 技能打包
- proactive-agent v3.1 — ADL/VFM 安全协议