【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 训练中的实践经验

相关推荐
小哈里2 小时前
【科研】ACM MM 论文 Latex 投稿模板修改(基于sample-sigconf-authordraft-v2.16)
人工智能·llm·科研·latex·cv·overleaf
组合缺一4 小时前
Java 版 Claude Code CLI 来了!(国产开源项目)Solon Code CLI 发布
java·ai·开源·llm·solon·cli·claudecode
XLYcmy5 小时前
智能体大赛 总结与展望 比赛总结
大数据·ai·llm·prompt·agent·qwen·万方数据库
马克Markorg8 小时前
基于LLM的大模型的RAG(检索增强生成)实现对比
python·大模型·agent·rag·企业级知识库的框架·rag 知识库
梦想画家9 小时前
Langflow流程控制组件实操指南:If-Else、Loop、Notify and Listen、Run Flow全解析
llm·智能体开发·langflow
飞哥数智坊9 小时前
春节没顾上追新模型?17款新品一文速览
人工智能·llm
IvanCodes11 小时前
谷歌重磅发布 Gemini 3.1 Pro:更强推理,更强生产力
人工智能·llm
CoderJia程序员甲11 小时前
GitHub 热榜项目 - 日榜(2026-02-18)
人工智能·ai·大模型·github·ai教程
Lw老王要学习11 小时前
Windows 下 Miniconda 安装与 conda 命令无法识别问题解决指南
windows·llm·conda·agent