AgentEvolver 深度研究:自顶向下跑通第一版训练 一句话先说清楚:AgentEvolver 把'训练智能体'从「人喂题、人评卷」扭成了「智能体自己出题、自己记经验、自己复盘归因」的自进化闭环。AppWorld 是它最顺手的一块入门沙盒——Python 能跑、457 个 API 随手调、任务天然多步骤。本文只做一件事:先把基础 GRPO 流程用环境内置数据集跑通,ReMe 经验管理、ADCA-GRPO 归因这两块暂且关掉,循序渐进。 0. 为什么值得花时间读这篇 市面上的 Agent RL 教程,大多卡在'环境怎么接、奖励怎么给、任务哪来'。AgentEvolver 的巧,是它把这三件事都做成了可插拔的模块,还顺手给了一套最小可跑的默认配置(examples/basic.yaml)。 你不必一上来就啃三大机制。先把流程跑通、看到 loss 在动、看到 AppWorld 任务分数在涨,再回头开开关——这比死读论文踏实得多。 故本文顺序:先讲三大机制到底治什么病,再说为什么选 AppWorld 当沙盒,然后给最小化训练示例,最后自顶向下拆训练入口,让你知道每一步代码从哪来、往哪去。 1. 三大核心机制:各自在治什么病 1.1 普通 Agent RL 的三道坎 Agent 会调工具、会跟环境交互,这不稀奇。难的是让它持续变强。传统做法卡在三个地方: 任务稀缺。训练题靠人写规则、设场景、造目标。写出来的题永远有限,像给系统画了张固定地图——边界清楚,但想象力封死。走出地图就迷路。 探索低效。强化学习靠大量交互采样,烧钱又烧时。单 CPU 核跑几百万步环境,是家常便饭。 信号模糊。奖励太稀、太糊,模型不知道中间哪一步真起了作用。整条轨迹给同一个分,样本利用率低得可怜。 AgentEvolver 的回答,是把'提问、记经验、做归因'三件事塞进一个动态学习闭环。环境 → 任务 → 经验 → 策略,自己转起来。 1.2 机制一:自我任务生成(Self-Questioning,自动生成任务) 治的是「任务从哪来」。 不让智能体等投喂,让它反躬自问:'我还有什么不知道?' 流水线四步: 好奇心引导的环境探索。把环境配置当先验塞给 LLM,让它在环境里自由逛,产出多样化、高质量的交互轨迹。 适应性任务合成。LLM 读轨迹,结合用户偏好逆推出任务查询,再从轨迹里抽操作序列当参考解。 任务筛选与验证。语义去重滤掉冗余;再在真实环境里回放参考解,验证可行性、剔掉幻觉任务。 基于参考的合成奖励。请 LLM 裁判对比'智能体轨迹 vs 参考解'的覆盖度与效率,给出稠密、可靠的奖励信号。 这块贡献有多大?看数字:7B 模型只加 Questioning,AppWorld 的 avg@8 从基线 1.8% 直接拉到 23.2%(best@8 5.6% → 40.3%)。一个'自己出题'的机制,把近零基线拽出地面。 1.3 机制二:自我经验导航(Self-Navigating,失败经验学习) 治的是「探索低效」。 传统范式里,每次探索都是孤立事件,经验不沉淀。相似场景照样踩同一个坑。 它让系统学会'记笔记': 经验获取:把历史成败轨迹提炼成结构化自然语言经验,向量化,丢进可随时检索的经验池。 经验混合探索 :一部分轨迹由检索到的相关经验引导,一部分纯探索。探索与利用之间找平衡。 经验内化:把指导探索的经验文本从训练样本里剥离——逼模型学背后的推理逻辑,而非死记文本;对'成功经验引导且产生正向收益'的轨迹,梯度加权。 说'失败经验学习',最贴切的例子来自实测:某次智能体去调一个环境里根本不存在的 API,碰壁。这被记成一条经验。下次它学会先验证函数是否存在,再动手调用。败仗,变成了避坑的肌肉记忆。 数字:7B 上加 Questioning & Navigating,AppWorld avg@8 26.3% / best@8 43.1%。 1.4 机制三:自我反思归因(Self-Attributing,步骤级奖励归因) 治的是「信号模糊」。 长程任务里奖励滞后又糊,传统信用分配定位不到关键动作。 它让系统学会'复盘': 步级贡献归因:任务跑完,请一个'复盘专家'LLM 回溯整条轨迹,给每步打 GOOD / BAD 的定性标签。 双通道复合奖励:归因奖励(过程分,好=+1 / 坏=-1)+ 结果奖励(结果分,保留任务最终得分)。两部分各自标准化,再加权融合——既看过程,也看结果。 优势计算与优化:综合奖励转成每步的 Advantage,广播到该步对应的所有 token,最后用 GRPO 高效更新策略。 这套东西叫 ADCA-GRPO(归因驱动的信用分配)。相较传统 GRPO,性能约 +10%,训练步数少 40%。在监管行业尤其吃香——怎么解,和解出没有一样重要。 数字:7B 上加 Questioning & Attributing,BFCL v3 avg@8 56.8% / best@8 65.3%。 1.5 三者合起来什么样 不是三个孤立技巧,是一条链:环境 → 任务(Questioning)→ 经验(Navigating)→ 策略(Attributing)。外循环自转,不假外求。 完整版(三机制全开)的成绩:7B 模型 AppWorld avg@8 32.4% / best@8 51.2%,BFCL v3 avg@8 57.9% / best@8 69.0%,总平均 avg@8 45.2%——已经超过参数量翻倍的 14B 基线(29.8%)。14B 版更狠:总平均 avg@8 57.6%,而基线仅 29.8%。一句话,更少参数,更优性能。 2. AppWorld 是什么,为什么拿它当入门环境 AppWorld 由 Stony Brook 与 Allen AI 联合做,拿了 ACL'24 最佳资源论文。它造了个'可控的应用世界',专门考交互式编程智能体。 它的家底: 9 个日常 App(Amazon、Gmail、Spotify、Venmo、Splitwise、SimpleNote、Todoist、Phone、FileSystem 等),对外暴露 457 个 API 。 约 100 位(论文写 ~106)虚拟用户,数据库塞了 ~37 万行真实感数字活动——通讯录、订单、歌单、消息,彼此有家庭和社会关系。 750 个任务,切分:204 训练 / 75 开发 / 187 test-normal(同分布)/ 234 test-challenge(跨域 OOD)。 为什么它适合当入门沙盒,四点: Python REPL,不是简单工具调用。每步 LLM 吐一段 python 代码块,在沙箱里执行;变量跨步保留,能增量搭程序、靠代码状态记事儿。App 功能就是普通 Python 函数,直接调。这点对 Agent RL 太友好——动作空间就是代码,天然支持循环、条件、错误处理。 状态可查、奖励可程序化验证。评估用基于状态的单元测试,验数据库增量(DB_t 的变化),还专门查'附带损害'——你做任务时有没有误改不相关数据。同一个目标,多种完成方式都算数。 任务天然多步骤、长程。平均跨 1.8 个应用、要 9.5 次 API 调用。难度分层清楚:GPT-4o 也就解 ~49% 常规题、~30% 挑战题。够难,但可测。 环境是确定性 MDP。奖励只在'完成步'给 1,其余全 0——稀疏,但干净。配合 AgentEvolver 的归因机制,正好练'从稀奖励里抠步骤信号'的本事。 工具丰富、状态可控、奖励可程序化、文档齐全——新手踩坑有人接,老手拓展有空间。这便是选它当沙盒的理由。 3. 最小化训练示例:只用内置数据集跑基础 GRPO 目标:流程先通,不碰任务合成、不碰经验管理、不碰步骤归因。纯 GRPO 把环境自带的 original tasks 当训练集。 官方给的 examples/run_basic.sh 已经把这事做绝了。它手动起训练(不走 launcher),关键参数我挑出来讲: python3 -m agentevolver.main_ppo \ --config-path="$CONFIG_PATH" --config-name='script_config' \ env_service.env_url=http://localhost:8080 \ algorithm.adv_estimator=grpo \ attribution_driven_credit_assignment.enable=false \ actor_rollout_ref.model.path=Qwen/Qwen2.5-7B-Instruct \ actor_rollout_ref.actor.optim.lr=1e-6 \ data.train_batch_size=32 \ trainer.total_epochs=40 \ trainer.n_gpus_per_node=8 \ actor_rollout_ref.rollout.name=vllm \ actor_rollout_ref.rollout.mode=async \ actor_rollout_ref.rollout.n=8 \ actor_rollout_ref.rollout.temperature=0.9 \ task_manager.n=0 \ task_manager.mixture.synthetic_data_ratio=0.0 \ task_manager.mixture.use_original_tasks=True \ data.train_files=null data.val_files=null \ env_service.env_type=appworld 这几行是'最小化'的命门: algorithm.adv_estimator=grpo —— 用 GRPO,不用 PPO 的 critic。 attribution_driven_credit_assignment.enable=false —— 关掉 ADCA-GRPO(步骤归因),退回朴素结果奖励。 task_manager.n=0 + synthetic_data_ratio=0.0 + use_original_tasks=True —— 关掉任务合成,只用环境内置原题。 data.train_files=null —— 不外接数据,吃环境自带的训练切分。 actor_rollout_ref.rollout.name=vllm + mode=async + n=8 —— vLLM 异步rollout,每组采 8 条。 模型默认 Qwen2.5-7B-Instruct,学习率 1e-6,批次 32,40 轮,8×A100(论文实验 cluster 配置)。想先在本机冒烟,把 n_gpus_per_node 调小、序列长度调短即可。 最简启动,其实一行就够(走 launcher,自动连环境服务): conda activate agentevolver python launcher.py --conf examples/basic.yaml --with-appworld 4. 环境服务怎么起、怎么用 curl 验活 训练要连一个'环境服务'。它本质是个 FastAPI 服务,把 AppWorld 包成 HTTP 接口。 手动起法(推荐先手动,心里有数): source $(conda info --base)/etc/profile.d/conda.sh conda activate appworld cd env_service/launch_script bash appworld.sh appworld.sh 背后就一条命令: python -m env_service.env_service --env appworld --portal 127.0.0.1 --port 8080 监听 127.0.0.1:8080。日志里出现 Starting server on 即算起妥。 用 curl 验活——这是最容易漏的一步。 服务跑起来不代表能训,先探一口: curl -i http://127.0.0.1:8080/healthz 预期返回 HTTP/1.1 200 OK,正文 OK。/healthz 是 FastAPI 的健康检查端点(代码里明确定义 @app.get('/healthz'))。没有 / 也没有 /health,别敲错。 业务端点全是 POST:/create(建实例)、/step(执行一步)、/evaluate(评分)、/get_info、/release、/get_env_profile。训练时由框架自己调,你一般不用手动碰。 一句话口诀:起服务看 Starting server on,验活看 curl /healthz 回 200 OK。两者都过,再跑训练。 5. basic.yaml 关键点:自顶向下看懂训练入口 examples/basic.yaml 是最小化训练的灵魂文件。先贴真本,再逐段拆。 hydra: searchpath: - file://external/config_fallback - file://config defaults: - ppo_trainer - agentevolver - _self_ trainer: experiment_name: basic # self-navigating exp_manager: val_rollout_mode: "woexp" train_rollout_mode: "woexp" rollout_ratio: 0.0 train_sample_mode: "alldiscard" train_sample_keepratio: 1.0 experience_template: "\n\nSome Related Experience to help you to complete the task:<EXP>{}</EXP>\n\n" init_exp_before_training: False init_exp_only: False summary_batch_size: 8 reme: base_url: "http://127.0.0.1:8001" workspace_id: "default" enable_summarizer: False enable_context_generator: False retrieve_top_k: 3 updated_freq: 0 # self-attributing attribution_driven_credit_assignment: enable: false 逐段讲: Hydra 头。searchpath 指向 config 与 external/config_fallback;defaults 拉进 ppo_trainer 和 agentevolver 两组默认配置,再 _self_ 覆盖。即:这份 yaml 只写'跟默认不同的部分',其余继承。 trainer.experiment_name: basic。实验名,决定日志/备份目录。 exp_manager 这段——把经验导航(ReMe)关干净: val_rollout_mode / train_rollout_mode 均 'woexp'(without experience),rollout 时不注入经验; rollout_ratio: 0.0,不加经验; train_sample_mode: 'alldiscard',训练后样本全丢,不沉淀; init_exp_before_training: False,不开训就别建池。 reme 子段——经验管理服务彻底禁用:enable_summarizer: False、enable_context_generator: False、updated_freq: 0(0=不更新)。经验池压根不转。 attribution_driven_credit_assignment.enable: false——把 ADCA-GRPO(步骤级归因)关掉。奖励退回到朴素结果分。 自顶向下理清训练入口这条链: launcher.py ├─ 读 .env(取 APPWORLD_PATH / APPWORLD_SCRIPT / API key / conda 路径) ├─ pty_launch("appworld") → 起环境服务(FastAPI, :8080) └─ python -m agentevolver.main_ppo --config-path config --config-name basic │ └─ main_ppo.py ← 真正的训练循环入口 加载 ppo_trainer + agentevolver 配置 连 env_service.env_url=http://localhost:8080 跑 GRPO(adv_estimator=grpo) 也就是说:launcher 是壳,main_ppo 是核。 launcher 负责起环境、备份 yaml、注入变量;真正sample-rollout-update 的活儿全在 agentevolver/main_ppo.py。 .env 里这几项必填:环境服务的 APPWORLD_PATH、APPWORLD_SCRIPT、REME 相关(本次不用可空)、你的模型 API key、conda 路径。漏一项,launcher 起服务时就卡。 最简一键: cp example.env .env # 填好上面几项 python launcher.py --conf examples/basic.yaml --with-appworld 6. 跑通清单 & 下一步 装机到跑通,照这个顺序: [ ] bash install.sh 装主环境(conda env 名 agentevolver) [ ] cd env_service/environments/appworld && bash setup.sh 装 AppWorld 沙盒(建 appworld conda 环境、下数据、click 降级到 8.2.0 修安装坑) [ ] cp example.env .env,填 API key / conda 路径 / APPWORLD 相关路径 [ ] 起环境服务,curl -i http://127.0.0.1:8080/healthz 看到 200 OK [ ] python launcher.py --conf examples/basic.yaml --with-appworld 开训 [ ] 盯日志:先看环境连上没,再看 GRPO 的 reward 是否在涨 下一步,循序渐进地开开关: 先确认基础 GRPO 跑通、loss 在动、AppWorld 分数在涨。 开 ADCA-GRPO:把 attribution_driven_credit_assignment.enable 改成 tr
💬 讨论回复(8)
合作
智谱 GLM-5 已上线
在智谱开放平台 BigModel.cn 打造 AI 应用。新一代旗舰模型 GLM-5 在推理、代码、智能体综合能力达到开源模型 SOTA。
领取 2000万 Tokens