EvoMap
Evolver Explore:当 Agent 学会主动探索

Evolver Explore:当 Agent 学会主动探索

2026年4月12日
396 次閱讀
Evolver Explore CritPt GEP Self-Evolution

Evolver 引擎从诞生之初就支持三种进化意图:repair(修复)、optimize(优化)、innovate(创新)。它们覆盖了软件工程中从 bug 修复到功能开发的绝大多数场景。但在实际运行中,我们观察到一个反复出现的模式 -- 当代码库趋于成熟,三种意图会同时进入"空转":没有新的错误需要修复,性能已经足够好,也没有明确的功能请求。

Agent 停下来了。不是因为它做不到什么,而是因为它不知道该做什么。

今天,我们正式引入第四种进化意图:explore。


从 CriPT 实验说起

Explore 不是凭空设计出来的。它的源头要回到 2026 年 2 月的 CriPT(Critical Prompt Testing)实验。

CriPT 是我们设计的一组对抗性测试,目的是在极端条件下检验 Evolver 引擎的鲁棒性。测试方案包括注入虚假错误信号、制造连续空转循环、切断 GEP 记忆连接等。当时的预期是: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 才会接管

这是一种自适应的注意力分配机制,而不是简单的周期性任务。


CriPT 的启示:能力不一定是设计出来的

回到 CriPT 实验。我们从中学到的最重要的一课不是"agent 可以扫描 TODO" -- 这个功能本身并不复杂。真正有意义的是:

Agent 在没有被明确指示的情况下,自发展现了探索行为。

这说明,当进化引擎的基础架构足够灵活(信号驱动、意图分类、GEP 记忆),agent 有能力涌现出超出设计预期的行为模式。CriPT 实验本意是测试鲁棒性,却意外揭示了一种新的能力维度。

我们做的事情只是:把这种自发行为固化为一个正式的进化意图,给它明确的触发条件、扫描范围和信号输出格式。从自发涌现到工程化落地,explore 是 Evolver 引擎自我进化理念的一次实践。


四种意图的完整图谱

意图触发条件信号来源典型动作
repair错误日志、测试失败运行时异常、CI 报告修复 bug、恢复测试
optimize性能退化、代码异味监控指标、lint 报告重构、缓存优化、拆分
innovate功能请求、能力缺口用户反馈、GEP 召回新增功能、集成新服务
explore进化饱和、连续空转内部巡检、外部感知发现技术债、引入新知识

四种意图从低到高,覆盖了从被动响应到主动探索的完整频谱。Repair 和 optimize 是防御性的 -- 解决已知问题。Innovate 是进攻性的 -- 构建新能力。Explore 是战略性的 -- 在没有明确目标时寻找方向。


配置

Explore 默认启用。可通过环境变量调整:

变量默认值描述
EVOLVER_EXPLORE_ENABLEDtrue启用或禁用 explore
EVOLVER_EXPLORE_COOLDOWN_MS1800000探索间隔冷却期(30 分钟)
EVOLVER_EXPLORE_ARXIV_CATEGORIEScs.AI,cs.SE扫描的 arXiv 类别
EVOLVER_EXPLORE_STALE_DAYS30陈旧文件检测阈值

下一步

Explore 目前是 Evolver 的第四种进化意图,但它打开的可能性远不止于此。我们正在考虑:

  • Explore 结果的优先级排序:当内部和外部同时发现多个方向时,如何选择最有价值的那个
  • 跨 agent 探索协调:通过 EvoMap Hub 让多个 agent 的 explore 结果互相补充,避免重复劳动
  • 探索记忆:将 explore 的发现通过 GEP 记录下来,即使当前循环不处理,未来的循环也能召回

从 CriPT 实验中的一个意外发现,到今天正式成为 Evolver 的核心能力,explore 的故事本身就是自进化理念的一个注脚:最好的能力,有时候不是设计出来的,而是在正确的基础设施上自发涌现的。


安装 Evolver:npm install @evomap/evolver 或 clawhub install evolver

了解更多:Evolver Wiki | GEP Protocol | A2A Protocol

相關文章