Agentic RL环境搭建与HGPO代码实战教程

2026-06-20阅读 0热度 0
其他

1 前言

HGPO(Hierarchy-of-Groups Policy Optimization)通过 step-wise GRPO 做 Agentic RL,思路是将处于相同状态的 rollout step 聚合起来,对它们做 Group-wise 优势计算。这样一来,奖励分配变得更细粒度,能缓解那种只在 rollout 结束时才给奖励导致的稀疏问题。

Agentic RL 环境和代码学习:以HGPO为例

论文在 ALFWorldWebShop 上验证了效果。所以这篇文章就来拆解一下 ALFWorld 的环境是怎么构造的,以及如何在 verl 里把 HGPO 跑起来。

2 ALFWorld

2.1 ALFWorld 简介

ALFWorld 模拟的是家庭场景——厨房、浴室、卧室、客厅这些。Agent 需要根据文本指令跟环境交互,完成类似“把洗干净的苹果放进冰箱”这种任务。每一步,Agent 接收自然语言描述的当前状态,然后从候选动作列表里选一个执行,直到任务完成或者超出最大步数。

它包含六类环境:Pick & Place(拾取与放置)、Examine in Light(在光源下检查)、Clean & Place(清洁与放置)、Heat & Place(加热与放置)、Cool & Place(冷却与放置)、Pick Two & Place(拾取两个物体并放置)。

在 LLM Agentic RL 里,一般用纯文本模式,每个 step 的输入输出都是字符串。

2.2 ALFWorld 数据集格式

按 HGPO 项目提供的方式下载 ALFWorld 后,会得到这样的目录结构:

$ALFWORLD_DATA/json_2.1.1/
├── train/          # 2435 个任务场景(训练集)
├── valid_seen/     # 242 个(验证集,in-distribution,房间布局在训练集中间出现过)
├── valid_unseen/   # 85 个(验证集,out-of-distribution,房间布局未见过)
└── valid_train/    # 训练集的子集验证用
$ALFWORLD_DATA/verl_data/
├── train.parquet   # 16 条 verl 格式训练数据(仅用于声明模态,实际任务由环境动态加载)
└── test.parquet    # 128 条 verl 格式测试数据

同一个任务目录下通常会有 2–3 个 trial_T... 子目录,代表同一任务、同一房间、不同人类标注员的演示轨迹。区别在于:

  • 物体摆放位置不同(同一类物体放在不同家具上)
  • Agent 初始站位不同
  • 任务描述语言不同(语义相同,措辞各异)

TextWorld 训练时会从这些 trial 中随机选一个作为实际游戏场景。

每个 trial 目录下包含:

trial_T.../
├── game.tw-pddl        # TextWorld 游戏文件(环境实际加载此文件)
├── initial_state.pddl  # PDDL 格式初始状态
└── traj_data.json      # 任务元数据(任务类型、物体位置、人类标注描述等)

3 HGPO in VeRL

接下来看看如何在 VeRL 里使用 ALFWorld 环境。

3.1 交互逻辑

先看 multi-turn 交互是怎么实现的。单个 Episode 的交互循环如下:

reset()
  → 随机加载一个 game.tw-pddl 文件
  → 返回初始场景描述:
    "You are in the middle of a room. Looking quickly around you, you see ..."
    "Your task is to: put a hot apple in countertop."
for step in range(max_steps=50):
    1. build_text_obs()  构造完整 Prompt(含历史 + 任务 + 可用动作列表)
    2. LLM 生成响应:  ...推理过程...go to fridge 1
    3. alfworld_projection()  解析  标签内的动作文本
    4. TextWorld.step(action)  执行动作,返回新观测 + reward + done
    5. memory.store(obs, action)  写入历史记录
    if done: break
reward: 0(中间步)或 10.0(任务完成,won=True)

上面这套逻辑通过 VeRL 的多轮交互 Loop 实现。

3.2 奖励设计

任务完成奖励:只在完成任务时给奖励,完成 +10 分,否则 0 分。为了让奖励能传递到历史 step 中,引入了折扣因子 0.95——越靠近最后一步,奖励越高。

无效惩罚:如果智能体生成了在当前环境中无效的动作(invalid action),就会施加一个小的负奖励:-0.1。无效动作包括下面几种情况:

条件说明
输出中无 ... 标签格式错误
输出中无 ... 标签缺少推理过程
输出中含中文字符(u4e00-u9fff语言错误

3.3 环境构造

在 Agentic RL 任务里,最重要的就是环境怎么构建。这里的环境包括文本解析与处理、环境交互与反馈、奖励打分等。它主要包含以下几个部分:

动作解析

模型被要求先做推理,再输出动作。token 在多轮交互 loop 被解码后传入 env。一条典型的 LLM 输出格式长这样:


I need to heat the apple. I'm currently holding it and standing near the microwa ve.
The admissible actions include 'heat apple 1 with microwa ve 1', which is exactly what I need.

heat apple 1 with microwa ve 1

这条输出会被送入 env 进行解析,提取出 的内容。

环境与奖励反馈

env 会判断是否有无效动作——如果是无效动作,奖励会施加惩罚,参考上面的奖励系统。同时 env 也会判断 LLM 是否完成了任务,如果最终完成了,就给 +10 分。

如果是无效动作,observation 返回 "Nothing happens."。如果是有效动作,env 会根据动作生成下一步的 observation,包括环境状态和可执行的动作。

并行环境

框架会为每一个 rollout 创建一个 env,并分配 num_cpus=0.1 的资源。

免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策