harness_evolve/notes/ref13_adas-automated-design-agentic-systems.md

ADAS: Automated Design of Agentic Systems

一句话总结:与其让人类工程师手工拼装 Chain-of-Thought、Self-Reflection、Toolformer 这些 agent 积木,不如让一个 meta agent 直接在代码里"编程"出新 agent——把整个 agentic system 表示成一段 Python forward() 函数(图灵完备 = 理论上能表达任何 agent),meta agent 读一个不断增长的历史发现 archive,一轮轮迭代造出更有意思的新 agent,实测发现的 agent 大幅超过人类手工设计的 SOTA,且跨域、跨模型迁移依然领先


TL;DR 速览

tags: #harness工程 #自我改进 #agentic-search #code-space-optimization #meta-agent #ADAS #open-endedness #stepping-stones

related: [[ref09_meta-harness]](把 archive→文件系统全历史,直系后继)· [[ref15_aflow]](在 workflow 图空间搜索,ADAS 的"图表示"对照支)· [[ref17_self-harness]](把外部 meta agent→模型自我改进)· [[ref23_darwin-godel-machine]](开放式自我修改,ADAS 的 higher-order 愿景的落地)· [[ref20_alphaevolve]](FunSearch 谱系的进化式编码 Agent)


摘要

研究者正投入大量精力开发强大的通用 agent,其中 FM 被当作 agentic system 里的模块(如 CoT、Self-Reflection、Toolformer)。但机器学习的历史告诉我们:手工设计的方案终将被学习出来的方案取代。我们描述一个正在形成的新研究领域——Automated Design of Agentic Systems (ADAS),目标是自动创造强大的 agentic system 设计,包括发明新积木和/或以新方式组合它们。我们进一步证明,ADAS 中有一条尚未被探索却大有可为的路径:agent 可以被定义在代码里,新 agent 可以由一个 meta agent 用代码编程出越来越好的版本来自动发现。鉴于大多数编程语言是图灵完备的,这条路径理论上能学习任何可能的 agentic system。我们给出一个简单而有效的算法 Meta Agent Search 来演示这个想法:meta agent 基于一个不断增长的历史发现 archive,迭代地编程出有意思的新 agent。跨编程、科学、数学多个域的大量实验表明,我们的算法能逐步发明出大幅超过 SOTA 手工 agent 的新设计;更重要的是,我们一致地观察到一个令人惊讶的结果——Meta Agent Search 发明的 agent 在跨域、跨模型迁移后仍保持优越性能,展现出其鲁棒性与通用性。


1 介绍:手工积木终将被"学"出来

论文的立论建立在一条贯穿机器学习史的规律上——手工制造的人工物,会随着算力和数据的增长,被学习出来的、更高效的方案取代(Clune 2019;Sutton 2019)。作者列举了一串"从手工到学习"的经典范式转移,作为 ADAS 的类比根基:

领域 手工阶段 学习阶段
计算机视觉 HOG 等手工特征 CNN 学出的特征(Krizhevsky 2012)
网络结构 手工设计架构 Neural Architecture Search(NAS)
LLM 对齐损失 手工设计如 DPO DiscoPOP 学出的 loss function
科研流程 人工做实验 The AI Scientist 自动研究管线
机器人环境 手工搭环境 OMNI-EPIC 自动生成环境

于是本文抛出核心研究问题:Can we automate the design of agentic systems?(我们能不能把 agentic system 的设计也自动化?)

[!TIP] 什么是 agentic system / agent(本文定义)? 社区当时对"agent"尚无共识定义。本文把 agent 界定为:以 FM 作为工作流中的模块、通过规划、使用工具、执行多步迭代处理来解决任务的系统(Chase 2024;Ng 2024)。关键词是"compound(复合)"——不是单个模型查询,而是把 CoT 规划、memory、tool use、self-reflection、多角色协作等积木编排成一个有控制流的程序。

直觉类比:如果说 FM 是一个"会思考的零件",那 agentic system 就是"用这个零件搭出来的一整台机器 + 装配图"。ADAS 要自动化的,正是画装配图这件事——甚至发明图上没有的新零件。

为什么手工路线不 scale? 作者指出:(1) 待发现的积木数量极其庞大,靠社区一个个发现要很久;(2) 即便积木都发现了,把它们组合成针对海量真实应用的有效系统,因为组合与交互方式太多,仍然极其耗时。相反,用 ADAS,积木和 agent 都能自动学出来——这可能不仅省人力,还是通往更强方案的更快路径。

