← 返回资料站  /  Recursive Self-Improvement
论文 自我修改代码

Gödel Agent: A Self-Referential Agent Framework for Recursively Self-Improvement

Gödel Agent:用 monkey patching 在运行时改写自身全部逻辑的自指 agent
一句话北大 + UCSB 把 Gödel machine 的思想搬到 LLM agent 上:agent 在 Python 运行时内存里读取并改写自己的全部代码(包括改进机制本身),在 DROP/MGSM/MMLU/GPQA 上超过 Meta Agent Search(MGSM 64.2% vs 53.4%),一轮完整进化成本约 $15(对比 Meta Agent Search 的 $300)。

这是什么

现有 agent 优化范式有一个共同天花板:改进流程本身是人写死的。手工设计的 agent 策略完全固定;ADAS(Meta Agent Search)这类 meta-learning 方法虽然让 meta agent 搜索 agent 设计,但搜索算法本身不可变,搜不出人为框架之外的设计。Gödel Agent 的主张是把这最后一层也放开:agent 不仅能改自己解题的 policy,还能改'如何改自己'的 meta-learning 算法,形式化为 π_{t+1}, I_{t+1} = I_t(π_t, I_t, r_t, g),即 I 自己更新自己。

名字来自 Schmidhuber 的 Gödel machine,但做了关键替换:原版要求形式化证明'改动能提升期望效用'才执行自我修改(实践中不可行),这里直接用 LLM 的推理判断代替 proof search,用环境反馈(验证集分数)代替效用证明。代价是失去理论保证,换来可以真的跑起来。论文发表于 ACL 2025,arXiv 2024-10,是 STOP(只改 scaffold 的固定改进循环)到 Darwin Gödel Machine 之间的关键一环,S2 引用 21 次。

三种 agent 范式对比:手工设计 agent(policy 固定)、meta-learning 优化 agent(如 ADAS,policy 可搜但搜索算法固定)、自指 agent(policy 和改进机制都可学)。从左到右自由度递增、人工设计递减——这张图是理解本文在 RSI 谱系中位置的关键。
三种 agent 范式对比:手工设计 agent(policy 固定)、meta-learning 优化 agent(如 ADAS,policy 可搜但搜索算法固定)、自指 agent(policy 和改进机制都可学)。从左到右自由度递增、人工设计递减——这张图是理解本文在 RSI 谱系中位置的关键。

机制与做法

自指的实现:运行时内存 + monkey patching

整个 agent 就是一个 Python 进程。自我感知靠 inspect 运行时内存:action_environment_aware 枚举 globals 里的函数/类/模块/变量,action_read_logic 用 inspect.getsource 读任意函数或类的源码(包括 agent_module 自己)。自我修改靠 action_adjust_logic:LLM 生成新代码字符串,exec 后热替换到目标模块的属性上(monkey patching),支持 modify/add/delete 函数或类。下一轮迭代直接跑替换后的新逻辑,不需要重启进程。

决策循环很薄:一个 goal_prompt 告诉 LLM'你有权限修改自己的一切逻辑',LLM 每步输出动作序列(读代码、改代码、跑评测、继续递归),循环本身(SELF_IMPROVE / EXECUTE)也在可修改范围内。理论上 agent 连'如何自我改进'的代码都能重写——这是它与 ADAS 的本质区别。

实现机制:上层是应用视角的自我改进循环(prompt 驱动、thinking、error handling),下层是运行时内存视角——agent 每轮 read 自己的局部/全局变量(即自身代码),生成修改后 monkey patch 回内存,下一轮直接以新逻辑运行。
实现机制:上层是应用视角的自我改进循环(prompt 驱动、thinking、error handling),下层是运行时内存视角——agent 每轮 read 自己的局部/全局变量(即自身代码),生成修改后 monkey patch 回内存,下一轮直接以新逻辑运行。

工程上的辅助设计

纯自指循环在当前 LLM 上跑不稳,作者加了四个初始工具:thinking before acting(先输出分析再行动)、error handling(代码报错不崩溃,把 traceback 带入下一步决策)、执行 Python/Bash、调 LLM API。Ablation 显示前两个是命门:去掉 thinking,MGSM 从 64.2 掉到 50.8;去掉 error handling 掉到 49.4;后两个影响不大(agent 可以自己重新实现)。

实验设置:优化器用 gpt-4o-2024-05-13,被优化的 policy 和所有 baseline 统一用 gpt-3.5-turbo-0125 评测。每个任务跑 6 个独立进化周期,每周期最多 30 次迭代,在验证集(128 题,GPQA 32 题)上拿反馈,最后在测试集(800 题,GPQA 166 题)上报分。初始 policy 一律是最朴素的 CoT。

MGSM 上 30 轮迭代的准确率曲线:Gödel Agent(橙)从 0.28 爬到 0.63,但两次跌到 0(把自己改崩后靠 error handling 恢复);随机采样 prompt(蓝)始终在 0.3 附近。说明自我改进有效但过程非单调、有自毁风险。
MGSM 上 30 轮迭代的准确率曲线:Gödel Agent(橙)从 0.28 爬到 0.63,但两次跌到 0(把自己改崩后靠 error handling 恢复);随机采样 prompt(蓝)始终在 0.3 附近。说明自我改进有效但过程非单调、有自毁风险。

