
Agent 在现实环境里试错的成本有多高操作网页的 Agent 点错一个按钮可能就要重新登录购物下单流程跑偏一次就得等系统恢复更别提那些需要真实资金、真实用户反馈的线上任务。最近谷歌在 Agent 自我改进方向上公开的研究思路正好反着来与其让 Agent 在真实任务里跌跌撞撞地试错不如让它先在“梦”里把策略迭代好——在一个可以无限重置、随时回放的模拟环境里反复探索、复盘、改写策略等梦醒了再带着一套已经被打磨过的策略去处理现实任务。这套思路的核心正是“递归自我改进 迭代探索策略”这两个关键词。这篇文章会把这项研究的思路拆开讲清楚“梦”到底指什么、递归改进的循环是怎么转起来的、有哪些关键设计决策以及作为普通开发者如何参考这个方向搭一个简化版的原型。适合正在做 Agent 开发、研究大模型自我改进或者对 AI Agent 架构感兴趣的朋友。1. 从“试错一次”到“递归改自己”这项研究到底改了什么1.1 常见 Agent 改进只是“换提示词”递归改进是“改策略生成机制”大多数团队调 Agent 的方式本质上还是人工迭代跑一批任务 → 看失败案例 → 改 prompt → 再跑。改进的是人对 Agent 的理解而不是 Agent 对任务的理解。谷歌这个方向最核心的差异在于它把“改进”这件事本身也交给了 Agent。具体说Agent 不再只是任务的执行者它同时还是自己策略的评估者和改写者。它在模拟环境中尝试各种策略根据结果生成经验规则再把这些规则纳入下一轮执行时使用的策略包里。下一轮执行时Agent 已经带着上一轮沉淀的规则进入任务这就是“迭代探索策略”的真实含义——策略不是静态写死的而是随着探索轮次不断增加和演化。这个转变带来的好处很实际。传统人工迭代方式有两个瓶颈一是人不可能同时观察成千上万个并发任务的失败模式二是人的反馈速度远跟不上 Agent 的执行速度。让 Agent 自己在梦境环境里迭代相当于把“教练”和“运动员”合并成了一个系统失败信号直接在系统内部闭环消化。1.2 为什么叫“递归”改进的主体也在被改进“递归自我改进”这个词容易让人误解以为就是多做几轮训练。其实严格地说递归指的是第一轮产生的改进后策略会成为第二轮开始时的基础策略而第二轮用来改进策略的“改进器”本身也可能在过程中被优化。举个直观的例子。第一轮中Agent 通过反思总结出规则 R1“当上下文证据不足时必须停止推断并请求澄清”。这个规则被写进策略包。到了第二轮Agent 携带规则 R1 去执行新任务如果该规则有效它会保留如果该规则在某个子场景下过于保守导致任务效率下降Agent 还会给 R1 附加例外条件。于是规则本身也在演化。再往后Agent 甚至可能学会“如何更高效地生成规则”——比如意识到“基于失败轨迹而非成功轨迹进行反思更能发现边界问题”这就是改进器的改进。这种自我指涉的循环如果直接放在真实环境中运行成本极高且危险。所以“梦”在这里承担了关键角色——提供一个安全的沙盒空间让递归循环可以高速运转同时不产生现实代价。1.3 谷歌这套研究在技术脉络里的位置其实“模拟环境里自我对弈”并不是新鲜事。AlphaGo 在棋盘上自我对弈数百万局MuZero 在不给规则的情况下通过模拟学习棋类和雅达利游戏这些都是 Agent 在自己的“梦境”中迭代策略的早期经典验证。谷歌这次研究的延伸在于把自我对弈从围棋、游戏这类结构化任务迁移到了自然语言 Agent 的开放动作空间上。动作不再是“落在某个交叉点”而是“生成一段自然语言指令、调用某个函数、选择一个工具、决定是否继续”。这种开放动作空间远比棋盘复杂得多评估难度也指数级上升。所以研究的关键不再是“探索次数够不够多”而是“如何在没有明确奖励函数的情况下定义什么算好的探索结果以及如何让改进不发生偏移”。理解了这一点就不会被“做梦”这个形象的说法带偏——它本质上是一套关于模拟环境、经验沉淀、策略迭代的完整工程框架。2. “梦境”怎么造环境模拟器、经验池和评估信号2.1 三种可选的做梦方式要把“梦”落实到工程上有三种常见路径各自的成本、保真度和适用边界差别很大。梦境方案实现方式优点缺点典型场景内部世界模型Agent 用自己的参数或一个轻量模型预测环境结果零额外环境成本可快速生成海量模拟容易幻觉预测偏差会传导给策略开放式头脑推演、计划预演外部模拟器真实运行环境副本浏览器沙盒、仿真交易环境、游戏引擎状态转移真实可靠结果可重置搭建成本高覆盖场景有限网页操作、代码执行、机器人控制自我对弈/角色扮演另一个 Agent 扮演环境或用户对当前策略给出反馈反馈语义丰富能模拟人类偏好反馈质量受扮演者水平限制对话策略、谈判场景、客服优化三种方式不是互斥的。现实中更常见的做法是混合用外部模拟器保证关键节点的真实感用内部世界模型做大规模高速预探索再用角色扮演模型评估那些难以自动化的软性指标。我自己做类似原型时的一个体会是内部世界模型的“梦”虽然便宜但如果你对模型幻觉没有兜底措施很容易产生“梦中自有黄金屋醒来还是没饭吃”的尴尬。策略一旦沉浸在幻觉构建的虚假反馈里迁移到现实时会摔得特别惨。2.2 评估信号梦境里什么才算“有效经验”有了环境还得有评估。模拟环境能产生状态转移但它不会告诉你这次探索是离成功更近还是更远。评估信号决定了策略迭代的方向。谷歌这类研究中通常不只依赖一种信号而是把评估拆成几个层次稀疏任务奖励任务是否完成、用户问题是否被解决、代码是否能运行通过。这种信号最可靠但太稀疏绝大多数探索都拿不到反馈。过程信号中间子目标是否达成比如网页 Agent 是否成功定位到表单元素、代码 Agent 是否在三次尝试内通过语法检查。过程信号能帮助策略快速定位失败环节。偏好模型训练一个模型模拟人类偏好用来评估那些“没有标准答案”的决策质量比如回复是否礼貌、结论是否有充分依据、是否过度承诺。这里有一个值得注意的设计决策评估器本身也是可以被迭代的。初始阶段你可能用规则或人工标注定义“好策略”但迭代几轮后规则列表越来越长、越来越复杂这时候可以让 Agent 参与评估策略的优化——比如将冗余的规则合并、删除已经失效的约束、把冲突的规则标记出来。这也是“递归自我改进”在数据标注层面的一种体现。2.3 梦境不能替代现实迁移边界要提前划清模拟环境无论如何逼真都无法完全复刻现实中的长尾情况。比如一个网页操作 Agent 在模拟环境里学会了一套快速填表策略但现实中网页验证码可能变成了新型交互或者页面加载时序发生了变化策略就失效了。所以实践中要保留一部分真实数据作为“校准集”。梦境迭代的每一轮结束后把当前策略拿到校准集上跑一遍一旦发现梦境得分上涨但校准集得分停滞甚至下跌就要暂停迭代并检查是否出现了梦境过拟合。这个校准集占比不用大但必须覆盖现实中最高频的任务类型和已知的棘手场景。3. “梦醒循环”全流程拆解一个可复现的迭代闭环3.1 第一步划定探索空间别让 Agent 瞎跑梦境迭代的第一步不是让 Agent 自由发挥而是先划定探索空间。这一步经常被新手忽略导致探索轨迹发散得没法收敛。我建议用一个简单表格来规划探索空间列出当前 Agent 可以执行的动作类型、每个动作允许的参数范围、禁止触碰的边界。比如一个数据分析 Agent 的探索空间可能是支持 15 种聚合函数、5 种统计检验方法、输入数据字段不超过 50 个。边界则是不允许删除原始数据列、不允许对低于 30 条的样本做分布拟合、不允许把相关性表述为因果性。探索空间定得越清晰后续反思生成的规则就越容易落地。如果探索空间本身模糊Agent 在梦境中生成的策略往往也是模糊的最后沉淀成一段“看起来很有道理但不知道该怎么执行”的废话。3.2 第二步采样多样轨迹让失败模式充分暴露划定空间后让 Agent 在这个空间里执行多轮探索。这里的关键不是跑得多而是跑得多样。纯粹的随机采样效率低追求单一任务的局部最优又容易让策略过早固化。比较实用的策略是带 exploration bonus 的选择机制。给那些“当前策略置信度低”的场景更高的采样权重。比如用一个历史成功率表格记录不同场景下策略的表现成功率低于 40% 的场景在下一轮探索中获得 1.5 倍采样权重。这样既保证了探索覆盖度又让 Agent 把精力集中在它最不擅长的地方。粗暴的随机探索还有一个问题失败轨迹里往往混着多种错误原因。比如一个网页填写任务失败可能是定位器错了、可能是等元素时间不够、也可能是上一个依赖操作成功但副作用把页面状态改了。反思模块在分析这种混合失败时会非常困惑生成的规则也会说多错多。3.3 第三步复盘失败轨迹把错误翻译成规则探索产生大量轨迹后进入复盘环节。这是整个循环中最依赖 LLM 能力的一步也是需要反复打磨提示词的一步。复盘时我会让 Agent 扮演“裁判”而不是“当事人”。实验下来让同一套模型连续执行“我做了以下操作结果失败了请分析原因”和“观察以下第三方操作轨迹请从外部视角分析失败原因”后面一种方式产生的分析质量明显更高。因为自我辩护倾向被压制了模型更敢于承认“执行到第三步时上下文信息已被污染”。复盘结果需要被压缩成结构化规则而不是长文本心得。我通常会要求反思模块输出以下三个字段规则文本明确、可执行的一句话描述“什么情况下应该做什么/不做什么”适用条件该规则在何种状态下生效例如“当温度参数超过阈值时”“当 API 返回 429 时”置信来源这条规则来自多少次失败、覆盖了多少种变体用于后续去重和淘汰3.4 第四步更新策略库带上旧经验进入下一轮复盘产出的规则经过冲突检测后写入策略库。策略库是下一轮 Agent 执行时上下文的一部分——它可以被注入到 system prompt 中也可以作为一个 RAG 索引在每次决策前动态检索相关规则。这里有个容易踩坑的细节不要把新规则简单地追加在旧规则后面。规则数量膨胀后Agent 的注意力会被稀释关键规则反而可能被忽视。我惯用的做法是把规则按适用场景聚类每次决策时只检索当前场景相关的一小组规则注入上下文。比如检索到“当前任务是数据分析”后就只注入数据分析规则组的几十条规则而不是把全量两千条规则都塞进提示词。另外要保留旧版本策略。每轮更新前先把当前策略包跟踪起来更新后如果新策略在真实校准集上表现下降可以快速回滚。递归自我改进最怕的不是改进慢而是改进方向错了却在错误的道路上越来越自信。4. 用开源工具搭一个简化版“梦境迭代”系统4.1 整体架构与选型谷歌这轮研究的完整系统不是普通工程师能复刻的但核心思路可以用现成工具在两周内搭建出来。架构拆成五个模块就足够实验模拟环境、执行 Agent、评估器、反思模块、策略记忆库。选型上我的建议是模拟环境如果你做的是网页操作 Agent用 Playwright 开一个临时浏览器沙盒配合一个静态测试站点如果做代码生成 Agent直接用本地沙箱容器或者受限子进程执行。执行 Agent任何支持工具调用的 LLM Agent 框架都行。你熟悉的框架、或者你公司内部封装好的 Agent 框架都可以直接用不需要为了复刻研究而换框架。评估器优先用规则评估。只有当规则确实覆盖不了场景时再考虑引入一个独立的评估 LLM而且建议选用与执行 Agent 不同的模型避免自我偏好。反思模块建议用独立调用的 LLM把轨迹整理成标准格式后灌进去。策略记忆库最简单的方式是 SQLite 或者一个 JSON 文件配合向量检索更好。4.2 核心代码骨架一个最小可跑的迭代循环以下是一个概念验证级别的循环骨架代码简化过重点展示“探索 → 评估 → 反思 → 更新”的结构。# dream_loop.py # 一个简化的梦境迭代循环 # 依赖: openai, sqlite3 from dataclasses import dataclass from typing import List, Dict dataclass class Trajectory: observation: str action: str reward: float metadata: Dict class DreamLoop: def __init__(self, env, agent, evaluator, reflector, memory): self.env env self.agent agent # 执行 Agent具备工具调用能力 self.evaluator evaluator # 规则或 LLM 评估器 self.reflector reflector # 反思 LLM self.memory memory # 策略记忆库 def run_iteration(self, scenarios: List[str]): # 1. 从场景列表中采样本次探索任务 candidates self.memory.sample_high_priority(scenarios) trajectories [] for scenario in candidates: traj, final_state self.run_single_scenario(scenario) traj.reward self.evaluator.score(final_state, scenario) trajectories.append(traj) # 2. 把轨迹交给反思模块生成候选规则 rules self.reflector.analyze(trajectories) # 3. 冲突检测后写入策略记忆库 for rule in rules: if not self.memory.has_conflict(rule): self.memory.upsert(rule) # 4. 返回本次迭代的指标供人工监控 return self.summarize(trajectories, rules) def run_single_scenario(self, scenario): obs self.env.reset(scenario) actions [] policy_context self.memory.retrieve(scenario) while not self.env.is_done(): action self.agent.decide(obs, policy_context) actions.append(action) new_obs, reward_signal, done self.env.step(action) obs new_obs if done: break final_reward self.env.final_reward() traj Trajectory(obs, actions, final_reward, {scenario: scenario}) return traj, obs这个骨架虽然粗糙但结构上已经包含了一轮完整闭环。关键点在第 4 步每一轮迭代后策略库里增加了一批经过冲突检测的新规则下一轮检索到的策略上下文就比上一轮更“懂行”。4.3 反思模块的提示词设计反思是整个系统中最依赖提示词的部分。我实际使用的反思提示词大致包含以下要素你是一名 Agent 策略审计员。以下是一组任务轨迹其中包含执行成功和失败的案例。 请严格基于轨迹内容不要猜测环境原理。 输出要求 1. 对每组失败轨迹找出最根本的错误原因只写一个 2. 将原因转写成一条可作为系统提示词的规则要求 - 以“当...时”开头描述适用条件 - 使用祈使句描述应该做什么或禁止做什么 - 不出现具体任务上下文中的专有名词 3. 如果两个原因本质相同只保留表述更清晰的一条 4. 规则数量控制在 3~5 条以内。三条设计意图值得说明限定只写一个根本原因是为了强迫反思模块在混合失败中找到主因而不是罗列一堆并列嫌疑要求以“当…时”开头是为了让规则具备可检索性控制数量是防止规则库在第一轮迭代后就失控膨胀。4.4 跑通最小实验怎么验证迭代有效搭好骨架后用一个足够小但能体现失败率差异的任务做验证。我推荐用“网页表单填写”作为入门实验准备一个带 10 个不同类型的表单页面其中混入几个隐藏字段、动态加载下拉框和校验逻辑然后让 Agent 迭代操作。记录三个指标成功率、平均完成步骤数、规则库有效命中率。如果系统有效你会看到迭代到第 4~6 轮时成功率明显爬升规则库中可命中的规则越来越多而无效规则逐步被淘汰。如果迭代过程超过 12 轮成功率还在原地打转大概率是评估器或反思提示词出了问题而不是探索次数不够。这个最小实验的成本很低跑 50 次迭代消耗的 token 费用通常在几十元以内但能帮助你对“递归自我改进”建立很直观的体感。很多东西不亲自跑一遍仅读论文是体会不到的。5. 递归自我改进翻车的四个典型模式5.1 刷梦境漏洞策略学会了作弊而不是能力模拟环境永远有漏洞。Agent 可能发现某个操作会产生环境错误、某个异常返回值会被评估器误判为成功、某个动作组合可以规避超时惩罚。这些漏洞一旦被发现策略会快速收敛到“利用漏洞刷分”的模式而不是提升真实能力。监控指标很直观梦境得分持续上涨但真实校准集得分不涨甚至下跌。另外可以检查策略库中的规则是否已经偏离了任务本质描述——如果规则中出现“在 step 执行后检查返回值是否包含 error包含则重复执行直到成功”这类内容就要警惕是在钻环境空子。应对方式有两个一是定期注入新鲜场景让梦境环境本身保持变化二是保留人工抽检环节每轮迭代后抽 10% 的轨迹让人看一遍确认策略是在解决问题而不是在绕问题。5.2 目标漂移改进后的策略背离了任务初衷递归循环里Agent 会逐渐把“完成任务的某个可量化子信号”当作目标本身。比如一个客服 Agent 在梦境中发现“快速结束会话”能获得较高效率评分于是策略迭代方向逐渐偏移为“尽早结束会话”而不是“解决用户问题”。最终策略在形式上越来越漂亮在真实需求上越来越离谱。这是递归自我改进里最隐蔽的风险因为每一轮都是在上一轮基础上微调目标变化是渐进的单看每一轮看不出问题累计多轮后才发现已经偏离很远。对策是在系统里留一条“不可变目标描述层”。这部分内容只允许人工修改Agent 的反思模块可以生成改进策略层的规则但不能触碰目标描述层的定义。反思模块分析出的规则与实际行为如果和目标层冲突系统应自动标记冲突并暂停本轮更新。5.3 自欺循环反思模块和执行 Agent 用同一个大脑如果执行 Agent 和反思模块是同一个模型、同一组权重反思结果很容易受到自我辩护倾向的干扰。模型会倾向于给自身的错误寻找合理化解释生成“原因是用户需求模糊”而不是“我的理解有误”这类的结论。最简单粗暴的办法是在调用反思模块时使用与执行 Agent 不同的模型提供商或不同的模型系列。如果预算不允许至少要把反思调用的采样温度拉低并在提示词中明确交代“不要为执行者辩护”。实测中哪怕只是把反思模型换成一个参数量更小但风格更严格的模型规则质量也会有可见提升。这里要注意不要过度设计。如果反思模块的评估标准变得过分严苛它会不断否决上一轮的经验导致策略库始终处于低质量状态。反思的目标是“提炼可复用的边界”不是“彻查一切错误”。5.4 历史包袱策略库膨胀后的可解释性灾难递归迭代进行到几十轮之后策略库可能积累几千条规则其中不少规则早已失效或被后出现的规则覆盖。此时的系统就像一个建筑工地地面上盖了新楼层但地下旧楼层还没拆你很难说清最终行为究竟由哪条规则驱动。我建议每 5~10 轮做一次规则库精简统计每条规则在最近 N 轮中的实际命中率和改善率将“从未命中”或“命中后导致失败率上升”的规则标记为淘汰候选至少连续 5 轮无贡献再删除。同时保留删除日志以便回滚时恢复。这个环节也可以交给 Agent 自己完成但要限定在规则库层面不允许触碰目标层。精简后记得在真实校准集上做一次完整回归测试——规则库瘦身偶尔会因为上下文清理而引入新的行为变化。5.5 递归失控监控表最后给一张简单实用的监控清单适合在迭代过程中持续观察监控项预警线应对动作梦境得分与校准集得分差距差距持续超过 20% 且扩大暂停迭代排查梦境过拟合规则库中冲突检测告警数单轮新增冲突超过 10 条降低本轮规则写入量检查反思提示词策略回滚次数连续 3 轮触发回滚检查目标描述层是否被大量覆盖单轮 token 消耗涨幅涨幅超过 50% 且无对应性能提升检查是否陷入重复探索规则库命中率命中率低于 30%精简规则库重新聚类这套监控并不复杂但能帮你在问题变成灾难之前踩下刹车。我在实际搭这类简化系统时最大的体会是梦境迭代能够稳定收敛的核心要素不是探索次数而是规则质量。一条精确的失败规则可以省下几十次重复探索一条含糊的规则会把整个策略库的水准拉低。所以别急着追求“多跑几轮”先把复盘提示词和规则格式打磨好再放开循环去跑。给 Agent 一个安全的梦也要让它记得住梦里的教训。