现有 ADAS 尝试的局限:少数已有工作可算作 ADAS,但大多只优化 prompt(PromptBreeder、OPRO),这严重限制了它们发明灵活设计模式(如新 workflow)的能力——prompt 变了、workflow 却被钉死。本文的突破点就是把整个系统放进代码空间:

[!IMPORTANT] 本文的核心主张(一句话)在代码空间里搜索,理论上能发现任何可能的 agentic system——包括所有积木(prompt、tool use、workflow)以及它们的任意组合。因为 Python 图灵完备(Boyer & Moore 1983;Ladha 2024),而且现代 FM 越来越擅长编程,所以可以直接用 FM 当 meta agent,在代码里自动编程出新 agent。


2 ADAS 的形式化:搜索空间 × 搜索算法 × 评估函数

作者仿照 AutoML / NAS 的做法,把 ADAS 形式化成一个优化过程,并识别出三个关键组件(Figure 2)。这张图是理解整个领域的"坐标系"。

Figure 2:ADAS 的三大关键组件

Figure 2 逐元素解读:图分三块,从左到右对应 ADAS 的三个正交维度—— - 左「Search Space(搜索空间)」:决定"哪些 agentic system 能被表示、从而被发现"。图里画的是一叠代码文件,标注 E.g. Agents defined by code——即本文选择的"代码空间"。作者强调:如果搜索空间只允许改 prompt(如 PromptBreeder),那么"workflow 与预设不同的 agent"就根本无法被表示。 - 中「Search Algorithm(搜索算法)」:决定"怎么探索这个空间"。图里是一个 LLM 在写 def forward(self, taskInfo): instruction = "think step by step."——即 LLM defines agents using code。因为空间巨大甚至无界,必须权衡 exploration-exploitation:既要快速找到高性能 agent,又要避免卡在局部最优。已有做法有强化学习(GPT-Swarm)或 FM 迭代生成(PromptBreeder)。 - 右「Evaluation Function(评估函数)」:决定"怎么给候选 agent 打分"。图里一个 agent 回答"Where is the capital of Canada → Ottawa ✓""1+1=? ",标注 E.g. Accuracy on the task。可优化的目标不止性能,还可以是成本、延迟、安全性。 - 中间那个循环箭头(Sample New Agent ↔ Evaluate the Objectives):点出 ADAS 是一个"采样新 agent → 评估目标"的迭代闭环。

[!NOTE] ADAS 的正式定义

Automated Design of Agentic Systems (ADAS) 涉及使用一个搜索算法,在一个搜索空间中发现能优化某评估函数的 agentic system

这个"三件套"抽象的价值在于:它让后续所有工作都能被清晰定位。例如 [[ref15_aflow]] 是"搜索空间 = workflow 图";[[ref09_meta-harness]] 是"搜索算法 = 强编程 Agent + 全历史文件系统";[[ref17_self-harness]] 是"评估函数 = held-out 回归门 + 有界编辑"。它们全都是在 ADAS 这张地图上选了不同的坐标。

为什么偏偏选"代码空间"? 作者给出四条理由(这是全文最重要的方法论论证):

[!TIP] 代码空间 vs 其他搜索空间(讲透 + 对比) | 维度 | Prompt 空间 | 图/网络空间 | 代码空间(本文) | |---|---|---|---| | 表达力 | 只能改措辞,workflow 钉死 | 能改节点连接,但工具用法等仍固定 | 图灵完备,任意积木 + 任意组合 | | 可解释性 | 中 | 低(图结构不直观) | 高(代码可读,好 debug,利于 AI 安全) | | 复用人类成果 | 难 | 难 | 易(可直接站在 LangChain、RAG、搜索工具之上) | | 搜索先验 | 弱 | 弱(自定义空间缺先验) | 强(FM 本就在海量代码上训练过) |

逐条说明:①表达力——PromptBreeder 只变 prompt 文本,DyLAN/GPT-Swarm 把 agent 表示成图(FM 是节点变换、文本流是边),但工具用法等组件仍被钉死;只有代码能表达"任何可能的设计"。②可解释性——程序代码可读,让 debug 更容易、也增强 AI 安全(能审计 agent 到底会做什么)。③站在人类肩膀上——代码空间可以直接调用开源框架里现成的积木(RAG、搜索引擎工具),而自定义图空间做不到。④FM 先验——因为编程是 FM 训练中最重要的任务之一,用代码空间能直接借力 FM 已有的编程专长;反观自定义图空间,因为缺这些先验,搜索会低效得多。


