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) 構建。