自我改进出了什么

Game of 24 案例最能说明'自由度'的价值:初始 LLM 直接解题失败 6 次后,agent 干脆放弃 LLM 路线,把 solver 重写成穷举搜索算法,准确率直接 100%。另一些 run 里它坚持 LLM 路线,但自己加了代码验证答案(+10%)和失败重试(+15%),还顺手给自己的优化循环加了 error-trace 分析和并行评测。不同初始 policy 的实验显示:起点越弱,改得越多、涨得越多,但最终都没超过人类设计的 ToT——作者承认当前 LLM 还创新不出超越 SOTA 的算法。

关键结果

实证核查

扎实核心声称(运行时自读自改全部逻辑)与开源代码完全对得上,论文对自己的局限也写得诚实;但注意无限制版的高分主要靠换强模型,且尚无第三方复现报告。
论文声称 agent 通过 monkey patching 实现自我感知与自我修改,连改进机制本身都可以改。
代码属实:src/agent_module.py 里 action_environment_aware 枚举运行时 globals,action_read_logic 用 inspect 读任意模块/类的源码,action_adjust_logic 接收 LLM 生成的代码字符串后热替换模块属性,目标可以是 agent_module 自身,即改进循环确实在可修改范围内(GitHub Arvid-pku/Godel_Agent,MIT,214 stars)。README 的项目结构与论文描述一致,task_*.py 明确标注改编自 ADAS。
Gödel-free(无限制)版本大幅超过所有 baseline(MGSM 90.6%)。
论文 4.3 节自己承认,这主要是 agent 自发调用 GPT-4o 等更强模型完成任务的结果——对比基准全是 GPT-3.5 跑的,所以这组斜体数字衡量的是'开放环境下会薅资源',不是优化算法本身的能力。受限版(80.9/64.2/70.9/34.9)才是公平对比,而这组里 GPQA 只比 Meta Agent Search 高 0.3(置信区间 ±3.3,统计上打平)。
实现了 recursive self-improvement,agent 可以改进自己的改进机制。
机制上成立但实践中'递归'的深度有限:5.2 节统计显示 agent 改自己递归改进模块的典型后果是把自己改死(4% 意外终止的主要原因);Game of 24 案例里对优化循环的改动限于加 error-trace、并行评测、清理日志这类小修。真正的性能来源是改 solver(任务 policy)。另外 baseline 数字直接引自 ADAS 论文而非重跑(实验节脚注),测试集是 ADAS 的采样子集(800 题/GPQA 166 题)。
开源可复现。
仓库结构完整(datasets/、results/ 存了每轮自改代码、src/),持续维护到 2025-09;但 issues 只有 4 个,全是使用提问(如 #1 换 GROQ 模型、#3 怎么输入问题),没有任何第三方复现成功/失败的报告,复现状态实际未知。自我改进过程随机性大(6 个独立 cycle、92% 中途跌落),单次跑出论文数字不应期待。

与我们方向的关系

在 RSI 谱系里,这篇是'自由度'维度的极点实验:STOP 固定改进循环只改 scaffold,ADAS 固定搜索算法只搜 agent 设计,Gödel Agent 把整个运行时全部开放。它验证了两件对课题组有用的事:一是'全开放自我修改'在 2024 年的 LLM 上就能跑通且不会立刻失控(4% 自毁率),二是撑住它的不是什么精巧机制,而是 error handling + 先想后做这两个朴素设计——做自改代码类实验时这两项应当默认标配。

它也清楚暴露了天花板:agent 改不出超越 ToT 的新算法,'改进改进机制'基本只会把自己改坏,性能提升几乎都来自改任务 policy。这解释了为什么后续 Darwin Gödel Machine 退回到'冻结外层循环 + 种群存档'的保守设计——纯自指在当前模型能力下收益低于风险。对比阅读这两篇可以很好地界定'哪一层开放是值得的'。

阅读笔记

monkey patching 方案的一个隐含代价:所有状态在进程内存里,agent 改崩(exec 出错或把循环改死)只能靠 error handling 兜底,没有 DGM 那样的 archive 可回滚——论文说 agent 会'revert to a previous optimal algorithm',靠的是历史记忆里存的旧代码。另外 repo 的 key.env 直接进了版本库(占位 OpenAI key),工程规范一般。

材料清单

TeX 源码
已存档:Raw/g-del-agent/source/
代码仓库github.com/Arvid-pku/Godel_Agent
214★ · 最近推送 2025-09-17
对照方法github.com/ShengranHu/ADAS
Meta Agent Search(ADAS):本文的主要 baseline,评测脚本 task_*.py 亦改编自此仓库
思想源头arxiv.org/abs/cs/0309048
Schmidhuber 的 Gödel machine 原始论文(2003):本文用 LLM 推理替换了其中的 proof search

同类条目