【LLM】ROLL团队的Agentic RL训练坑点

note

  • ROLL团队分享的在终端环境中训练Agentic RL(具身强化学习)的实践经验 ,核心观点是:Agentic RL不仅仅是算法问题,更是环境、基础设施和算法的协同设计。
  • mask & filter 策略:当前对训练有害或无法提供有效学习信号的样本都可以采用mask或是filter
  • Crash 是常态,关键是如何Resume。Agentic RL本身就是细节很多,这本质上也是一套高度耦合的系统:数据、环境、奖励、调度、优化......任何一个小环节出问题,都可能在几十个 step 之后放大成一次 crash。
  • 训练出现不稳定时,两条经验性原则:
    • 优先针对极端轨迹进行定向处理(如果极端轨迹能被某些特征定位到,例如 mask 掉超长负样本),如果仍然不稳定,再采用全局重加权。
    • RL 梯度通常比监督学习噪声更大,因此更小的学习率,配合更强的约束、退火或自适应机制,往往更稳定。细粒度行为监控与惩罚

文章目录

  • note
      • [1. 为什么Agentic RL比传统RLVR更难?](#1. 为什么Agentic RL比传统RLVR更难?)
      • [2. 核心工程挑战与解决方案](#2. 核心工程挑战与解决方案)
        • [A. 环境管理的"双模驱动"](#A. 环境管理的“双模驱动”)
        • [B. 数据质量是生命线](#B. 数据质量是生命线)
        • [C. 训练稳定性技巧](#C. 训练稳定性技巧)
      • [3. 监控与避坑](#3. 监控与避坑)
      • [4. 经验和总结](#4. 经验和总结)
  • Reference

1. 为什么Agentic RL比传统RLVR更难?

  • 传统RLVR(如解数学题):是"单步赌博机"问题。模型给出答案,获得奖励,干净简单。
  • Agentic RL(如网页导航、工具调用):是"多步交互式决策"问题。模型需要在稀疏、延迟的奖励信号下,在动态环境中持续行动,并承担长程信用分配的责任。
  • 本质区别 :从"会回答 "的模型,升级为"会行动"的模型。

2. 核心工程挑战与解决方案

首先在 ROLL 中构建了一套环境管理器,并清晰地划分了三个核心组件之间的交互边界:ROLL(训练框架)、iFlow CLI(Agent 框架) 和 ROCK(沙箱管理器)。

A. 环境管理的"双模驱动"

为了在训练和部署时保持一致,团队设计了两种模式:

  • Roll-Managed Mode :由训练框架(ROLL)主导上下文和轨迹管理,灵活性高,适合引入丰富的Prompt模板。
  • CLI-Native Mode :直接调用Agent框架(iFlow CLI)的API,一致性高,确保训练输入与真实使用场景完全一致。
B. 数据质量是生命线

RL 实例主要来自两个来源:

1、大规模合成的实例:按照难度与标签采样,并由多个外部供应方进一步标注与筛选。

2、专家编写的实例:通常难度更高、构造更精细。

  • 伪阳性(False Positive) :高达40%的合成数据存在漏洞,导致模型"作弊"(如不构建流水线,直接写文件通过测试)。解决方案是引入LLM-as-judge验证模块严格审查。
  • 环境净化:严格隔离测试文件,防止模型读取测试脚本"走捷径"。
C. 训练稳定性技巧
  • Mask and Filter策略 :
    • 对不可恢复错误(如环境崩了):直接Mask掉样本,不产生梯度。
    • 对偶发错误(如网络抖动):按比例过滤,避免过度重试。
python 复制代码
class GroupFilterTB:
        def __init__(self, config: AgenticConfig, env_manager_config: EnvManagerConfig, mode: str):
            self.config = config
            self.env_manager_config = env_manager_config
            self.mode = mode
            self.global_filter_stats = {"total": 0, "filtered": 0}

        def filter(self, group_id: int, episode_id: int, group: list[DataProto]):
            """
            Decide whether to filter out an entire group of rollouts.
            """

            self.global_filter_stats["total"] += 1

            # Step 1: Check whether this group contains any rollout
            # that explicitly requests to be dropped
            # (e.g., due to tool timeout, transient execution error)
            should_drop = False
            for data in group:
                if data.meta_info.get("drop_flag", False):
                    should_drop = True
                    break

            # If no rollout indicates a drop condition, keep the group
            if not should_drop:
                return False

            # Step 2: Compute the current global filter ratio
            # This guards against pathological cases where
            # too many groups are dropped and training stalls
            current_global_filter_ratio = (
                self.global_filter_stats["filtered"] / self.global_filter_stats["total"]
                if self.global_filter_stats["total"] > 0 else 0.0
            )

            # If we already filtered too much globally, stop filtering
            if current_global_filter_ratio >= 0.5:
                return False

            # Also prevent the *next* filter from exceeding the limit
            if (self.global_filter_stats["filtered"] + 1) / self.global_filter_stats["total"] > 0.5:
                return False

            # Step 3: Drop this group and update global stats
            self.global_filter_stats["filtered"] += 1
            return True
  • 保守起步 :早期仅使用正样本轨迹训练,构建稳定策略流形;后期再引入负样本提升泛化能力。
  • Chunked MDP(交互片段优化) :不按单个Token优化,而是按完整的"工具调用动作单元"优化,解决长程信用分配难题。

3. 监控与避坑

  • Reward Hacking(奖励黑客) :模型会学会"坏习惯",如反复重试、修改环境配置。需要细粒度监控工具使用频率和命令模式。
  • 崩溃是常态 :训练中崩溃是常态,关键是要有可视化监控体系,快速定位是极端负样本主导还是数据分布问题,并进行回滚或重加权。

4. 经验和总结

训练出现不稳定时,我们通常优先检查以下几个信号:

  • 是否有少量极端轨迹正在主导更新?(典型特征:异常长的失败轨迹,伴随重尾分布的负回报)→ 采用masking,降低这些轨迹的权重,并收紧 clipping。
  • 负样本是否在整体上占据主导?→ 降低负样本权重,过滤低置信度失败样本,或采用课程式训练策略。
  • 模型是否在学习"坏模式"?→ 引入行为惩罚、更多维的奖励设计等。

两条经验性原则:

  • 优先针对极端轨迹进行定向处理(如果极端轨迹能被某些特征定位到,例如 mask 掉超长负样本),如果仍然不稳定,再采用全局重加权。
  • RL 梯度通常比监督学习噪声更大,因此更小的学习率,配合更强的约束、退火或自适应机制,往往更稳定。细粒度行为监控与惩罚

Agentic RL是一套高度耦合的系统,任何小环节(数据、环境、奖励)出问题都会被放大。前期需要大量繁琐的工程排查,但一旦基建(如异步训练管线、沙箱管理)搭好,后续训练会变得非常稳定。

未来方向包括:挖掘更真实的Human-in-the-loop闭环 、构建更开放的环境 、以及设计更细粒度的奖励模型。

Reference

English Version:https://www.notion.so/The-Bitter-Lesson-Behind-Building-Agentic-RL-in-Terminal-Environments-2eaddd45837f80c9ad2ed6a15ef3c1a1?pvs=21

🚀ROLL TEAM:https://wwxfromtju.github.io/roll_team.html

📄 技术报告:https://arxiv.org/pdf/2512.24873

🧠 模型:https://huggingface.co/FutureLivingLab/iFlow-ROME

🧩 框架:

RL训练框架: https://github.com/alibaba/ROLL

沙盒环境管理: https://github.com/alibaba/ROCK

Agent框架:https://github.com/iflow-ai/iflow-cli

📊 Benchmarks: https://github.com/alibaba/terminal-bench-pro
苦涩的教训!ROLL团队分享:Agentic RL 训练中的实践经验

相关推荐
goehou7 小时前
MCP 查数实战:让 LLM 安全地查数据库(只读账号、SQL 校验、参数漂移)
数据库·ai·llm·教程·mcp·function calling
桃西西呀11 小时前
LangGraph4j之一:客服请求分诊既要循环又要分流,我用 LangGraph4j 把控制流抽成了数据
人工智能·llm·ai编程
薛定谔的猫-菜鸟程序员13 小时前
上传试卷、打Boss,玩游戏:我用 TextIn xParse 做了一套“会解析试卷的刷题游戏“
人工智能·游戏·大模型·textin·ai数据层基础设施
用户7217465882613 小时前
默认校验只覆盖 3.18%:bl dataset validate 抽样窗与 capability 三种返回态的字段级拆解
llm·agent·ai编程
程序员大狐狸14 小时前
Ultra X7 358H 笔记本电脑,寻找本地用于编码的最强大模型,实测 21.0 tok/s,上下文 256K
llm·ai编程
用户83145509803114 小时前
如一 Agent 架构解读(四):异步整理——压缩不该堵住用户
人工智能·llm
feasibility.14 小时前
“美版DeepSeek”等海外开放模型,能夺回生态入口吗?——中国开放权重领先下的2026全球AI分水岭
人工智能·开源·大模型·llm·minimax·deepseek·beam
迷糊小面包16 小时前
DeepSeek Harness 接入GLM-5.
大模型
M--Y16 小时前
LangChain 提示工程:少样本提示与输出解析器
python·langchain·大模型·llm·输出解析器·少样本提示
爱笑的k1117 小时前
实践中layernormal的计算方式
大模型·ai infra