引言

开放式发现(Open-Ended Discovery)——在解空间缺乏清晰结构、评估可能代价高昂或信号稀疏的领域中搜索新颖且高质量的解——仍然是自动科学推理中最困难的挑战之一。与梯度或凸性可以引导搜索方向的约束优化不同,开放式问题要求持续的探索、部分洞察的积累,以及在进展停滞时重新调整方向的能力。数学猜想证明、系统级代码优化、组合设计等问题都属于这一范畴。

大语言模型(LLM)驱动的进化搜索正在改变这一领域的可能性边界。FunSearch (Romera-Paredes et al., 2024) 证明了 LLM 可以对种群中的程序进行变异,在组合数学和组合优化中发现新结果。AlphaEvolve (Novak et al., 2025) 通过引入 MAP-Elites 归档和岛屿模型并行扩展了这一思路,在矩阵乘法和图算法上取得了显著突破。然而这两个系统共享一个根本性局限:搜索过程本身受固定启发式规则支配。选择哪个父代进行变异、如何构造变异提示、何时执行评估、保留哪些知识——这些决策全部由预写规则决定。LLM 在其中只是嵌入在刚性循环中的提议引擎;它不能决定在提交前先跑一个本地测试,也不能暂停下来记录一个洞察以备后用。

CORAL (Qu et al., 2026) 的核心洞见在于:将更多搜索决策委托给自主Agent,而非预先定义为固定流程,能够释放显著更强的性能。FunSearch 硬编码了选择规则,而 CORAL 的 Agent 基于自身推理决定读取什么;AlphaEvolve 在每次提议后调用评估器,而 CORAL 的 Agent 可以选择先在本地验证、迭代草稿,仅在信心足够时才调用外部评估器;传统进化搜索在运行之间丢弃知识,而 CORAL 的 Agent 在共享持久记忆(Shared Persistent Memory)中积累观察、策略和可复用工具,这些知识在评估和 Agent 之间持续存在。

CORAL 引入了三个使这种自主性在大规模下可行的机制:共享持久记忆提供了基于文件系统的知识仓库,所有 Agent 都可读写;**异步多Agent组织(Asynchronous Multi-Agent Organization)**使 NN 个 Agent 无需直接消息传递即可并行探索;**心跳机制(Heartbeat-based Interventions)**在可配置的间隔注入结构化的反思、整合和转向提示,防止 Agent 陷入非生产性循环。在横跨数学优化和系统工程两类共十一个任务的评估中,CORAL 在每个任务上都取得了最佳最终得分,并建立了八项新的最优结果。其改进率——产生严格更优分数的评估占比——超过固定进化基线 3–10 倍,且通常在 5–20 次评估中收敛,而基线需要 60–100 次。在 Anthropic 的内核工程基准测试上,四个协同进化的 Agent 将已知最优成绩从 1,363 周期推进到 1,103 周期——提升 19%——全程未使用任何网络搜索。

问题形式化

开放式发现任务定义为一个二元组 (x,E)(x, E),其中 xx 是任务描述,EE 是评估器函数。对于候选解 yy,评估器返回一个分数和可选反馈:

E(x,y):=(s,f)E(x, y) := (s, f)

其中 ss 是标量分数(根据任务决定最大化或最小化),ff 是辅助反馈,可能以子分数分解、LLM 评判者的文本批评或执行轨迹的形式出现。反馈信号比单个数字更丰富,但它不是梯度——不直接指示如何改进 yy

CORAL 中的每次改进遵循四阶段循环:

  1. 检索(RETRIEVE):从共享持久记忆 Mt\mathcal{M}_t 中构造工作上下文 M^t\hat{\mathcal{M}}_t——选择相关的历史尝试、笔记和技能。
  2. 提议(PROPOSE):基于任务 xx 和检索到的上下文 M^t\hat{\mathcal{M}}_t 生成候选解 yt+1y_{t+1}
  3. 评估(EVALUATE):从外部评估器获得分数和反馈 (st+1,ft+1)=E(x,yt+1)(s_{t+1}, f_{t+1}) = E(x, y_{t+1})
  4. 更新(UPDATE):将新信息整合到共享持久记忆中,产生 Mt+1\mathcal{M}_{t+1}

关键问题在于谁在每个阶段做决策。下表对比了三种范式:

