【免费下载链接】agentic-rl-lab
Reproducing and studying RL algorithms for LLM agents, including GRPO, GSPO, DAPO, OPD, Search-R1, ReTool, ALFWorld and beyond.
agentic-rl-lab是一个面向 LLM 的 Agentic RL(Agent 强化学习)实验仓库,本文聚焦其中最具挑战性的第 8 篇——用ALFWorld文字家务模拟器训练一个真正的家务 Agent。实验基于GRPO 的 group-relative advantage思想 + PPO 更新 LoRA,让 Qwen3.5-4B 在12K tokens 长轨迹中连续与环境交互最多 50 步,学会找东西、开门、加热、清洗、放东西等真实家务操作。80 步训练后,总体成功率从 52.92% 提升到 56.93%,未见房间场景提升近 6 个百分点。
🏠 ALFWorld:一间用文字搭建的厨房
ALFWorld 来自 ICLR 2021 论文,它把两套原本距离很远的世界对齐在一起:
- TextWorld:Agent 通过纯文字 observation 和文字 action 完成任务,底层用 PDDL 精确维护环境状态;
- AI2-THOR:Agent 在 3D 房间中接收视觉输入、导航并操作物体。
左侧是本文使用的 TextWorld 文字交互,右侧是 AI2-THOR 中的具身厨房
本文只用text-only 模式——模型看不到厨房图片,但面对的依然是一个真正维护状态、会检查动作前置条件、能判断任务是否完成的交互环境。
六类家务任务
| 任务类型 | 模型需要做什么 |
|---|---|
pick_and_place_simple | 拿起物体并放入指定容器 |
look_at_obj_in_light | 拿起物体并在灯光下查看 |
pick_clean_then_place_in_recep | 清洗物体后放入指定容器 |
pick_heat_then_place_in_recep | 加热物体后放入指定容器 |
pick_cool_then_place_in_recep | 冷却物体后放入指定容器 |
pick_two_obj_and_place | 找到两个同类物体并放入指定容器 |
数据按08-alfworld/data.py的筛选规则,只保留solvable=true且属于上述六类的game.tw-pddl游戏:
| 数据 Split | 游戏数 | 含义 |
|---|---|---|
train | 3,553 | 训练集 |
valid_seen | 140 | 房间见过,任务不同 |
valid_unseen | 134 | 房间没见,考验泛化 |
🎮 把做家务变成一次工具调用
整个实验只给模型一个工具:
alfworld_step(action: str)模型只需说出一句 ALFWorld 文字命令,比如:
go to countertop 1 open fridge 1 take apple 1 from countertop 1 heat apple 1 with microwave 1 move apple 1 to fridge 1这里的apple 1、fridge 1是环境里的完整实例名,数字后缀用于区分同一场景中的多个同类物品,模型必须原样复制。
ALFWorld 文字工具交互流程
模型每轮只调用一次工具,环境返回新的 observation + 可执行动作 + 终止信号
完整多轮上下文是关键
做家务是强状态依赖任务:模型需要记得自己开过哪个柜门、苹果现在拿在手里还是已经放进微波炉。因此下一轮 prompt 保留从任务开始到当前时刻的完整记录——如果一条轨迹交互了 30 次,第 31 次生成时,模型仍能看到前 30 次完整的工具调用和环境反馈。
08-alfworld/protocol.py中的build_next_prompt()直接在上一轮真实 prompt token 和 sampler 返回的 completion token 后追加 tool observation,不重新 tokenize 历史 assistant 文本,从而保证:
- 下一轮 prompt 是上一轮真实 token 序列的严格前缀扩展;
- rollout old logprob 与训练时的 assistant token 始终一一对齐。
🚀 三步跑通:安装 → 数据 → 训练
⚠️成本提示:正式配置每个 update 采样 64 条 12K 长轨迹,80 步实验的 PyTRIO 账单为¥1613.71。建议先运行 1-step 验证,再启动完整训练。
第 1 步:安装依赖
git clone https://gitcode.com/gh_mirrors/ag/agentic-rl-lab.git cd agentic-rl-lab uv sync --extra alfworld trio login swanlab loginALFWorld 通过可选依赖--extra alfworld安装,不影响仓库中其他子项目。
第 2 步:下载 ALFWorld 数据
uv run --extra alfworld alfworld-download \ --data-dir "$PWD/08-alfworld/datasets/alfworld"第 3 步:先跑 1-step 验证
uv run --extra alfworld python 08-alfworld/train.py \ --max-steps 1 \ --games-per-batch 1 \ --group-size 8 \ --max-episode-steps 10 \ --save-every 0 \ --swanlab-mode disabled确认数据、环境、采样、reward、PPO 和 checkpoint 链路都通了,再启动正式训练:
uv run --extra alfworld python 08-alfworld/train.py \ --base-model Qwen/Qwen3.5-4B \ --max-steps 80 \ --games-per-batch 8 \ --group-size 8 \ --max-episode-steps 50 \ --max-trajectory-tokens 12000 \ --max-assistant-tokens 2048 \ --temperature 1.0 \ --learning-rate 1e-6 \ --save-every 20 \ --swanlab-mode online每 20 步保存一次 state 和 sampler weights,后者供eval.py加载评测。完整启动指南见08-alfworld/start.md。
🧠 GRPO 思想如何注入长轨迹训练
GRPO 最有价值的思想:对同一个问题采样一组回答,用组内相对 reward 计算 advantage。
ALFWorld 没有"同一道数学题的 8 个答案",所以分组单位换成了同一个游戏、同一个初始状态下的 8 条独立环境轨迹。
ALFWorld × PyTRIO 训练闭环
同一个游戏创建 8 个独立 TextWorld 环境,8 条轨迹独立完成后在组内计算 relative advantage
1. 每条轨迹只算一个 episode return
reward = (1 if won else 0) - 0.1 × invalid_action_count成功 + 2 次非法动作 →0.8;失败 + 3 次非法动作 →-0.3。不计算 step-level reward。
2. 同游戏组内只减均值
advantage[i] = reward[i] - mean(reward_of_same_game)高于组均值的轨迹得到正 advantage,低于均值得到负。8 条 reward 全相同时,整组 advantage 为 0,跳过远端 backward。
3. Advantage 只分给模型生成的 token
一条训练序列里混合了 system/user prompt、assistant reasoning + tool call、tool observation 等四类内容。真正参与优化的只有 assistant 自己生成的 completion token;tool observation 留在上下文中提供环境反馈,但不作为训练目标。
4. PPO 更新 LoRA
每条完整轨迹构造成一个 PyTRIODatum,保留 rollout 时的 old logprob,调用 PPO loss(clip0.8 / 1.2)更新 LoRA 权重。
准确描述:GRPO-style 同游戏 group rollout + group-relative advantage + PPO loss 更新 Qwen3.5-4B 的 LoRA。
📊 80 步训练后的评测效果
Base、Step 40、Step 80 使用完全相同的评测设置(274 个游戏、temperature 0.01、seed 42)。
| 模型 | Valid Seen | Valid Unseen | 总成功率 | 平均非法动作 |
|---|---|---|---|---|
| Base | 52.86% | 52.99% | 52.92% | 5.41 |
| Step 40 | 57.14% | 52.24% | 54.74% | 5.24 |
| Step 80 | 55.00% | 58.96% | 56.93% | 4.81 |
左图比较 valid_seen / valid_unseen 成功率,右图展示总体成功率与平均非法动作数
三个值得注意的现象:
- 提升主要来自
valid_unseen:未见房间场景进步近 6 个百分点,说明训练信号确实影响了对环境交互策略的泛化; - Step 40 的
valid_seen最好,Step 80 的valid_unseen和总体成功率最好——训练收益没有沿所有维度单调增长; - 非法动作数持续下降:模型除了提高完成率,也开始减少格式错误和环境不可执行的动作。
ALFWorld 六类任务成功率对比
六类任务提升分布不均匀:valid_unseen中 Heat then place 提升 26.1 pp,Clean then place 提升 9.7 pp;Pick two & place 则下降 11.8 pp
训练过程中 reward 曲线如下图所示,在线 rollout 的任务类型和难度会随 batch 变化,因此有明显波动,最终能力变化仍需放到固定评测中判断。
💰 12K 长轨迹为什么这么贵?
这次 PyTRIO 会话账单¥1613.71,token 构成非常说明问题:
prefilling: 843.51M train: 62.24M sample: 14.28Mprefilling 远高于 train 和 sample。原因藏在 Agent 循环里:每执行一次工具,下一轮采样都要带上更长的任务描述、历史 tool call 和环境 observation。一条轨迹走到二三十步时,同一段早期上下文已经参与了很多轮 prefix 计算。
这也是长上下文 Agentic RL 最真实的成本之一——训练 token 只是账单的一部分,反复读取不断增长的环境历史同样消耗大量算力。
🔧 代码架构速览
整套实现共8 个 Python 文件,训练链路可以概括为:
发现并选择游戏 → 为每个游戏创建 8 个独立环境 → 并发采样完整工具轨迹 → 计算 episode reward → 同游戏组内计算 advantage → 构造带 token mask 的 PyTRIO Datum → PPO backward + optimizer → 保存 checkpoint 与 SwanLab 指标| 文件 | 职责 |
|---|---|
08-alfworld/data.py | 发现、过滤、打乱并循环读取 ALFWorld 游戏 |
08-alfworld/protocol.py | 单工具协议、完整消息历史、工具调用解析与 token 前缀扩展 |
08-alfworld/environment.py | 同游戏 K 环境、状态推进、TextWorld 兼容与资源清理 |
08-alfworld/rollout.py | 异步采样、环境交互、轨迹状态、reward 与 JSONL 记录 |
08-alfworld/advantages.py | 同游戏组内的轨迹级 relative advantage |
08-alfworld/train.py | Datum、token mask、PPO、优化器、SwanLab 与 checkpoint |
08-alfworld/eval.py | Base/checkpoint 评测、指标聚合和逐轨迹 JSONL |
08-alfworld/analysis.py | 读取评测 summary 并绘制 checkpoint 对比图 |
其中environment.py用同一个game.tw-pddl创建 K 个独立 TextWorld 实例,reset()会检查 K 条分支的初始 observation 完全一致,确保 group advantage 比较的确实是同一个任务。rollout.py在第一轮中同游戏 K 条轨迹共享相同 prompt(只提交一个num_samples=K的采样请求),第一步之后环境状态开始分叉,每条未结束轨迹各提交一个候选并发推进。
📝 总结
这是 agentic-rl-lab 系列中轨迹最长、工具调用最多、环境状态最复杂的一次 Agentic RL 实验。
核心思路:让 Qwen3.5-4B 在同一个 ALFWorld 游戏中采样 8 条独立轨迹,用终局成功与非法动作次数计算 episode reward,通过同游戏组内的 relative advantage 和 PPO 更新 LoRA。模型需要在最多 50 次环境交互、12K 完整上下文中持续记住自己做过什么,并让最终 PDDL 状态真正满足任务条件。
这次实验证明了GRPO-style group rollout 可以迁移到连续多轮、真实改变环境状态的 Agent 决策场景,也为后续把 Agentic RL 推向更长轨迹、更多工具和更复杂环境留下了清晰的起点。
【免费下载链接】agentic-rl-lab
Reproducing and studying RL algorithms for LLM agents, including GRPO, GSPO, DAPO, OPD, Search-R1, ReTool, ALFWorld and beyond.
相关推荐
slime × Tau-Bench 实战:Agentic 多轮工具调用环境下的 RL 训练指南
slime × Tau Bench 实战:Agentic 多轮工具调用环境下的 RL 训练指南 本文围绕 slime 开源仓库中 examples/tau be
人工智能大模型强化学习RLHF分布式训练Agentic RL训练实战:Hello-Agents带你从SFT到GRPO全流程
Agentic RL训练实战:Hello Agents带你从SFT到GRPO全流程 想要掌握AI智能体强化学习的核心技能吗?Hello Agents项目为你提供
教程人工智能大模型AI Agent多智能体强化学习微调使用 torchforge 进行 PyTorch 原生 Agentic RL 训练:Monarch + TorchTitan + vLLM 架构实践指南
使用 torchforge 进行 PyTorch 原生 Agentic RL 训练:Monarch + TorchTitan + vLLM 架构实践指南 本指南
人工智能AI 技能AI 插件大模型机器学习深度学习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考