3 方法:Meta Agent Search

[!IMPORTANT] 这是全文的核心。一句话概括 Meta Agent Search:让一个 FM 当"meta agent",读一个不断增长的历史发现 archive,迭代地编程出"有意思的"新 agent,评估后连同分数存回 archive,如此滚动。

3.1 极简框架:meta agent 只需写一个 forward()

理论上 meta agent 可以从零编程一切,但实践中不给它任何基础函数(如 FM 查询 API)是低效的。所以作者定义了一个 <100 行的极简框架,提供查询 FM、格式化 prompt 等基本能力。于是——meta agent 只需编程一个 forward() 函数就能定义一个全新 agentic system(这个函数吃进任务信息、吐出对任务的回答),做法类比 FunSearch(只进化指定函数)。

[!TIP] 什么是 FunSearch?为什么本文类比它? FunSearch(Romera-Paredes et al., Nature 2024)是"用 LLM 做程序搜索来做数学发现"的开创工作。它的关键设计是:不让 LLM 从零写整个程序,而是固定一个程序骨架、只让 LLM 进化其中"指定的那个函数"(priority function)。这样既保留了 LLM 生成的灵活性,又把搜索约束在一个可控、可评估的接口上,用它发现了 cap set 问题等的新构造。

本文借鉴的正是这一点:固定框架(Info 数据结构 + FM_Module + AgentSystem 基类),只让 meta agent 编程 forward()。好处是——新 agent 天然是"合法可运行的程序",评估简单,且 meta agent 能专注在"控制流/编排逻辑"这个真正有创造空间的层面,而不用重复造 FM 查询这类轮子。

框架的核心抽象(见 Code 1):用一个 namedtuple Info(name, author, content, iteration_idx) 封装每一条信息(FM 响应、工具结果、任务描述都统一成 Info),于是不同模块间可以自由拼接、通信;FM 模块会自动把所有输入 Info 拼成结构化 prompt(每条按其 metadata 加标题)。一个用该框架实现的 Self-Refine 例子(Code 2)只有约 30 行:初始 CoT → 循环里让 Critic 打分 → 若不对则把反馈拼回输入、再 refine,最多 5 次。

3.2 搜索循环:archive 驱动的开放式迭代

Figure 1:Meta Agent Search 总览 + 发现的 agent 示例

Figure 1 逐元素解读(全文招牌图,是方法的心脏 + 结果的预告):

上半部分是搜索闭环—— - 「Meta Agent」(左):核心大脑(一个 FM)。它旁边有个自指的圆弧箭头,标注 Refine until novel and error-free,表示它生成后会自反思迭代直到新颖且无错。 - 「New Agent」(右上):meta agent 的输出,是一个结构化对象:Summary and motivation:"Based on the insights from previous agents…"Name:"Divide and Conquer Agent"Code:"def forward(Task): …… return Answer"——即"新 idea 的高层描述 + 名字 + 完整 forward 代码"三件套。 - 「Test performance on tasks and add to archive」(右下箭头):新 agent 在任务上评估,连同分数被加入 archive。 - 「Agent Archive」(中)→「Input」→ 回到 Meta Agent:archive 作为 Input 反馈给 meta agent,供下一轮"Next interesting agent"参考。这就是闭环:archive 越长,meta agent 的灵感来源越丰富。

下半部分「Examples of Discovered Agents」是三个真实搜到的 agent(名字都是 meta agent 自己起的,代码见 Appendix G): - Multi-step Peer Review Agent:多个 Expert 各自出答案 → 互相当 Reviewer 交叉评审 → 各自根据评审 refine → 汇总。 - Verified Multimodal Agent:先生成 Visual Paradigm(可视化表示)→ Verifier 校验 → 用 Verified Paradigm + CoT 求解。 - Divide and Conquer Agent:Sub-problem Division 把问题拆成子问题 → 分派给多个 Expert → Ensemble 汇总。

算法四步流程(对应 Appendix H 的 Algorithm 1):