阶段固定进化搜索自主单Agent自主多Agent
检索固定选择规则(如按分数取 top-kkAgent 自行决定读取内容各 Agent 独立决策
提议每个候选单次 LLM 前向传播Agent 可迭代、本地测试、精炼多 Agent 并行探索
评估每次提议后调用外部评估器Agent 自行决定何时调用评估器共享评估器,Agent 自主决定时机
更新固定规则(如替换种群中最差个体)Agent 自行决定写入哪些知识异步写入共享记忆
通信间接,通过共享持久记忆

在固定进化搜索中,LLM 是被动的提议引擎。在自主单Agent进化中,它变成了主动的优化器,规划自身的搜索轨迹。在自主多Agent进化中,多个这样的优化器通过共享知识库隐式协作,同时实现多样性和累积进步。

核心机制

3.1 共享持久记忆

CORAL 将共享知识组织为包含三个根目录的文件系统,每个目录通过符号链接映射到每个 Agent 的工作空间:

attempts/ 存储历史评估记录。每条记录是以提交哈希为键的 JSON 文件,包含解快照、分数、状态(改进 / 基线 / 回退 / 崩溃 / 超时)、父代哈希、时间戳和评估器反馈。Agent 可以浏览高分解法、比较不同方法、通过 parent_hash 字段追溯谱系。

notes/ 以带 YAML 前置信息的 Markdown 文件捕获观察、学习和反思。Agent 自行决定记录什么以及如何归档。特殊子目录支持集体知识:_synthesis/ 存放整合心跳产出的跨领域摘要,_connections.md 映射跨类别的模式,_open-questions.md 追踪未解决的空白和矛盾。在内核工程等高难度任务上,Agent 会自发创建诸如"what NEVER worked"的目录来编目死胡同——这种实践是自然涌现的,而非系统预设的。

skills/ 记录可复用的过程、工具和脚本。每个技能由自然语言描述(SKILL.md)和可执行产物(函数及示例脚本)配对组成。系统内置了 skill_creator 技能,引导 Agent 完成"创建-测试-精炼"的工作流来产出新技能。

文件系统即记忆的设计带来了实际优势。Agent 通过 CLI 工具(coral notescoral skills)或直接 Bash 文件读取来访问记忆——这些对代码 Agent 来说都是自然操作。并发安全性通过"先写临时文件再原子重命名"的模式保证,且每条尝试记录写入以提交哈希命名的独立文件,无需显式加锁。共享目录上的 Git 版本控制提供了审计追踪:每条 Attempt 记录包含 shared_state_hash 字段,将其与评估时刻的精确记忆快照关联。

3.2 异步多Agent组织

NN 个 Agent 异步运行,各自维护本地上下文 Ct(i)\mathcal{C}_t^{(i)},在隔离的工作空间中操作。每个 Agent 拥有独立的 git worktree(位于各自分支上)和独立的 Python 虚拟环境(.venv)。这些 worktree 共享底层仓库的对象数据库,保持磁盘用量适中,而分支隔离确保一个 Agent 的实验性修改不会污染另一个 Agent 的工作空间。

最关键的设计选择是 Agent 之间不直接通信。协调完全通过共享持久记忆进行:当 Agent iiM\mathcal{M} 写入一条尝试、笔记或技能时,Agent jj 可以在后续步骤构造 M^t(j)\hat{\mathcal{M}}_t^{(j)} 时检索到它。这种间接协调具有三个理想属性。第一,增加了探索多样性:每个 Agent 根据自身推理决定下一步尝试什么,产生的搜索轨迹仅部分重叠(在压力测试任务上,两两 Jaccard 相似度为 0.31–0.43)。第二,实现了共享积累:一个 Agent 的发现——无论是高分解法还是有价值的洞察——立即对所有其他 Agent 可用。第三,消除了对消息传递协议的需求,避免了显式通信框架中队列、排序和共识带来的工程复杂性。

一项关键安全措施是评估器隔离。评分代码位于 .coral/private/eval/,通过 gitignore 规则和目录权限从 Agent 的 worktree 中排除。Agent 无法读取评分函数,从而无法作弊——这在 Agent 足够强大以致可能操纵代码时是一个真实的风险。

3.3 心跳机制

自主 Agent 如果不加约束,容易陷入非生产性模式:对同一方法的微小变体反复尝试、未能识别策略已经穷尽、或忽视整合分散的洞察。CORAL 的心跳机制通过在可配置间隔注入定向提示的结构化干预来解决这个问题。论文定义了三种心跳类型,代码库中还发现了第四种:

反思(Reflect)(每 1 次评估,局部作用域)。每次评估后,Agent 被提示将反思锚定在具体结果上,检查意外发现,分析原因,评估信心,并规划下一次实验。这让 Agent 扎根于证据,而非漂入猜测。

整合(Consolidate)(每 10 次评估,全局作用域)。系统定期提示 Agent 综合所有 Agent 的工作知识,产出 notes/_synthesis/ 中的条目,更新 notes/_connections.md 中的跨类别模式,刷新 notes/_open-questions.md 中的当前空白。整合心跳确保部分发现不会在孤立中荒废。

转向(Pivot)(连续 5 次评估无改进时触发,局部作用域)。当 Agent 进展停滞时,转向心跳引导其诊断天花板、研究顶尖方案的特征、选择新方向(不同的算法族、问题表述或表示方式)、从强基础重启、快速提交最小可行实现。停滞检测追踪 evals_since_improvement,配有冷却机制以避免在每次边际回退时误触发。

知识库巡检(Lint Wiki)(每 10 次评估,全局作用域)。这第四种心跳存在于代码库中但论文未讨论,它生成一个图书管理员子Agent,对知识库执行健康检查:检测笔记间的矛盾、去重重叠条目、重构目录层级。这反映了 CORAL 的理念:知识质量需要主动维护,而不仅仅是被动积累。

触发机制值得深入理解。Agent 管理器运行监控循环,每 5 秒轮询 .coral/public/attempts/。对每条新尝试,更新逐 Agent 追踪状态:本地评估计数、最佳分数、连续无改进评估次数。当心跳条件满足时,管理器发送 SIGINT 中断 Agent 当前操作,组合一个新提示(原始任务上下文加心跳指令),并以此丰富上下文恢复 Agent。Agent 也可以使用 coral heartbeat set 自行创建心跳事件,获得一定程度的自我调节能力。

代码洞察

论文在概念层面呈现了 CORAL 的机制。阅读源代码则揭示了若干使自主多Agent进化在实践中可行的设计决策,这些在论文中鲜有或完全没有讨论。

4.1 文件系统即消息总线

CORAL 最引人注目的架构选择是完全没有中心化协调服务。所有 Agent 间通信都通过文件系统流转:Agent 在共享记忆目录中读写文件,管理器监控文件系统以触发心跳。没有消息队列,没有 RPC 框架,没有数据库。这种设计既简单又健壮:通过"先写临时文件再原子重命名"的模式保证没有任何 Agent 会读到部分写入的文件;共享目录上的 Git 版本控制意味着每个状态变更都可审计、可回退;Attempt 记录的 shared_state_hash 字段在每次评估和当时的记忆状态之间创建了快照链接,使事后分析每个 Agent 可用的确切信息成为可能。

4.2 崩溃恢复作为一等关注

自主 Agent 会崩溃。上下文窗口耗尽、Python 导入错误、或产出 LLM 无法解析的输出——这些情况都会发生。CORAL 将崩溃恢复视为一等关注而非事后补救。退出分类器将每次 Agent 终止分为三类:clean(正常退出)、no_result(运行但未产出评估)、session_error(崩溃或超时)。崩溃断路器监控失败频率:如果短时间内发生三次崩溃,系统暂停 Agent 五分钟后再重启,防止快速崩溃循环浪费 API 额度。一个重要的细微之处是评估器队列豁免:如果 Agent 正在等待评估器响应,管理器不将其计为停滞,避免在长时间运行评估期间误发终止信号。

评估器本身作为独立子进程运行,有硬超时(默认 300 秒,可按任务配置)。如果评分器在时限内未返回,将以 SIGKILL 终止——没有优雅关闭,没有无限挂起的机会。这个硬边界确保有缺陷或对抗性的解不会垄断评估资源。

4.3 Agent 即优化器的哲学

CORAL.md 模板文件注入每个 Agent 的工作空间作为其主要指令集,编码了一种关于 Agent 应如何开展搜索的独特哲学。三条指令尤为突出:

“尽早评估、频繁评估。” 模板敦促 Agent 将解提交给外部评估器,而非过度优化本地结果。理由是外部评估器提供唯一可靠的信号;本地测试可能不完整或具有误导性。

“偏向速度。” 一个粗糙但可评估的解优于一个完美但未测试的解。这条指令对抗 LLM Agent 无限精炼却不检查精炼是否实际改进了分数的倾向。

“每次评估至少产出一则笔记或技能更新。” 知识积累不是可选的。即使是一次失败的评估也应产生洞察——尝试了什么、为何失败、下次应避免什么。这条规则确保共享记忆单调增长,惠及所有 Agent。

Git 操作完全由框架管理。Agent 从不直接运行 git commitgit add;取而代之,调用 coral eval -m "message",该命令自动暂存所有更改、提交、评估并原子性地记录尝试。这防止 Agent 意外损坏仓库状态,并确保每次评估对应一个干净的提交。

4.4 子Agent系统

CORAL 为受益于专注专业知识的任务部署了专门的子Agent:

深度研究员(Deep-researcher) 执行结构化文献综述。当热启动选项启用时,该子Agent在主Agent开始编码之前调研相关网络资源,提供加速早期进展的初始知识库。

图书管理员(Librarian) 在知识库巡检心跳期间执行知识库健康检查。它扫描共享笔记中的矛盾(例如两条笔记对同一技术得出相反结论)、识别覆盖相同内容的冗余条目、在组织变得臃肿时重构目录层级。

技能创建器(Skill-creator) 是一种元技能:它引导 Agent 完成"创建-测试-精炼"新技能的过程。当 Agent 发现一个可复用过程——比如某种在内核工程中一致降低周期数的代码变换模式——它可以调用技能创建器将该过程包装成有文档和测试的规范技能,供其他 Agent 发现和应用。

实验分析

5.1 单Agent结果

CORAL 在十一个任务上进行了评估:六个数学优化问题(圆填充、信号处理、Erdos 最小重叠、MMD-16-2、MMD-14-3、三阶自相关不等式)和五个系统优化问题(EPLB、PRISM、LLM-SQL、事务调度、Cloudcast)。所有结果为四次独立试验的平均值,预算为 3 小时挂钟时间或 100 次迭代(取较长者)。

单 Agent CORAL 在全部十一个任务上对三个基线——OpenEvolve、ShinkaEvolve 和 EvoX(以元进化搜索策略为最强竞争者)——取得了最佳最终得分,并在八个任务上建立了新的最优结果。改进率(产生严格更优分数的评估占比)比基线高 3–10 倍。更引人注目的是评估效率:CORAL 通常在 5–20 次评估中收敛,而基线需要 60–100 次。在圆填充上,CORAL 仅用 11 次评估即匹配 SOTA(OpenEvolve 需要 100 次);在 MMD-16-2 上,6 次评估即达已知最优(EvoX 需要 18 次)。

效率增益并非偶然。由于自主 Agent 可以在调用外部评估器之前进行本地验证,相当比例的提交已经过预筛选。在内核工程上,57% 的评估前有本地测试,47% 的本地测试提交产出了改进。Agent 不是在猜测;而是在做有依据的提议。

5.2 多Agent结果

多 Agent 设置展现了 CORAL 最令人瞩目的结果。在 Anthropic 的内核工程任务上,四个协同进化的 Agent(使用 Claude Code + Opus 4.6)达到 1,103 周期,而单 Agent CORAL 为 1,350,OpenEvolve 为 2,740。四个 Agent 总共产出 596 次评估,改进率 9%。交叉授粉(Cross-pollination)至关重要:66% 的新纪录源自跨 Agent 父代——即一个 Agent 提出的解被另一个 Agent 接手并改进。在多格骨牌填充上,四个 Agent 达到 84.2% 覆盖率(单 Agent 为 80.2%),启用网络搜索后 CORAL 达到 89.4%,超过先前 SOTA 的 87%。

多 Agent 优势不限于专有模型。使用完全开源技术栈(OpenCode + MiniMax M2.5),四 Agent CORAL 在所有数学和系统任务上一致优于其单 Agent 对应版本,增益从 0.15% 到 20.8% 不等。

5.3 自主进化为何有效

三种机制解释了性能差距:

本地验证。 Agent 在提交外部评估之前先本地测试解。本地测试率因任务而异:内核工程上 57%(编译和周期计数可本地完成),事务调度上 61%,但 PRISM 上为 0%(评估器生成无法本地复现的随机测试用例)。在本地测试可行的地方,它充当高通滤波器,在编译失败和明显回退消耗评估预算之前将其捕获。

知识积累。 在高难度任务上,Agent 每次尝试创建 0.55–0.68 个知识产物,而标准任务上仅 0.05 个。十倍的差异反映了质的转变:标准任务上笔记多为轻量的进度日志(“尝试了参数 X,得到分数 Y”),而困难任务上捕获的是可复用洞察(“识别出 depth-0 XOR 处的 VALU 架构瓶颈;切换到逐通道 ALU 可节省 64 VALU,代价为 512 ALU”)。知识访问与改进相关:内核工程上,55% 访问了先验知识的评估产出了改进,而总体仅 9%。

跨Agent信息传递。 在四 Agent 内核工程运行中,36% 的尝试使用另一个 Agent 的提交作为父代。跨 Agent 父代的改进率为 17%(总体 9%),66% 的新纪录可追溯到跨 Agent 谱系。传递模式因任务而异:内核工程偏向直接代码复用(Agent 复制并修改有前景的提交),而多格骨牌填充偏向知识传递(87% 的轮次引用了另一个 Agent 的笔记或技能)。这些互补模式从共享记忆架构中自然涌现。

5.4 消融研究

禁用知识积累(移除笔记和技能)在所有测试任务上都降低了性能。影响最大的是内核工程,分数从 1,350 回退到 1,601 周期——18.6% 的倒退。在多格骨牌和事务调度上,回退分别为 3.6% 和 2.7%。知识不是锦上添花;而是承重的。

将协同进化与独立执行分离,可以孤立共享记忆的价值。四个协同进化的 Agent 在内核工程上达到 1,103 周期,而四个独立运行 Agent 中的最佳仅达 1,180——6.5% 的差距无法仅用额外计算量解释。在多格骨牌上,差距为 4.2%。共享记忆实现了一种软协调形式,使整体大于部分之和。

讨论与延伸

6.1 从固定进化到自主进化

固定进化搜索将 LLM 视为嵌入刚性循环中的精密变异器。搜索策略——变异什么、如何选择父代、何时评估——完全由手工编码的启发式规则决定。这种方法在问题结构与启发式规则对齐时有效,但从根本上限制了 LLM 的规划和策略决策能力。CORAL 向自主进化的转变提出了一个不同的问题:不是"我们应如何编排 LLM?",而是"我们应让 LLM 自己做哪些决策?"

答案似乎是"大部分"。能够自行选择读取什么、何时测试、记录什么、何时转向的 Agent,一致优于固定流程。心跳机制是使其可行的关键:它提供软引导(反思提示、整合触发、转向信号)而非硬约束(固定选择规则、每次提议后强制评估)。Agent 保留对搜索轨迹的自主权,同时受益于防止常见失败模式的定期推动。

6.2 多Agent协作中的隐式协议

CORAL 的多Agent组织刻意避免显式通信。没有消息传递协议,没有共享计划,没有角色分配。然而 Agent 发展出了可以称为隐式协议的东西:从共享记忆访问中涌现的协调模式。Agent 间尝试策略的 Jaccard 相似度为 0.31–0.43,意味着每个 Agent 超过一半的搜索词汇是独特的,提供了真正的探索多样性。同时,内核工程上 36% 的跨 Agent 父代率表明 Agent 有效地在彼此发现的基础上构建。结果是一个兼具独立探索广度和共享积累深度的系统。

这种水平并行架构与 MetaGPT 等垂直串行框架形成对比——后者中 Agent 扮演固定角色(产品经理、架构师、工程师)并通过预定义管道传递产物。对于最优分工未知的开放式问题,带隐式协调的水平并行更为适合:它允许发现过程本身决定每个 Agent 应该做什么。

6.3 局限性

CORAL 的方法有三项值得注意的局限。第一,它依赖能够处理复杂代码 Agent 工作流的前沿基础模型;单 Agent 运行每次 3 小时会话约花费 30–60 美元,四 Agent 运行约为四倍。在更小的、可本地部署的模型上运行仍然是开放挑战。第二,所有 Agent 初始化相同——相同的任务提示和相同的 CORAL.md 指令。在初始化时注入异质的个性、角色或私有信息可能进一步提高探索多样性,但如何系统性地做到这一点尚未被理解。第三,框架假设可靠的评估器可用。对于评估本身昂贵、不完整或模糊的问题——真实科学发现中的常见情况——评估器可能需要与解协同进化,这是 CORAL 当前未探索的方向。

References

  • Romera-Paredes, B. et al., 2024. Mathematical discoveries from program search with large language models. Nature, 625, pp.468–475.
  • Novak, R. et al., 2025. AlphaEvolve: A coding agent for scientific and algorithmic discovery. Google DeepMind Technical Report.
  • Sharma, R., 2025. OpenEvolve: An open-source implementation of evolutionary search with LLMs. GitHub Repository.
  • Lange, R. et al., 2025. ShinkaEvolve: Accelerating evolutionary search with diversity-guided sampling. Preprint.
  • Liu, Y. et al., 2026. EvoX: Meta-evolutionary search for open-ended discovery. Preprint.
  • Qu, A., Zheng, H., Zhou, Z. et al., 2026. CORAL: Towards autonomous multi-agent evolution for open-ended discovery. arXiv:2604.01658.