Agentic 工程实践文档
本文档介绍了 ROLL框架 中 Agentic 部分的开发实践经验,包括环境管理器开发协议、GlobalDataset 使用、验证模式配置和轨迹合成功能。
1. EnvManager 开发协议
EnvManager 是 Agentic 框架的核心组件,负责环境的管理和轨迹的生成。开发新的 EnvManager 需要遵循以下协议:
1.1 核心循环机制
EnvManager 必须实现 run_rollout_loop 方法,该方法遵循以下协议:
def run_rollout_loop(self, data: DataProto):
"""
1. 每次调用 run_rollout_loop 时,会持续执行 episode 直到收到数据收集完成的命令
2. 需要 重置 seed 以确保所有 group 的一致性
3. episode_id 从 scheduler 端获取
Seed 更新逻辑:
group_seed = base_seed + group_id
episode_seed = group_seed + episode_id
trajectory_id: f"{group_id}_{episode_id}_{episode_seed}"
"""
# 极简调用示例
while self.running:
# 从 scheduler 获取 episode_id
self.episode_id = ray.get(self.output_queue.get_episode_id.remote(self.env_config["group_id"]))
if self.episode_id is None:
break
# 重置环境
rollout_cache = self.reset()
while rollout_cache is not None and not rollout_cache.terminated and not rollout_cache.truncated:
# 做出决策
lm_output = self.make_decision(rollout_cache)
# 执行环境步骤
rollout_cache = self.step(lm_output)
# 提交轨迹
rollout = self.formulate_rollouts(rollout_cache)
ray.get(self.output_queue.put.remote(self.env_config['group_id'], self.episode_id, start_step, rollout))
1.2 EnvManager开发约束
- while loop 无限循环:EnvManager 通过 while 循环持续执行 episode
- 数据集遍历完成才返回 None 退出:当数据集遍历完成时,
reset()方法返回 None,触发循环退出 - 每个 episode 必须有对应的轨迹 put:每个完成的 episode 必须通过
output_queue.put提交轨迹数据