[!NOTE] Algorithm 1|Meta Agent Search(伪代码复述) 输入: 目标域验证数据, 最大迭代数 N 输出: 发现的 agent 组成的 archive 1. 初始化 archive A ← 基线 agent(如 CoT、Self-Refine) # 可选,也可空初始化 2. for i = 1..N: 3. ── 设计步(Design) ── meta agent 生成新 agent: 4. (a) 先输出设计推理(high-level idea) 5. (b) 再把设计实现成 forward() 代码 6. (c) 做 2 轮自反思(self-reflection) 确保"新颖 + 正确" 7. ── 评估步(Evaluation) ── 在目标域验证数据上评估新 agent: 8. (a) 若评估中报错 → 自反思 debug, 最多重试 5 次 9. (b) 每次 refine 后重跑评估 10. ── 更新步(Update) ── 把 refine 后的 agent + 评估指标加入 archive A 11. 返回最终 archive A

[!TIP] 把这套流程讲透 + 举例:一次迭代到底发生了什么? 假设当前 archive 里已经有 CoT、Self-Refine、以及上一轮搜到的"5-CoT + ensemble"。meta agent 收到的 prompt 大致是:[框架代码] + [输出格式与例子] + [整个 archive 的代码与分数] + "观察这些发现,想想能学到什么 insight / stepping stone,THINK OUTSIDE THE BOX,提一个有意思的新 agent"。 - Design(a):meta agent 在 thought 字段里推理——"我注意到 ensemble 有用、feedback 也有用,但现在的 feedback 太泛。不如引入多个专门 Critic(效率/可读性/简洁性专家)给出针对性反馈。" - Design(b):它写出对应的 forward()(5 个候选 → 每个过 3 类专家反馈 → 结构化去重 → 3 轮 refine → top-3 ensemble)。 - Design(c):2 轮自反思检查"这跟 archive 里的东西真的不一样吗?代码有 bug 吗?"(自反思 prompt 明确要求 USE CRITICAL THINKING! 并对照 archive 逐一比实现差异)。 - Evaluation:在 20 道验证题上跑 5 次求平均。若报 KeyError 就把错误喂回去 debug。 - Update:把这个"Structured Feedback and Ensemble Agent"和它的分数存进 archive——它就成了下一轮的 stepping stone(事实上这正是 ARC 上搜到的最佳 agent,见 §4.1)。

3.3 关键概念:为什么 archive / stepping-stone 是灵魂

[!TIP] 什么是 archive 与 stepping stone(垫脚石)? 这套设计直接借鉴开放式进化(open-endedness)与 AI-GA 的思想(Zhang 2024a; Lehman & Stanley 2011; Wang 2019)。 - archive:一个只增不减的历史发现库,存下每个被造出来的 agent 及其代码、分数。它既是 meta agent 的"记忆",也是"灵感池"。 - stepping stone(垫脚石)一个当下性能未必高、但为后续更强发现铺路的中间产物。开放式进化的核心信念是——伟大不能被直接规划(greatness cannot be planned),高性能方案往往要踩着一串看似不起眼的垫脚石才能到达。 - 本文的经验证据(§4.1):ARC 上,"多 CoT + refine + ensemble"这个模式在第 3 迭代出现,本身不算惊艳,却成了后续设计反复复用的关键垫脚石;而最佳 agent 里的"多样化反馈 / 专家评特定维度 / 模拟人类反馈"三个要素分别在第 5、11、12 迭代才冒出来,最终 agent 是把这三块垫脚石组合起来的创新——类似进化里 LLM 充当 crossover 算子(Meyerson 2023)。这就是为什么"只看上一个父代"的局部搜索不行,必须让 meta agent 能回看整个 archive

[!TIP] 什么是"interestingness(有意思度)"驱动的搜索? Meta Agent Search 不直接优化性能作为探索目标,而是像 OMNI / Intelligent Go-Explore 那样,鼓励 meta agent 去探索"interestingly new(新颖或有价值)"的 agent——prompt 里明确写 propose interestingly new agentsTHINK OUTSIDE THE BOX。性能(success rate / F1)只是 meta agent 被告知要最大化的指标,但驱动多样性的是"有意思"这个人类直觉。这是开放式算法对抗"过早收敛到局部最优"的经典手段:只盯着分数容易陷入贪心,追求"有意思"才能不断产出新垫脚石。

3.4 meta agent 的 prompt 设计(Appendix B 精要)

