Gödel Agent: A Self-Referential Agent Framework for Recursive Self-Improvement¶
会议: ACL 2025
arXiv: 2410.04444
代码: https://github.com/Arvid-pku/Godel_Agent
领域: LLM Agent
关键词: 自引用Agent, 递归自改进, Monkey Patching, 元学习, Agent设计空间搜索
一句话总结¶
提出 Gödel Agent,一种受 Gödel Machine 启发的自引用 Agent 框架,能通过 Python monkey patching 在运行时读取和修改自身代码(包括修改自身的修改逻辑),实现递归自改进,在 DROP/MGSM/MMLU/GPQA 上超越手工设计和元学习优化的 Agent。
研究背景与动机¶
领域现状:LLM Agent 系统分为两类——手工设计的固定流程 Agent(CoT、Self-Refine、LLM Debate 等)和元学习优化 Agent(Meta Agent Search、DSPy 等)。前者完全依赖人类先验,后者虽能自动优化策略但元学习算法本身是固定的。
现有痛点:(1) 手工设计 Agent 一经部署就无法进化;(2) 元学习 Agent 受限于固定的元算法,搜索空间仍有人为限制——例如只能优化 prompt 或只能收集 demonstration;(3) 都无法搜索完整的 Agent 设计空间。
核心矛盾:Agent 的"优化方式"本身也是可优化的对象。如果优化算法是固定的,就永远无法发现更好的优化算法。
本文目标:能否让 Agent 自主决定自己的运行逻辑、模块设计,甚至修改自身的优化方式?
切入角度:受 Schmidhuber 的 Gödel Machine 理论启发——一个能修改自身任意部分(包括修改逻辑本身)的系统理论上可以找到全局最优。
核心 idea:实现完全自引用——Agent 可以读取自己的所有代码,修改任意部分(包括决策函数、执行函数),然后递归地继续改进。
方法详解¶
整体框架¶
Gödel Agent = 初始策略 \(\pi_0\) + 自引用学习算法 \(I_0\)。形式化为 \(\pi_{t+1}, I_{t+1} = I_t(\pi_t, I_t, r_t, g)\),即优化算法 \(I\) 不仅能改 \(\pi\),还能改自身。用递归函数(而非循环)实现主逻辑,通过 monkey patching 在运行时动态修改代码。
关键设计¶
-
自感知(Self-Awareness):
- 功能:Agent 通过检查 Python 运行时内存(local/global variables)读取自己的所有代码
- 核心思路:
SELF_INSPECT()函数提取 Agent 的所有变量、函数、类定义 - 设计动机:自引用的前提是知道自己的当前状态,包括代码逻辑
-
自修改(Self-Modification):
- 功能:Agent 用 LLM 生成新代码并通过 monkey patching 写入运行时内存
- 核心思路:
self_update动作让 LLM 分析当前策略和反馈,生成修改后的代码,动态替换运行中的函数/类 - 设计动机:monkey patching 允许不重启程序就替换任意函数,实现"边运行边改自己"
-
递归自改进:
- 功能:主函数用递归而非循环实现,每次递归深入应用最新修改
- 核心思路:
SELF_IMPROVE函数递归调用自身,每层递归中 Agent 可以修改SELF_IMPROVE函数本身,下一层递归将使用新版本 - 设计动机:递归结构使得修改逻辑的修改能在下一次调用中生效——这是"递归自改进"的关键
-
四种初始动作:
self_inspect: 读取自身代码interact: 与环境交互获取反馈 \(r = U(\mathcal{E}, \pi)\)self_update: 修改自身代码continue_improve: 递归调用自改进- 动作集本身也可以被 Agent 修改和扩展
辅助设计¶
- Think Before Acting:允许 Agent 先推理再行动,提升决策质量
- Error Handling:代码修改出错时不终止,而是带着错误信息进入下一轮迭代
- 额外工具:执行 Python/Bash 代码、调用 LLM API
损失函数 / 训练策略¶
- 无传统训练——Agent 在验证集上迭代自改进
- 每个任务 6 个独立 cycle,每 cycle 最多 30 迭代
- 初始策略为 CoT,所有测试用 GPT-3.5
实验关键数据¶
主实验¶
| 方法 | DROP (F1) | MGSM (Acc) | MMLU (Acc) | GPQA (Acc) |
|---|---|---|---|---|
| CoT | 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 |
| Meta Agent Search | 79.4 | 53.4 | 69.6 | 34.6 |
| Gödel-base (GPT-3.5) | 80.9 | 64.2 | 70.9 | 34.9 |
| Gödel-free (无约束) | 90.5 | 90.6 | 87.9 | 55.7 |
消融实验(MGSM)¶
| 配置 | Accuracy |
|---|---|
| Full | 64.2 |
| w/o think | 50.8 (-13.4) |
| w/o error handling | 49.4 (-14.8) |
| w/o code running | 57.1 (-7.1) |
| w/o LLM calling | 60.4 (-3.8) |
关键发现¶
- MGSM 上超 Meta Agent Search 11 个点(64.2 vs 53.4),说明数学推理任务有更大的自改进空间
- 无约束模式性能炸裂:Agent 自发请求 GPT-4o 辅助,GPQA 从 34.9→55.7
- Error Handling 极为重要:去掉后掉 14.8 个点——LLM 生成的代码经常有错,容错机制是持续优化的基础
- 只有 14% 的优化 trial 最终失败:92% 的 trial 中虽有临时性能下降但最终超越初始策略
- Game of 24 案例:Agent 自主从 LLM 推理切换到搜索算法,达到 100% 准确率——完全突破了初始方法论
亮点与洞察¶
- "修改修改自身的能力"——真正的元递归:不同于元学习只优化策略,Gödel Agent 能修改优化器本身,理论上可以无限逼近最优
- Monkey Patching 的妙用:将"自我修改"这个抽象概念用 Python 运行时特性优雅实现,工程上简洁可行
- 无约束模式的启示:Agent 自主决定调用更强模型是"聪明"的策略,暗示未来 Agent 需要自主管理计算资源
局限与展望¶
- 受限于当前 LLM 的代码生成能力——Agent 难以发明超越 SOTA 的全新算法(如从 CoT 出发无法超越 ToT)
- 4% 的 trial 意外终止(通常因修改了递归改进模块本身导致无法继续)
- 无约束模式的性能提升主要来自调用更强 LLM,而非算法创新
- 安全性问题:自修改 Agent 可能引入不可预测行为
- 仅在 GPT-3.5 上测试,更强基础模型上的自改进空间未知
相关工作与启发¶
- vs Meta Agent Search: MAS 用固定的元搜索算法优化 Agent 模块。Gödel Agent 连元搜索算法都可以自我修改,搜索空间更大
- vs Self-Refine/Reflexion: 它们只能修改输出,不能修改自己的推理逻辑
- vs Gödel Machine (Schmidhuber 2003): 理论先驱,但原版需要形式化证明才能自修改。Gödel Agent 用 LLM 的启发式能力替代了严格证明
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ 首个完全自引用的 LLM Agent 框架,概念突破性强
- 实验充分度: ⭐⭐⭐⭐ 4 个benchmark + 详细消融 + Game of 24 案例分析
- 写作质量: ⭐⭐⭐⭐⭐ 理论形式化清晰,与 Gödel Machine 的类比恰当
- 价值: ⭐⭐⭐⭐⭐ 为 Agent 自改进开辟了全新方向