Agent 自我改进的六条路
核心问题
当一个 AI Agent 完成任务之后,它能从这次经历中学到什么吗?下次遇到类似问题,它能做得更好吗?
自我进化回答同一个问题:怎么让 Agent 不重新训练,就能越来越强。
自我改进光谱
输出自审 → 持久记忆 → 进化搜索 → 对抗训练 → 自我修改 → 编排自优化
↓ ↓ ↓ ↓ ↓ ↓
单次改进 跨session 搜索最优 对抗生成 改写自己 优化脚手架
一、输出自审(Reflection)
核心机制
最基础的自我改进方式:Agent 生成回答后不直接输出,先让另一个 Agent 审一遍。
技术上叫 Reflection,核心结构是一个双 Agent 循环:
┌─────────────┐ ┌─────────────┐
│ Generator │ ───→ │ Critic │
│ (干活Agent) │ ←─── │ (审查Agent) │
└─────────────┘ └─────────────┘
↑ │
└────────────────────┘
循环直到通过
工作流程:
- Generator 接收用户输入,生成初始回答
- Critic 接收这个回答,判断有没有问题
- 有问题就把修改建议传回 Generator,Generator 据此重新生成
- 循环一直转,直到 Critic 没什么可改的了,返回空消息,循环终止
终止条件设计:Critic 不返回消息 = 通过(不需要额外评分阈值)
代表项目:LangGraph Reflection
LangChain 的 LangGraph Reflection 是这个模式的标准实现,核心就一行 API:
create_reflection_graph(assistant_graph, judge_graph)
代码生成场景应用: Critic 可以直接跑 Pytest 做静态类型检查,把错误作为 feedback 传回去。每一轮循环都有明确的、可验证的改进标准。
局限性
改进只发生在单次执行内。 下次对话开始,Agent 并不会记得上次犯过什么错。它能在当下把事情做好,但没有跨 session 的学习能力。
注:该项目今年 4 月已归档,模式已被合并进 LangGraph 核心。但 Reflection 作为基础模式,几乎被后面所有自我改进项目采用。
二、持久记忆(Persistent Memory)
核心机制
Reflection 解决了「当次做好」的问题。但「越用越好」需要另一种能力:跨 session 的记忆持久化。
核心思路:把 Agent 的状态从「对话级」提升到「Agent 级」。对话可以结束,但 Agent 的知识不清零。
三种记忆路径
┌─────────────────────────────────────────────────────────────┐
│ 持久记忆实现路径 │
├─────────────────┬─────────────────┬─────────────────────────┤
│ API 层持久化 │ 动态工具生成 │ 技能提炼 │
│ (Letta Code) │ (Agent Zero) │ (Hermes Agent) │
└─────────────────┴─────────────────┴─────────────────────────┘
代表项目
1. Letta Code(2.1k Stars)
采用 API 层持久化:
- Agent 的记忆存在 Letta 后端服务中(云端或自部署 Docker)
- 每次新对话自动加载之前积累的状态
/remember显式写入记忆/skill把当前操作轨迹抽象成可复用的技能模块
关键架构决策:记忆绑定在 Agent 上,不绑定在 LLM 上
今天用 Claude,明天换 GPT,后天换 Gemini,记忆都在。同一团队做的 LettaBot 把这个思路延伸到多平台,一个 Agent 同时接 Telegram、Slack、Discord,所有渠道共享记忆。
2. Agent Zero(16.7k Stars)
走的是 动态工具生成 + 记忆 路线:
- Agent 遇到没有现成工具的任务时,当场写代码创建新工具
- 然后存入记忆,下次直接复用
- 行为几乎全定义在可编辑的 prompt 文件中,没什么硬编码,小模型也能驱动
3. Hermes Agent(25.7k Stars)
目前机制最完整的方案,在记忆之上加了两层:
第一层:自动技能提炼
- 完成复杂任务后,Agent 自动把操作步骤抽象成 Skill 文档
- 下次直接调用
- Skill 在使用过程中会持续自我修正
第二层:定期回顾(Nudging)
- 哪怕用户没发起对话,Agent 也会自己复盘经验
- 主动存下重要知识
- 解决问题:很多有用经验出现在对话中途,用户不会刻意保存,但 Agent 会
技术洞见
不改权重,改状态。 在 LLM 参数冻结的情况下,通过外部的持久化状态层来积累知识。
三、进化搜索(Evolutionary Search)
核心机制
记忆解决了「记住经验」。但如果 Agent 的 prompt 写法、工具配置、工作流拓扑本身就有优化空间呢?
这时候需要更系统的方法:用算法搜索更好的 Agent 配置。
代表项目
1. EvoAgentX(2.7k Stars)
给一个自然语言目标,先自动生成多 Agent 工作流,然后用进化算法迭代优化。
同时优化三个层面:
| 优化维度 | 技术方法 | 说明 |
|---|---|---|
| Prompt 文本 | TextGrad | 调整每个 Agent 的指令措辞 |
| 工作流拓扑 | AFlow | 搜索 Agent 间的连接方式 |
| 配置参数 | MIPRO | 优化工具选择和参数设定 |
三条线并行进化,每一代的最优个体保留,变异出新方案,再评估、再筛选。
实测效果:
- HotPotQA F1 提升 7.44%
- MATH 准确率提升 10%
- GAIA 综合最高提升 20%
2. AgentEvolver(1.3k Stars,阿里巴巴)
把进化粒度做得更细,分三个阶段:
阶段一:自我提问(Self-Questioning)
- Agent 自主探索环境,给自己生成训练任务
- 不需要人工准备数据
阶段二:自我导航(Self-Navigating)
- 用 ReMe 经验池管理模块
- 把跨任务的成功经验存储起来,后续任务直接调用
阶段三:自我归因(Self-Attributing)
- 用 ADCA-GRPO 算法做轨迹级别的因果信用分配
- 传统 RL 给整条轨迹一个 reward
- ADCA-GRPO 会分析每一步操作的因果贡献:第 3 步帮了多少忙,第 7 步拖了多少后腿
效果:
- 7B 模型在 AppWorld 上从 1.8% 跳到 32.4%
- 14B 达到 48.7%
- 一个 7B 小模型经过自我进化,就能在特定任务上逼近数倍大的模型
四、对抗训练(Adversarial Training)
核心机制
进化搜索需要评估环境来打分。但如果连训练数据和评估基准都没有呢?
Agent0(1.1k Stars,北卡罗来纳大学 + Salesforce) 的方案叫 零数据自我进化,核心机制是双 Agent 对抗。
双 Agent 对抗进化
┌────────────────────┐ ┌────────────────────┐
│ Curriculum Agent │ ← 竞争压力 ───→ │ Executor Agent │
│ (出题 Agent) │ │ (做题 Agent) │
│ 生成越来越难的任务 │ │ 用工具集成推理解题 │
└────────────────────┘ └────────────────────┘
↓ ↓
难度提升 ←────────────────────────── 能力提升
关键动力学:
- Executor 变强后,简单题目没有训练价值了
- Curriculum Agent 就被迫生成更难的任务
- 更难的任务又倒逼 Executor 进化出更强能力
竞争本身就是训练信号。 整个过程不需要人工标注数据集,也不需要外部 reward model。
效果
- 基于 Qwen3-8B-Base 的数学推理提升了 18%(达到 58.2 分)
- 超过了需要人工标注的 R-Zero 和 Socratic-Zero
- 通用推理提升 24%
- 视觉版本 Agent0-VL 在开源视觉语言模型中排到了第一
零标注,胜过有标注。
这个结论背后的含义:也许精心策划的「对抗压力」比精心标注的数据集更能激发模型潜力。
五、自我修改(Self-Modification)
核心机制
前面四种方法有一个共同前提:改进机制本身是人设计的、固定的。Reflection 的循环逻辑是人写的,进化算法是人定义的,记忆结构是人搭的。
Meta 的 HyperAgents(2.1k Stars)打破了这个限制。
核心思路
让负责改进的 Agent,也能被改进。
用类比来说:
- 以前的 AI 像一个厨师,可以按手册不断改进菜品
- 但手册本身是固定的
- HyperAgents 让厨师学会了改手册,而且改手册的方法本身也在不断进化
架构设计
┌─────────────────────────────────────────────────────────┐
│ 可编辑程序 │
├─────────────────────────┬───────────────────────────────┤
│ Task Agent │ Meta Agent │
│ (干活) │ (改进) │
│ │ │
│ - 执行具体任务 │ - 修改 Task Agent 的代码 │
│ - 被改进的对象 │ - 修改自己的代码 ←── 关键! │
└─────────────────────────┴───────────────────────────────┘
系统由 Task Agent(干活)和 Meta Agent(改进)两部分组成,统一写在一个可编辑程序中。
Meta Agent 不仅能改 Task Agent 的代码,还能改自己的代码。
改进的策略本身也在进化。改进改进方法的方法……也在进化。
惊人发现
实验中最让人印象深刻的现象:系统自己发明了持久化记忆和性能追踪机制。
没有人预设这些功能,Agent 自己判断需要它们,就写代码给自己加上了。
它记录的内容相当具体:
"Gen55 的准确率最高但太严格了,Gen64 改善了平衡性。需要结合 Gen55 的批判性推理和 Gen64 的平衡感。"
跨领域迁移
把在论文审稿和机器人任务上进化出的 HyperAgent,直接拿去做 IMO 数学评分(从没见过数学题):
| 方法 | 迁移效果 (imp@50) |
|---|---|
| 原版 DGM | ≈ 0 |
| DGM-H (HyperAgents) | 0.630 |
原因分析:
- DGM 学到的是领域特定技巧,换了领域就失效
- DGM-H 学到的是通用的「如何改进」策略,比如持久化记忆、趋势分析,这些在新领域照样管用
对比 autoresearch
Karpathy 的 autoresearch(66.5k Stars)让 AI 在夜间自动跑 ML 训练实验。
autoresearch 和 HyperAgents 的区别:
| 项目 | autoresearch | HyperAgents |
|---|---|---|
| AI 本身 | 不变 | 可以改进 |
| 进化内容 | 实验结果 | 进化过程本身 |
| 改进方法 | 固定 | 自我修改 |
autoresearch 中的 AI 能得到更好的实验结果,但不会改进「自己做实验的方法」。
HyperAgents 进化的不只是结果,还有进化过程本身。
六、编排自优化(Harness Self-Optimization)
核心机制
前五种方法都在改 Agent 自身。但 Agent 的表现还取决于另一个东西:围绕它的编排层(Harness) 。
Harness 指的是模型之外的那一层编排逻辑:
- prompt 结构
- 检索策略
- 工具调用顺序
- 状态管理
同一个模型换一套 Harness,性能可能翻倍。
那……Harness 的设计本身能不能也自动化?
代表项目:Meta-Harness(629 Stars,斯坦福)
论文一作 Yoonho Lee 是切尔西·芬恩的博士生,另一位作者是 DSPy 的作者 Omar Khattab。
方案设计
用一个 Coding Agent(Claude Code + Opus 4.6)来迭代优化 Harness。
每一轮的工作流程:
┌─────────────────────────────────────────────────────────────┐
│ 迭代循环 │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 读取历史 │ → │ 提出新方案 │ → │ 跑评估 │ │
│ │ (文件系统) │ │ (新 Harness)│ │ (测效果) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ↑ │ │
│ └─────────────────────────────────────┘ │
│ 结果写回文件系统 │
└─────────────────────────────────────────────────────────────┘
Agent 读取文件系统中所有的历史记录(之前每一版 Harness 的源代码、评估分数、执行 trace),提出新的 Harness 方案,跑评估,把结果写回文件系统。
调试轨迹示例
论文附录里有一段让人拍案叫绝的调试轨迹:
- 第 1-2 轮:同时修了一个 bug 和改了 prompt 模板,性能大幅回退
- 第 3 轮:回去对比两个失败候选的改动记录,发现共同点是都改了 prompt 模板
- 混杂变量识别:把结构修复和 prompt 变更拆开,分别测试
- 第 7 轮:不再改任何现有逻辑,只在第一次 LLM 调用前加一个环境快照。这个候选成了全局最优
整个过程就是一个工程师的调试思路:尝试、失败、识别混杂因素、隔离变量、切换策略、组合已验证的修复。
关键设计选择
给 Agent 完整的文件系统访问权限,取代压缩摘要。
消融实验结果:
| 方案 | 中位数准确率 | 最高准确率 |
|---|---|---|
| 只给分数和摘要 | 34% | 38.7% |
| 给完整文件系统 | 50% | - |
压缩不只是丢了边角细节,而是丢掉了做正确决策所需的关键线索。
效果
- 文本分类上比人工最优方案 ACE 高 7.7 个百分点
- Context 用量只有 ACE 的四分之一
- TerminalBench-2 上拿到 76.4% 通过率,超过人工精调的方案
- 在所有 Opus 4.6 Agent 中排名第二
核心洞见
Big Model 和 Big Harness,两层天花板,缺一不可。
┌─────────────────────────────────────────┐
│ 模型天花板 (理论上限) │
│ ┌─────────────────────────────────┐ │
│ │ Harness 天花板 │ │
│ │ ┌─────────────────────────┐ │ │
│ │ │ 实际达到的性能 │ │ │
│ │ └─────────────────────────┘ │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘
- 模型能力决定了理论上限
- Harness 决定了实际达到的高度
- Meta-Harness 做的事情,是把 Harness 这一层的天花板尽量往模型天花板靠近
Meta-Harness 和前面五种方法的区别:它改的是 Agent 周围的「脚手架」,并非 Agent 自身。
但效果是一样的,系统整体在自动变强。
总结对比
| 机制 | 核心思路 | 代表项目 | Stars |
|---|---|---|---|
| 输出自审 | 生成后审查,循环修正 | LangGraph Reflection | 173 |
| 持久记忆 | 跨 session 积累知识和技能 | Letta Code · Agent Zero · Hermes Agent | 2.1k · 16.7k · 25.7k |
| 进化搜索 | 用算法优化 prompt、工具和工作流 | EvoAgentX · AgentEvolver | 2.7k · 1.3k |
| 对抗训练 | 双 Agent 竞争产生训练信号 | Agent0 | 1.1k |
| 自我修改 | 改写自己的代码和改进机制 | HyperAgents | 2.1k |
| 编排自优化 | 自动优化 Agent 的编排层 | Meta-Harness | 629 |
机制互补性
六种机制并非互斥:
- Hermes Agent 同时用了反思、记忆和技能进化
- AgentEvolver 同时做了自我提问(对抗生成的变体)和进化搜索
- Meta-Harness 的内部循环本身也包含反思和进化
核心命题
AI 的学习,正在从训练阶段溢出到部署阶段。
过去十年,模型变强的唯一方式是改权重。
这些项目展示了另一种可能:权重冻结的情况下,通过外部记忆、行为搜索、对抗训练、代码自修改、编排自优化来持续积累能力。
如果说,训练是「上学」
那这些机制,就是毕业之后自学能力。
相关链接
| 项目 | 链接 |
|---|---|
| HyperAgents (Meta) | github.com/facebookres… |
| Agent0 | github.com/aiming-lab/… |
| EvoAgentX | github.com/EvoAgentX/E… |
| AgentEvolver | github.com/modelscope/… |
| Agent Zero | github.com/frdel/agent… |
| Letta Code | github.com/letta-ai/le… |
| Hermes Agent | github.com/NousResearc… |
| autoresearch (Karpathy) | github.com/karpathy/au… |
| Meta-Harness (Stanford) | github.com/stanford-ir… |
| LangGraph Reflection | github.com/langchain-a… |