meta agent 的行为几乎完全由 prompt 塑造。关键片段: - 系统 prompt:极简一句 You are a helpful assistant. Make sure to return in a WELL-FORMED JSON object. - 主 prompt 结构:[域简述] + [框架代码] + [输出指令与例子] + [已发现 agent 的 archive] → 然后要求它"仔细观察 archive、思考能学到什么 insight/lesson/stepping stone、从相关 agent 论文或其他研究领域的学术论文汲取灵感、THINK OUTSIDE THE BOX"。 - 输出格式:强制 JSON 三键 {"thought":..., "name":..., "code": "def forward(self, taskInfo): ..."},其中 thought 要含 **Insights** / **Overall Idea** / **Implementation** 三段。 - 两轮自反思:第 1 轮重点查 Interestingness(跟 archive 比够不够新)+ Implementation Mistakes + Improvement;第 2 轮再用"常见错误清单"复查代码。运行时报错则触发最多 5 次 debug 反思。

[!NOTE] 一个值得注意的工程细节:作者收集了一份"meta agent 常犯的实现错误"清单塞进 prompt(## WRONG Implementation examples),发现这对提升生成代码质量很有效。这与 [[ref09_meta-harness]] 附录 D 的"写好 skill 是最强杠杆"、[[ref17_self-harness]] 的"有界编辑 + 审计"异曲同工——引导搜索的那段元 prompt/skill,本身就是最需要精心工程的对象

3.5 实现要点小结

组件 本文的选择
Meta agent(搜索算法) GPT-4("gpt-4o-2024-05-13"),max reasoning
被评估的 agent + baseline GPT-3.5("gpt-3.5-turbo-0125")以省成本
搜索空间 单个 forward() Python 函数(框架 <100 行)
评估函数 验证集准确率 / F1(ARC/GPQA 评 5 次,其他评 1 次以控总评估数)
迭代数 ARC 25 轮;四大 benchmark 各 30 轮
archive 初始化 用 baseline 播种(也做了空初始化消融,见 §4.4)
单次运行成本 ARC ≈ $500,推理/解题域 ≈ $300(主要花在评估时查 GPT-3.5)

4 实验:跨域都赢手工设计,且能迁移

作者用同一套算法实现跑所有任务,唯一变化是 prompt 里的任务描述文本。三组实验:(1) ARC 案例研究;(2) 四大推理/解题 benchmark;(3) 迁移性。

4.1 案例研究:ARC 挑战——垫脚石如何堆出最佳 agent

Figure 3:Meta Agent Search 在 ARC 上的搜索进度与最佳 agent

[!TIP] 什么是 ARC(Abstraction and Reasoning Corpus)? ARC(Chollet 2019)是专门测通用智能 / 抽象推理的基准:每题给几组"输入网格→输出网格"示例,AI 要从示例里学出变换规则,再对测试输入网格预测输出。每题规则唯一,需要少样本高效学习 + 数数/几何/拓扑能力。本文遵循 Greenblatt(2024) 的做法,要求 agent 写代码来表达变换规则(而非直接答),并在框架里提供两个工具函数:①测生成代码能否解示例网格、②把代码应用到测试网格取答案。为控成本,只采 ≤5×5 的简单题,验证/测试各 20/60 题、各评 5 次。

Figure 3 逐元素解读: - (a) 左图——搜索进度曲线:横轴迭代(0-25),纵轴 held-out 测试准确率(%)。蓝线(Meta-Agent Search)是阶梯上升的(每发现更好的就上台阶),阴影是 95% bootstrap 置信区间。几条水平虚线是手工 baseline:红=CoT、紫=COT-SC、绿=Self-Refine、橙=LLM-Debate、品红=Quality-Diversity——全部被蓝线超过。图上五个文本框标注了关键突破时刻,勾勒出一条清晰的"踩垫脚石"叙事:初期先试"生成高层策略再实现细节" → 涌现"多 CoT 生成候选、refine、ensemble 最优"这个关键模式 → 引入动态记忆做更多 refine → 放大上一个想法 → 最佳 agent:引入多个 critic 增强 refinement。 - (b) 右图——最佳 agent 结构图("Structured Feedback and Ensemble Agent"):Task → 5 COTs 生成 5 Answers → 兵分两路给反馈:一路是 Efficiency/Readability/Simplicity 三个 Expert、一路是 Human-like Critic → 两路 Feedback 汇入 Refinement(循环 3 次)All Answers → Evaluate → Top-3 Answers → Ensemble → Final Answer。这张图就是 §3.2 那个"举例"里 meta agent 逐步搭出来的东西的可视化。

Setup:meta agent 用 GPT-4,发现的 agent 与 baseline 用 GPT-3.5,跑 25 迭代。五个手工 baseline:CoT、COT-SC、Self-Refine、LLM-Debate、Quality-Diversity(都用同一框架实现以保证公平,且都作为 archive 的初始种子)。

结果:Meta Agent Search 逐步发现超过所有手工 baseline 的 agent。最佳 agent 里那套精巧反馈机制不是突然冒出来的,而是"多样反馈""按具体特质(效率/简洁)评估""模拟人类反馈"这三个垫脚石分别在第 5/11/12 迭代出现后被组合出来的——完美印证了 stepping-stone 假说

4.2 四大推理 / 解题域:全面碾压,含 OPRO 对照

Setup:DROP(阅读理解,F1)、MGSM(多语数学)、MMLU(多任务)、GPQA(研究生级科学)。每域独立搜 30 迭代,meta agent 用 GPT-4、评估用 GPT-3.5。除了 §4.1 的 5 个 baseline,额外加两个专攻推理的 baseline:Step-back Abstraction(先想原理再解)、Role Assignment(分派角色);以及关键对照——OPRO(SOTA prompt 优化方法),用来凸显"学所有组件 > 只学 prompt"。

[!TIP] 对照方法:OPRO(Large Language Models as Optimizers) OPRO(Yang et al. 2024)把 LLM 当优化器:给它历史的"(prompt 解, 分数)"对,让它据此提出新的、更好的 prompt。它是纯 prompt 优化的 SOTA 代表——只改指令措辞,不动 workflow / 工具 / 控制流。本文拿它当对照,就是要证明:ADAS 在代码空间学习 agent 的全部组件,系统性地优于只优化 prompt(见下表 OPRO vs Meta Agent Search 每域都落后)。

结果(Table 1):Meta Agent Search 在每个域都赢,尤其阅读理解和数学差距巨大——

Agent 阅读理解 DROP (F1) 数学 MGSM (Acc%) 多任务 MMLU (Acc%) 科学 GPQA (Acc%)
Chain-of-Thought 64.2 28.0 65.4 29.2
COT-SC 64.4 28.2 65.9 30.5
Self-Refine 59.2 27.5 63.5 31.6
LLM Debate 60.6 39.0 65.6 31.4
Step-back Abstraction 60.4 31.1 65.1 26.9
Quality-Diversity 61.8 23.8 65.1 30.2
Role Assignment 65.8 30.1 64.5 31.1
OPRO(prompt 优化 SOTA) 69.1 30.6 67.6 32.9
Meta Agent Search(本文) 79.4 53.4 69.6 34.6

4.3 泛化与迁移:跨域、跨模型都领先(最惊艳的结果)

这是本文反复强调的"surprising result"。

跨域迁移(Table 2/4/5):把在 MGSM(数学) 搜到的 top-3 agent 直接迁到别处: - 迁到其他数学域:GSM8K +25.9%、GSM-Hard +13.2%(相对 baseline),SVAMP/ASDiv 也一致领先。 - 迁到非数学域(阅读理解 DROP、多任务 MMLU、科学 GPQA):虽不及"为该域专门搜的 agent",但仍超过或持平手工 SOTA baseline——例如"Dynamic Role-Playing Architecture"迁到 DROP 拿 70.4 F1(vs 手工最好 65.8)。数学域学到的设计模式能迁到阅读理解,说明搜到的是通用积木而非过拟合。

跨模型迁移(Table 3):把 ARC 上用 GPT-3.5 搜到的 top-3 agent,迁到 Claude-Haiku、GPT-4、Claude-Sonnet:

Agent(GPT-3.5 搜到) GPT-3.5 Claude-Haiku GPT-4 Claude-Sonnet
手工 baseline 最好 ~8.0 ~6.3 ~23.0 ~39.3
Structured Feedback and Ensemble 13.7 5.0 30.0 38.7
Hierarchical Committee Reinforcement 13.3 8.3 32.3 39.7
Dynamic Memory and Refinement 12.7 9.7 37.0 48.3

搜到的 agent 跨模型一致领先;最强的 Claude-Sonnet 让最佳 agent 在 ARC 上逼近 48.3%

[!TIP] 一个关于 FM 能力的有趣洞见(§6 讨论):GPT-3.5 上搜到的最佳 agent 用了复杂反馈机制,但迁到更强模型时,"更简单反馈机制 + 更多 refinement"的 agent 反而更好。作者据此推断:GPT-3.5 评估/refine 答案的能力较弱,所以需要复杂反馈来补偿;更强的模型则从简单反馈 + 多轮打磨中获益更多。——这呼应了 [[ref09_meta-harness]] 与 [[ref17_self-harness]] 的共同观察:越弱的基座,harness/agent 优化的收益越大、且倾向更复杂的补偿性结构。

4.4 消融:空初始化——数学域从零搜反而更强

作者做了个关键消融(Table 6):不给任何初始 agent,让 archive 空着从零搜

阅读理解 (F1) 数学 (Acc%) 多任务 (Acc%) 科学 (Acc%)
Meta Agent Search(baseline 播种) 79.4 53.4 69.6 34.6
Meta Agent Search(空初始化) 73.9 67.5 68.5 32.7

[!IMPORTANT] 两个结论:①即使空初始化,Meta Agent Search 在所有域仍超过全部手工 baseline——说明方法的强大不依赖"好的起点",而是源于代码空间本身的结构。②数学域是唯一"从零搜反而更好"(53.4→67.5,+14.1)的域。作者猜测:没有预设设计模式,反而鼓励在有限迭代内做更发散的推理策略探索,而数学恰恰受益于这种灵活多样。这是一个耐人寻味的"先验有时是枷锁"的证据——好起点通常有帮助,但也可能把搜索锚定在某个区域、错过更好的解。

4.5 定性证据:发现的 agent 都是可读的程序

Appendix G 给出三个发现 agent 的完整代码(Multi-step Peer Review / Divide and Conquer / Verified Multimodal),全是几十行、结构清晰的 forward()。这是代码空间的一大优势——产物直接可读、可审计、可复用,与"图/权重空间搜出来的黑盒"形成鲜明对比。


5 结论与讨论

5.1 相关工作定位(本文如何摆放自己)

作者把 ADAS 放进三条脉络:

[!TIP] ① Agentic Systems(积木的手工时代) 社区已发明大量积木:prompting 技巧、CoT 规划推理、reflection(Self-Refine/Reflexion)、embodied 技能代码(Voyager)、外部记忆与 RAG、tool use(Toolformer/WebGPT)、多角色协作(MetaGPT/AutoGen/ChatDev)、自我指令(AutoGPT)等。但这只是冰山一角,还有海量积木待发现——正是 ADAS 想自动化的对象。

[!TIP] ② AI-GA 与 AutoML("学出来替代手工"的思想母体) AI-Generating Algorithms(AI-GA, Clune 2019) 有三大支柱:(1) 元学习架构、(2) 元学习学习算法、(3) 生成学习环境与数据。NAS 例示支柱 1,MAML/Meta-RL 例示支柱 2,POET/OMNI-EPIC 例示支柱 3。本文把 ADAS 定位在支柱 1+2:元学习 agentic 架构 + 用 in-context learning "学会学习"(ARC 上体现)。而 FunSearch/EoH(发现优化算法)、DiscoPOP(编程 loss function)、Eureka/language-to-reward(写 reward)、OMNI-EPIC(造环境)这一串"让 FM 写代码去发现"的工作,是本文最直接的技术近亲——本文把这条思路用到了"编程 agent"上

[!TIP] ③ 已有的 ADAS 尝试(本文超越的对象) 分两类:(A) 只学 prompt——OPRO、PromptBreeder、APE、TextGrad、以及优化角色定义的一批(AutoAgents/AgentVerse)。局限:prompt 常常域专用难泛化,且其他组件被钉死(B) 学 prompt 之外的组件——多把 agent 表示成网络/图:DyLAN 优化节点连接、DSPy/Trace 在节点笛卡尔积上优化、GPT-Swarm 用 RL 优化连接;AgentOptimizer 学工具、AutoFlow 造新语言描述 workflow、Agent Symbolic Learning 试图一起学 prompt/工具/workflow。局限:要么覆盖不全所有可能设计,要么搜索空间对搜索算法更难本文的差异用代码表示所有组件,允许一切可能的设计,且因为编程是 FM 的强项,代码空间对 FM 引导的搜索反而"更友好"。

与 ADAS 谱系后继的对比表(把本项目坐标系里的几篇串起来):

论文 搜索空间 搜索算法 / 提议者 反馈给提议者的信息 评估 / 准入
ADAS (ref13, 本文) 单个 forward() 代码 GPT-4 meta agent + archive archive 里各 agent 的代码 + 分数 验证集准确率
[[ref15_aflow]] workflow 图(节点=LLM调用/算子) MCTS 式搜索 图结构 + 分数 验证集分数
[[ref09_meta-harness]] 任务专用 harness 代码(单文件) Claude Code 强编程 Agent 裸文件系统里的全历史:代码+分数+原始执行轨迹(可 grep) Pareto 前沿
[[ref17_self-harness]] Agent 运行 harness 的可编辑面 模型自己(同一固定模型当提议者) 当轮聚类后的失败证据包 + 可编辑面 held-out 非回退回归门
[[ref23_darwin-godel-machine]] Agent 自身代码本体(开放式自我修改) Agent 自己 + 进化式 archive 自身代码 + benchmark 表现 benchmark 提升 + 归档

5.2 安全考量

作者明确讨论了安全(因为让模型自动生成并执行代码有风险):措施包括容器化隔离执行所有生成代码、人工审查确认无害、代码库里显式警告。并论证发表本工作净收益为正:它揭示 ADAS 只需 API 访问即可编程(无需昂贵 GPU)、且 ADAS 反而能通过自动设计显式、可解释的 workflow 来增强 agent 安全(更可控、可审计)。呼吁未来研究 safe-ADAS,可结合 Constitutional AI 等机制。

5.3 未来方向(其中一条正是后续论文的起点)

[!IMPORTANT] Higher-order ADAS(高阶 ADAS)既然用来编程新 agent 的 meta agent 本身也是一个 agent,那 ADAS 就可以变得"自指(self-referential)"——meta agent 自己也能被 ADAS 改进,乃至 meta-meta agent……这直接指向 [[ref23_darwin-godel-machine]] 那种"改自己代码本体"的开放式自我改进,也与 [[ref17_self-harness]] "模型改进自己运行所依赖的 harness"精神相通。

其他方向:在线持续学习(部署后用海量反馈持续改进 agent);多目标 ADAS(成本/延迟/鲁棒性,用 NSGA-II 等)——这正是 [[ref09_meta-harness]] 的 Pareto 前沿所做的;更好的评估函数(让 meta agent 分析详细运行日志的成功/失败模式,而非只看标量分数)——这几乎就是 [[ref09_meta-harness]] "全历史执行轨迹"的预言;用现有积木播种 ADAS(站在 LangChain/RAG 之上);更复杂的多步交互域;更精巧的 novelty search 算法。


个人思考

⭐ 与本项目谱系的关联(ADAS 是这条线的"根")

ADAS 是 harness/agent 自动设计这一整支的奠基坐标。它的最大贡献是把问题定义清楚了(搜索空间×搜索算法×评估函数)并押注了代码空间。后续几篇几乎都可以读作"在 ADAS 地图上换一个坐标":

方法论启示(可迁移的通用思路)

  1. "三件套"是分析任何自动设计系统的万能框架:拿到任何一篇"自动优化 X"的论文,先问它的 搜索空间 / 搜索算法 / 评估函数 各是什么——立刻就能定位它的创新点和局限。这是 ADAS 送给整个领域的认知工具
  2. 搜索空间的选择 = 表达力与可搜索性的权衡:ADAS 论证"代码空间"胜出的四条理由(图灵完备的表达力、可解释、可复用人类成果、FM 先验友好)是普适的选空间准则。尤其"选一个 FM 已经很擅长的表示(代码),就等于免费获得强搜索先验"这一点,对任何 FM 驱动的优化都成立。
  3. archive / stepping-stone > 局部贪心:ADAS 用 ARC 的"第 5/11/12 迭代三块垫脚石最终组合成最佳 agent"给出了极干净的证据——好方案往往要踩着一串不起眼的中间产物,所以要保留完整历史供回看、并用"有意思"而非纯性能驱动探索。这与 [[ref09_meta-harness]] "不要压缩反馈"是同一枚硬币的两面:一个说"别丢历史的广度"(所有候选都留),一个说"别丢历史的深度"(原始轨迹都留)。
  4. 先验有时是枷锁(§4.4 数学域空初始化更强):这是个反直觉但重要的提醒——播种好起点通常有益,但也可能把搜索锚定在局部、限制探索多样性。在设计任何"从种子出发迭代"的系统时,值得两种初始化都试。

在我的工作中能怎么用

开放问题 / 疑问

局限性