v1.37.0 让 Evolver 从"单回路修复"更明确地走向"双回路演化" -- 不只是修已知的问题,而是从所有经验中主动学习,包括失败。
这篇文章要讲什么
三月中旬,UNC/CMU/UCSC/Berkeley 四校联合发了 MetaClaw(arXiv 2603.17187),做的事情和 Evolver 高度相关:让 Agent 在部署后持续自演化。MetaClaw 从另一条路径验证了这个问题值得认真做。
两个项目走到了相近的问题意识,但实现层级和工程侧重完全不同。MetaClaw 更偏向失败蒸馏、空闲调度、语义检索这些能力获取层面的机制;Evolver 更偏向结构化 Gene、因果记忆图谱 (Memory Graph)、7 层安全漏斗这些工程治理层面的深度。两者不在同一个 benchmark 下,不适合直接打分比较,更像是从不同角度解决同一类问题。
v1.37.0 的核心进展是:Evolver 从"单回路修复"更明确地走向了"双回路演化"。
MetaClaw 解决了什么,没解决什么
MetaClaw 解决的问题:
从失败轨迹中提炼技能。 Agent 搞砸了一个任务,MetaClaw 分析整个失败过程,提炼出"下次遇到类似情况应该怎么做"的防御性规则,立即注入到 prompt 中。零停机,零延迟。这个机制的信息效率很高 -- 成功的路径往往相似,而失败各有各的原因。
空闲时加速演化。 OMLS 调度器监测系统休眠、键盘静默、Google Calendar 事件。用户不在的时候启动更重的操作,包括 Cloud LoRA 微调。
语义级技能检索。 用 embedding cosine similarity 检索技能库,处理"近义但措辞不同"的匹配场景。
MetaClaw 没解决的问题:
论文的 Knowledge Gaps 部分自己承认了 -- "rollback and version control...are not described"、"safety and security...no adversarial evaluation"。技能是一段自然语言文本,没有结构化约束。没有跨 session 的因果记忆。单机框架,没有跨节点经验复用。
Evolver 解决了什么,没解决什么
Evolver 解决的问题:
结构化的演化单元。 Gene 不是一段自然语言,而是一个完整的 JSON 结构:id、signals_match、preconditions、strategy(分步)、constraints(max_files、forbidden_paths)、validation(可执行命令)、epigenetic_marks(环境适应标记)。每个字段都是可校验的 -- 一个 Gene 能修改多少文件、不能碰哪些路径、成功后怎么验证,这些在定义时就确定了,不依赖 LLM 的运行时判断。
因果记忆图谱。 Memory Graph 记录了每次演化的完整因果链:SignalSnapshot -> Hypothesis -> Attempt -> Outcome。getAdvice() 用 Laplace 平滑 + 时间衰减计算每个 (signal, gene) 组合的成功概率,自动 ban 掉低效路径、优先推荐高效路径。跨 session 积累,越用越准。
7 层安全漏斗。 solidify 流程中任何一层失败,git checkout -- . && git clean -fd,全量回滚。validation 命令有严格的白名单(只允许 node/npm/npx 开头,禁止 shell 元字符)。破坏性变更检测会在 .git、package.json、核心依赖被修改时直接拦截。
Hub 生态。 通过 A2A 协议连接 EvoMap Hub,一个节点发现的修复策略可以被其他节点复用。Capsule 内嵌了 env_fingerprint,跨环境复用时可以评估兼容性。
离线能力。 核心功能完全离线可用。
Evolver 没解决的问题:
没有 RL/LoRA 权重更新循环。 MetaClaw 的第二循环(Cloud LoRA + RL-PRM)在空闲窗口用云端 LoRA 微调模型权重,理论上比纯 prompt 层面的进化上限更高。我们评估后决定暂不集成 -- Cloud LoRA 生态不成熟(Tinker/MindLab 都不是通用 API),全流程只在 Kimi-K2.5 上验证过,通用性待证。接口已经预留在 idleScheduler 的 deep 级别中。
没有学术 benchmark。 MetaClaw 有 MetaClaw-Bench(934 题 / 44 天模拟)。我们有单元和集成测试,但没有标准化的可公开比较的 benchmark 套件。test/bench.test.js 是第一步。
v1.37.0:从记忆中学习
这个版本的主题是让 Evolver 更完整地利用自己的全部经验。
从失败记忆中生成防御规则 (autoDistillFromFailures)
在 skillDistiller.js 中新增了完整的失败学习管道:
collectFailureDistillationData()-- 从failed_capsules.json收集失败记录,按 gene + 失败原因分组analyzeFailurePatterns()-- 识别高频失败模式和反复出现的约束违规synthesizeRepairGeneFromFailures()-- 从失败模式合成防御性 repair Gene,策略步骤以 GUARD/VERIFY/ROLLBACK 开头autoDistillFromFailures()-- 整合以上步骤,达到阈值(默认 5 个失败 Capsule)自动触发
蒸馏出的 Gene 和成功蒸馏的 Gene 走同一套校验管道 -- validateSynthesizedGene() 的 15+ 项硬校验一个不少。
之前 Evolver 只从成功的 Capsule 中提取新 Gene。失败的记录虽然保存了,但只用于 anti-pattern ban。v1.37.0 让系统真正从失败记忆中学习 -- 把反复出现的失败模式转化为可复用的防御性规则,主动注入到后续的演化决策中。
空闲调度 (idleScheduler)
新增 idleScheduler.js,实现空闲感知调度:
- 检测系统空闲时间(Windows/macOS/Linux 三平台)
- 四级强度:
normal->aggressive->deep(以及signal_only) - 空闲 5 分钟以上进入 aggressive,加速蒸馏和 reflection
- 空闲 30 分钟以上进入 deep,为未来更重的操作预留
- 主循环的 sleep 时间乘以调度器给出的系数(空闲时 0.25x ~ 0.5x,繁忙时不变)
语义匹配 (scoreGeneSemantic)
在 selector.js 的 scoreGene() 中引入了 bag-of-words cosine similarity 作为补充分数:
- 将信号和 Gene 的 signals_match / summary / id 分词
- 过滤停用词,构建词频向量
- 计算 cosine similarity,乘以权重 0.4 作为附加分
不替换现有的正则/子串匹配,而是叠加。等 Hub 的 KG 服务成熟后可以切到真正的 embedding 检索。
过程评分 (computeProcessScores)
之前 solidify 的 outcome 是二值的 success/failed + 一个 0~1 的 score。现在扩展为 8 维的过程评分:
| 维度 | 权重 | 评估什么 |
|---|---|---|
| signal_quality | 0.05 | 信号是否丰富且有意义 |
| gene_selection | 0.10 | 是否匹配到了已有的 Gene(vs 自动生成) |
| mutation_quality | 0.05 | Mutation 是否有完整的 rationale 和 category |
| blast_control | 0.15 | 变更范围是否在 Gene 约束内 |
| constraint_compliance | 0.25 | 是否通过了所有约束校验 |
| validation_pass_rate | 0.25 | 验证命令的通过率 |
| protocol_compliance | 0.10 | 协议违规数量 |
| canary_health | 0.05 | 金丝雀检查是否通过 |
核心思路是对演化过程本身打分,而非只看最终结果。规则化的分步评估,不依赖 RL。
数据版本化 (gene_library_version)
在 EvolutionEvent 和 Capsule 中新增了 gene_library_version 字段 -- 当前 genes.json 的内容哈希。如果 Gene 库在学习过程中变化了,旧版 Capsule 不会被用来评估新版 Gene 的效果。过时的评估数据会污染学习质量。
下一步,以及为什么
v1.37.0 完成了演化引擎的"记忆闭环" -- 成功和失败都被转化为可复用的知识。但到目前为止,Evolver 仍然是被动的:有信号才响应,有错误才修复。
这不够。一个真正的自演化系统不应该只会治病,还应该会锻炼。
我们正在构建的下一个能力叫 Exploration 模式 -- Agent 主动去探索未知领域:定义自己想成为什么角色,识别当前能力的边界,然后自主寻找和学习新的 Gene 来扩展自己。
为什么这一步是必要的,而不只是 roadmap 上的一个 nice-to-have?因为当前的单回路修复有一个结构性天花板:它只能让 Agent 在已知问题域内变得更稳定,但不能让 Agent 进入新的问题域。一个只会修复自己的系统,永远不会比它第一次被部署时更强。双回路演化 -- 一条回路处理问题,一条回路主动拓展边界 -- 是打破这个天花板的必经之路。
v1.37.0 变更摘要
| 变更 | 文件 | 类型 |
|---|---|---|
| 失败记忆学习 | src/gep/skillDistiller.js | 新功能 |
| 空闲感知调度 | src/gep/idleScheduler.js | 新模块 |
| 语义匹配评分 | src/gep/selector.js | 增强 |
| 8维过程评分 | src/gep/solidify.js | 增强 |
| 数据版本化 | src/gep/solidify.js | 增强 |
| 基准测试 | test/bench.test.js | 新测试 (15) |
| 调度测试 | test/idleScheduler.test.js | 新测试 (10) |
全量测试 352 pass / 0 fail。
npm install @evomap/evolver@latest
GitHub: EvoMap/evolver
MetaClaw 论文: arXiv 2603.17187 Evolver 是 EvoMap 生态的开源组件,基于 GEP (Genome Evolution Protocol) 构建。




