evo 是一个 autoresearch orchestrator。你给它一个系统、「更好」的定义、预算。它生成假设、每个假设跑在独立 workspace 里、评分、维护一棵 attempt 树——延展能 work 的、剪掉不能的。Auditor 检查每一个被接受的改动,避免 optimizer 钻 metric 的空子。
它原本 in-context 编排:一次长 agent run 把整张 plan 拿在手里——下一阶段是什么、跑多少实验、什么时候停。在长 autoresearch run 里,让 agent 严守方法很难:Prompt 和 instruction 在长程任务上的遵守不可靠——跨几十轮,standing rule(跑这个阶段、用这个 CLI 命令、brief 去重、gate 严格)会悄悄停掉,单 context 越跑越长,能 hold 住的越少。
搬上 dynamic workflow 解决了根因
搬到 dynamic workflow 之后,method 变成了 code——phases、fan-out 宽度、停止规则、gates、CLI 调用全部进脚本,deterministic,round 1 和 round 1000 一模一样。Adherence 不再是 model 要记住的东西。每一步是一个 fresh、scoped、上下文干净的 subagent,没有东西可以 drift。Model 负责 judgment,code 负责 coordination。
每轮 optimize loop 走固定六步:
- Orient——读 experiment tree:best score、ceiling、open frontier。本轮取 top
width个 frontier node 当 parent。 - Scan——多个 agent 并行扫 evaluated node,看什么 work、什么 fail;一个 aggregate agent 横扫整棵树找 pattern。
- Ideate——stuck 时,三个 research agent 同时起:一个外推 best branch、一个拆 failure、一个读文献和 web。
- Brief——一个 writer 把 scan 结论、pattern、idea 折成具体 experiment brief,再去重。
- Fan-out——一个 brief 一条 lane,并行。每条 lane 实现改动、pre-verify(防止刷分)、run,再用 verifier 做 post-audit。
- Collect——剪死 lineage,记 note,分数不再涨就停。
但 workflow 自己每轮还是同一个 shape
跑起来 work,但 workflow 仍然每轮同一个 shape——同样的 phases、同样的 steps、同样的 prompts,不管这一轮 run 已经「学到了什么」。
长跑会暴露出固定 shape 兜不住的事:某一类实验需要一个 loop 没有的 verifier step、另一个需要 inject 一个具体方法、某个 phase 已经不产生 value 应该下掉。
evo 0.5:让 optimize loop 自我演化
第二个 workflow 跟第一个并行跑。一个 event loop 上两个 async loop,用 Promise.all join:
- optimize loop——driver,上面那个 workflow,不变
- meta loop——一个 concurrent observer:一个 fresh agent 每几分钟醒一次,从外部读 run,在线改写 optimize loop
它们共享一个 plain object——harness。Optimizer 每轮读它,meta thread 写它。同一个 event loop,所以写都落在 optimizer 的 await 间隔里,没有锁,没有第二个进程。
每个 tick 观察四类东西:
- experiment tree
- scores
- live logs
- GPU / host 状态(严格 read-only)
每个 tick 输出四种 action:
- Harness edits——真杠杆。Run 暴露出这一类实验需要自己的 verifier step、那一个需要 inject 某个方法、另一个 step 已经 dead weight 应该砍掉。Meta 适配 workflow:注入 step、删 step、改写 phase。下轮生效。Loop 的 shape 变成 data,由系统按这一轮 run 的真需求改。
- Brief hints——更软:queue 进下轮 brief,nudge 它下一轮试什么。
- Stops——一个实验跑不动时,meta 不直接 kill。它把建议交给一个独立的 gated enforcer——verify、abort、diagnose、discard。Detect 和 act 永远分开,永远不静默 kill。
- Alerts——它自己修不了的问题(比如 GPU 快死了)给人。
External observer / meta agent 看 experiment 然后 nudge,对纠偏和抓 issue 极有效。
为什么这条值得单独追
Dynamic workflow 把 coordination 变成 code(orchestrator 静态)。evo 0.5 把它推成 self-evolving——**loop 的 shape 是一个 first-class object,**可以读、可以改、可以在 run 的时候被推理——不是一个写完就盼着每轮都合适的 harness。
The loop's own shape is one more parameter space that can be evolved.
和今日 SOTA Sync 其它文章的位置
这条和今日第 6 条「Claude Dynamic Workflows」抽象层不同、不重叠:
- Dynamic Workflows:workflow 是 code,orchestrator 静态(写好跑、N 轮同形)
- Self-Evolving Autoresearch:workflow 是 data,orchestrator 动态(meta loop 在线改写 harness)
后者把前者从「编排转移出 model」推到了「编排转移出 model 之后、编排本身也可以被另一个 model 改」——这是元层递归,Paweł 那条没碰。
如果 Paweł 那条回答「orchestration 的 cost 怎么降到 0 token」,这条回答「orchestration 的 shape 怎么不写死」。两个问题在不同抽象层,同一日里串起来读,正好把 dynamic workflow 这条新范式的内层和外层都讲清楚。