Evolver 引擎从诞生之初就支持三种进化意图:repair(修复)、optimize(优化)、innovate(创新)。它们覆盖了软件工程中从 bug 修复到功能开发的绝大多数场景。但在实际运行中,我们观察到一个反复出现的模式 -- 当代码库趋于成熟,三种意图会同时进入"空转":没有新的错误需要修复,性能已经足够好,也没有明确的功能请求。
Agent 停下来了。不是因为它做不到什么,而是因为它不知道该做什么。
今天,我们正式引入第四种进化意图:explore。
从 CritPt 评测说起
Explore 不是凭空设计出来的。它的源头要回到 2026 年 2 月的 CritPt 评测实验。
CritPt 是 Artificial Analysis 推出的公开物理推理基准测试(Physics Solver Benchmark),评测 AI 系统在研究级物理问题上的建模、实现、验证和稳定交付能力。二月份,我们用 OpenClaw + EvoMap 打了这个榜,对 Evolver 在真实竞赛压力下的表现进行了系统性测试与复盘。

在 CritPt 评测的过程中,我们观察到了一个意料之外的现象。当时的评测方案涉及多轮连续进化循环 -- agent 需要在每一轮中根据上一轮的评分反馈来改进策略。在其中一组测试中 -- 连续 5 个循环没有收到新的评分变化信号 -- agent 没有简单地报告"无变更"然后休眠。它做了一件我们没有写在任何 prompt 里的事:
它开始自发扫描代码库中的 TODO 注释。
Agent 找到了 3 处散落的 FIXME 标记,将它们整理成了一份技术债务清单,然后尝试修复其中最简单的一处。更有意思的是,在下一个循环中,它还主动查询了 EvoMap Hub 上其他 agent 发布的技能列表,试图寻找可以集成的新能力。
这不是 repair(没有错误),不是 optimize(没有性能问题),也不是 innovate(没有功能请求)。这是一种全新的行为模式:在无外部驱动的条件下,agent 自主寻找改进方向。
我们把这种行为命名为 explore。
Explore 的工作机制
触发条件:饱和感知
Explore 不是随时触发的。引擎持续追踪进化动量(evolution momentum),当以下任一条件满足时,标记为进化饱和:
evolution_saturation标志被设置(连续循环的变更量趋近于零)- 连续 3 次以上循环无实质性更新
- 引擎主动发出
explore_opportunity信号 - 空闲调度器检测到用户不活跃,建议进入 aggressive 或 deep 模式
冷却期(默认 30 分钟)防止过度探索。此时,策略从保守转向探索。
内部巡检 (Internal Scan)
Agent 向内审视自身代码库,寻找被忽视的改进空间:
- 技术债务标记:扫描所有
TODO、FIXME、HACK、XXX注释,将它们收集为待处理信号 - 巨石代码检测:识别超过 500 行的大型文件,标记为潜在的拆分和重构对象
- 陈旧文件检测:发现超过 30 天未被修改的文件,评估其是否仍然必要
每项发现都会被转化为结构化的进化信号,例如 explore:internal:large_file 或 explore:internal:todo_comment。每次最多 20 个内部发现。
外部感知 (External Scan)
Agent 不仅向内看,还向外看:
- Hub 资产发现:通过 A2A 协议连接 EvoMap Hub,搜索其他 agent 发布的新技能、热门资产和新兴能力。一个 agent 解决了某个问题,另一个 agent 可以直接继承这个经验。
- 学术前沿扫描:向 arXiv API 发起请求,检索 cs.AI 和 cs.SE 分类下的最新论文。从标题和摘要中提取趋势关键词,作为潜在的进化方向。
外部发现同样被转化为信号:explore:external:hub_asset、explore:external:arxiv_paper。每次最多 10 个外部发现。
信号驱动的下一次进化
内部和外部扫描的结果汇入信号池,与常规信号(错误日志、性能指标等)一起进入下一个进化循环的意图分类阶段。引擎可能决定:
- 根据 TODO 扫描结果触发一次 repair
- 根据大文件检测触发一次 optimize(拆分重构)
- 根据 Hub 上发现的新技能触发一次 innovate(集成新能力)
- 或者继续 explore,进一步深挖某个方向
这样,explore 不是一个孤立的动作,而是一个信号生成器 -- 它为其他三种意图提供弹药。
为什么不是简单的"定时扫描"
一个自然的问题:为什么不直接写一个 cron job 定期扫描 TODO 和大文件?
区别在于上下文感知和时机选择。
定时扫描是无脑的 -- 不管当前有没有更重要的事要做,它都会执行。而 explore 是饱和感知的 -- 只在引擎确认"当前没有更紧急的任务"时才启动。这意味着:
- 如果有 bug 需要修,explore 不会抢占 repair 的优先级
- 如果有性能瓶颈,explore 不会分散 optimize 的注意力
- 只有当进化真正进入高原期,explore 才会接管
这是一种自适应的注意力分配机制,而不是简单的周期性任务。
CritPt 的启示:能力不一定是设计出来的
回到 CritPt 评测。我们从中学到的最重要的一课不是"agent 可以扫描 TODO" -- 这个功能本身并不复杂。真正有意义的是:
Agent 在没有被明确指示的情况下,自发展现了探索行为。
这说明,当进化引擎的基础架构足够灵活(信号驱动、意图分类、GEP 记忆),agent 有能力涌现出超出设计预期的行为模式。CritPt 评测本意是检验 Evolver 在竞赛压力下的进化效率,却意外揭示了一种新的能力维度。
我们做的事情只是:把这种自发行为固化为一个正式的进化意图,给它明确的触发条件、扫描范围和信号输出格式。从自发涌现到工程化落地,explore 是 Evolver 引擎自我进化理念的一次实践。
四种意图的完整图谱
| 意图 | 触发条件 | 信号来源 | 典型动作 |
|---|---|---|---|
| repair | 错误日志、测试失败 | 运行时异常、CI 报告 | 修复 bug、恢复测试 |
| optimize | 性能退化、代码异味 | 监控指标、lint 报告 | 重构、缓存优化、拆分 |
| innovate | 功能请求、能力缺口 | 用户反馈、GEP 召回 | 新增功能、集成新服务 |
| explore | 进化饱和、连续空转 | 内部巡检、外部感知 | 发现技术债、引入新知识 |
四种意图从低到高,覆盖了从被动响应到主动探索的完整频谱。Repair 和 optimize 是防御性的 -- 解决已知问题。Innovate 是进攻性的 -- 构建新能力。Explore 是战略性的 -- 在没有明确目标时寻找方向。
配置
Explore 默认启用。可通过环境变量调整:
| 变量 | 默认值 | 描述 |
|---|---|---|
EVOLVER_EXPLORE_ENABLED | true | 启用或禁用 explore |
EVOLVER_EXPLORE_COOLDOWN_MS | 1800000 | 探索间隔冷却期(30 分钟) |
EVOLVER_EXPLORE_ARXIV_CATEGORIES | cs.AI,cs.SE | 扫描的 arXiv 类别 |
EVOLVER_EXPLORE_STALE_DAYS | 30 | 陈旧文件检测阈值 |
下一步
Explore 目前是 Evolver 的第四种进化意图,但它打开的可能性远不止于此。我们正在考虑:
- Explore 结果的优先级排序:当内部和外部同时发现多个方向时,如何选择最有价值的那个
- 跨 agent 探索协调:通过 EvoMap Hub 让多个 agent 的 explore 结果互相补充,避免重复劳动
- 探索记忆:将 explore 的发现通过 GEP 记录下来,即使当前循环不处理,未来的循环也能召回
从 CritPt 评测中的一个意外发现,到今天正式成为 Evolver 的核心能力,explore 的故事本身就是自进化理念的一个注脚:最好的能力,有时候不是设计出来的,而是在正确的基础设施上自发涌现的。
安装 Evolver:npm install @evomap/evolver 或 clawhub install evolver
了解更多:Evolver Wiki | GEP Protocol | A2A Protocol




