进阶 unsloth.ai 2026-10-07 22:27:00 · 6 阅读

第43章 强化学习(RL)环境构建指南

unsloth 下载 ☰ 下载 博客 什么是 RL 环境,以及如何构建它们 2026年3月13日 作者:Daniel、Michael,以及 NVIDIA 的 Shashank Verma、Sylendran Arunagiri、Chris Wing、Brian Yu 强化学习(RL)几十年来一直在塑造 AI 的发展,从早期控制系统、游戏智能体,到如今通过交互学习的大语言模型。RL 的核心思想是让模型学会响应并接收反馈,从而随时间不断改进。 然而,随着 AI 走向 agentic——具备多步推理、工具调用和决策能力——我们正进入“经验时代”:进步不再只依赖静态数据,而是由从自身经验中学习的系统驱动。RL 也必须从优化单条响应,演进到塑造整条轨迹上的行为。在这种背景下,学习发生在与“环境”的交互中——环境定义了允许的动作、状态变化以及成功的标准。 一套 RL 工作流将策略模型、训练算法和环境统一起来,再加上验证智能体响应的方法。这个交互循环让智能体能够规划、适应并从失败中恢复。 本文将探讨 RL 如何为 agentic AI 演进、环境为何是这一转变的核心,以及 Unsloth、NVIDIA NeMo RL、NVIDIA NeMo Gym 和 NVIDIA NeMo Data Designer 这些开放工具如何帮助开发者高效搭建 RL 工作流。 SFT 与 RL 的对比 在动手搭建环境之前,关键是搞清楚 RL 什么时候才是合适的工具。 监督微调(SFT)最适合你能通过示例或指令-响应对提供明确目标行为的场景,非常适合教模型格式和风格。但 SFT 有局限: 模仿而非适应。数据集较小时,模型学会的是照搬答案,而不是掌握得出答案的过程。 脆弱性。SFT 模型在偏离训练分布的场景中往往表现不佳,因此数据集需要大而多样。 随着复杂度提升,强化学习(RL)成为更好的选择。你不再告诉模型“必须这么说”,而是给它一个目标和一种验证方式。这让模型能探索不同的推理路径,对边缘情况更有韧性。这类方法很适合数学、代码、工具调用等有明确答案验证途径的任务。 实践中,SFT 和 RL 并不互斥,混合策略往往更常用: 用 SFT 做 RL 的热启动。用一组高质量示例教会模型聊天模板、工具调用格式和基本可读性,避免 RL 浪费时间学数据格式。 用 RL 做规模化提升。过渡到 RL 让模型探索并自我纠正。这种“后训练”精调才是推理能力和鲁棒性真正锻造的阶段。 例如,NVIDIA Nemotron 3 系列模型先用大规模 SFT 为模型打好基础,再进入 RL 精调。最终如何选择取决于你的算力预算、数据可得性以及智能体所需的泛化水平。业界整体趋势是把更多算力投到 RL 阶段,尤其是在 RL 环境日益成熟、更易上手之际。 从算法到环境,以及 RLVR 的崛起 传统上,PPO(Proximal Policy Optimization)等 RL 方法是主流标准。但它们资源消耗巨大——需要奖励模型、critic 模型等多个复杂且计算密集的模型——这推动了向更可扩展算法的转型。 现代工作流越来越多地采用 DPO、GRPO 等更高效的方法,分别负责模型改进的不同环节。 直接偏好优化(DPO)完全绕开 RL 循环,把对齐当作静态偏好数据上的分类问题。 奖励类型。成对比较。依赖标注好的偏好(“响应 A 优于响应 B”)。 效率。计算轻量且稳定,非常适合安全性、语气、风格等对齐任务。 但 DPO 缺乏显式的奖励优化和探索能力。它只从固定的偏好对中学习,无法发现新策略或优化长期结果。此外,DPO 建模的是输出的相对偏好而非轨迹奖励,因此在需要多步推理和工具调用的 agentic 工作流中效果较差。 为了解决这些问题,开发者开始转向利用可验证奖励的算法。 其中一种是 GRPO(Group Relative Policy Optimization),它是 PPO 的优化版本。它的做法是用一组输出的生成来取代笨重的 critic 模型,并用确定性验证器对它们打分。 奖励类型。通常是二值(0 或 1),但也支持连续值(-∞ 到 +∞)。当环境能通过程序判断“是”或“否”时(比如检查单元测试是否通过),效果最佳;同时它也支持超过 1 分的复杂奖励,提供更细粒度的反馈。 效率。去掉了 PPO 中的价值模型和奖励模型,大幅降低内存开销,是推理能力得以规模化的关键因素之一。 这种向“可验证正确性”的更大转变,并不局限于某个具体算法。虽然验证即使在监督设置(如拒绝采样)中也能带来提升,但它更是可验证奖励强化学习(RLVR)范式的核心。通过用显式检查取代主观打分——比如智能体是否答对了题、是否调用了正确的工具——RLVR 把重心从优化器转移到了环境。GRPO 这类算法只是提供了一种针对环境信号进行高效优化的机制。 在 RLVR 中,环境就是学习与行为之间的契约。 下面我们来更具体地定义什么是环境。 什么是环境? 环境是一切不受智能体完全控制的东西。环境由智能体要完成的任务、可采取的动作,以及它观察和作用于的世界状态共同定义。环境还决定了如何评估智能体的表现——什么算成功、奖励如何分配。 在继续之前,先正式介绍几个关键术语。 Rollout( rollout)。在环境中执行策略以生成经验的过程,强调的是通过一步步与环境交互、采取动作并记录结果来收集数据的行为。 Trajectory(轨迹)。一次 rollout 产生的状态、动作和奖励的序列,强调数据本身,即按顺序记录下发生的事情。实践中,大多数代码库和论文把这两个词当作同义词使用——因为一次 rollout 恰好产生一条轨迹,而且人们说“轨迹”时,通常默认它来自 rollout 出的策略。 构建与扩展环境的挑战 环境与训练的解耦。许多 RL 工作流把环境逻辑和训练流水线紧耦合,导致难以集成复杂的智能体循环、迭代环境设计以及进行受控消融实验。 一致地表示 agentic 轨迹。社区目前广泛使用 Chat Completions,但它本是为无状态的单轮交互设计的。而 agentic rollout 中包含跨多轮交错出现的推理、工具调用和文本。如果没有原生支持这种表示的 schema,你就得为每个环境手写解析和序列化逻辑。 资源管理。环境往往依赖外部资源,如沙箱执行、数据库、API 等。每次 rollout 都需要隔离的实例,且这些实例必须可靠地初始化和清理。 可扩展性。训练可能需要数千个并行 rollout,环境实例必须随之扩展,涉及分发、负载均衡和容错。 NVIDIA NeMo Gym NeMo Gym 是一个用于构建和扩展 RL 环境的开源库,在 Nemotron 3 模型家族的开发中经过了实战检验。 NeMo Gym 的设计正是为了应对上述挑战:将 rollout 收集与训练清晰解耦、用 OpenAI Responses API 标准化轨迹,并提供可扩展到数千个并行环境的资源生命周期管理基础设施。 在 NeMo Gym 中,任务定义智能体要完成什么。资源提供智能体交互的外部状态——例如工具、数据库、沙箱执行——以及用于打分的验证逻辑。Model Interface 负责生成,在每一轮产生模型的动作,如文本、工具调用或代码。Agent 负责编排每次 rollout:调用模型生成动作、通过资源服务器更新环境状态、收集最终奖励。 图 1:NeMo Gym 的架构。它与 RL 训练框架协同工作,体现了环境 rollout 编排与模型训练及生成的解耦。 NVIDIA NeMo Gym 可与 NeMo RL、Unsloth、Hugging Face TRL 等实现了训练算法(如 GRPO)的 RL 训练库集成,用于更新模型。NeMo Gym 从环境中收集 rollout 轨迹和奖励,交给训练框架,由后者管理策略更新并提供更新后的模型供下一轮 rollout 使用。 RLVR 用户旅程:从基准测试到训练 在写第一行代码之前,先要理解 RLVR 从业者的两阶段旅程。 图 2:在 RLVR 工作流中,环境准备先于模型训练,并塑造着模型训练。 阶段一:环境准备 基准测试:评估基础模型,找出具体的能力缺口(比如多步数学做不对,或者编造工具参数)。 定义能力:把这些失败映射为目标能力。 环境开发:改造现有环境或新建一个。 任务生成:整理数据,构建覆盖环境各种情况的多样化任务集,通常涉及合成数据生成(SDG)。 奖励画像:用多个模型(包括大型前沿模型)跑 rollout 做“合理性检查”,确保环境输出所对应的目标能力与实际能力相符。 阶段二:模型训练 优化:用 GRPO 这类算法训练模型,利用环境提供的可验证信号更新权重。 验证:确认模型在该环境上的表现提升了,更重要的是,确认这种提升能泛化到更广泛的下游基准上。 关键在于:环境准备定义了什么叫“更好”,训练阶段只是针对你构建的信号进行优化。 为便于本文展开,我们假设你已经清楚想让模型在哪项能力或基准上提升。下面将重点介绍上文阶段一中的第 3 步,也就是如何构建环境。 为模型训练构建 RL 环境 NeMo Gym 是 NVIDIA NeMo 框架内的开源库,负责定义和编排 RL 环境、生成可扩展且可验证的 rollout 数据,而 Unsloth 则消费这些 rollout 进行高效的 RL 训练。 在 NeMo Gym 生态中,构建环境依赖三大基础支柱,最终通过集成的 RL 框架执行模型训练。 1. 任务准备 智能体需要接触多样化的场景,才能在特定任务上专精和提升。以 Workplace Assistant 环境为例,任务数据是自然语言的业务请求,要求智能体在多步操作中自主操控模拟的数据库和工具。一个简单的单步示例——用户查询和期望响应如下: 用户查询: “给 [email protected] 发一封邮件,主题是 'Team Meeting',正文是 'Let's meet tomorrow at 2pm to discuss the project.'” 期望的工具调用: email_send_email( recipient="[email protected]", subject="Team Meeting", body="Let's meet tomorrow at 2pm to discuss the project." ) 当任务数据不足时,开发者可以借助 NeMo Data Designer 等工具进行合成数据生成(SDG),以编程方式批量创建任务查询及对应的参考答案。要有效训练,你需要数千条多样化的 prompt 来充分调用环境中的工具。比如构建编程环境时,可以用 LLM 生成 5000 道不重复的 Python 题目,同时用确定性脚本生成用于验证答案的单元测试(即参考答案)。 理解任务,是设计环境的第一步。 2. 环境设计 回到图 1 的左半部分,环境设计由三个主要组件构成: Agent Server:环境设计的核心是智能体本身。Agent 编排所有交互逻辑,如调用模型和使用工具。它是把一切串联起来的脚手架,管理着对话循环(发给模型、执行工具调用、循环往复)。 Resources Server:这个组件承载工具、维护会话状态并计算奖励。 Model Interface:提供与生成后端通信的标准化接口。 2.1 Agent Server 下面是一段 Agent Server 的示例伪代码。它把对话发给模型、取回响应;如果模型发起了工具调用,就把调用路由到资源服务器,并把结果回传给模型。如此往复,直到模型返回纯文本(不再调用工具)、触及 token 上限或超过 max_steps 为止。 # Agent Server 伪代码(基于 SimpleAgent) async def run(task_data): # 1. 初始化 episode resource_server.seed_session(task_data) # 2. 运行智能体循环 response = self.responses(task_data.prompt, task_data.tools) # 3. 对结果打分 reward = resource_server.verify(response, task_data.ground_truth) return response, reward async def responses(prompt, tools): conversation = prompt step = 0 while step < max_steps: model_output = model_server.responses(conversation, tools) conversation.append(model_output) if model_output is text: break # 模型完成,不再调用工具 for tool_call in model_output.function_calls: result = resource_server.post( f"/{tool_call.name}", tool_call.arguments, ) conversation.append(result) step += 1 return conversation 值得一提的是,你可以直接使用 NeMo Gym 内置的智能体,也可以自带或全新编写一个。因此,这个循环在不同设置下可能差异很大。例如 MiniSWEAgent 会把运行逻辑委托给在 Docker 容器中运行的外部 harness,再把输出转换回 NeMo Gym 的格式。 现有智能体可能还自带预定义工具,可以直接利用。之后你就可以借助资源服务器,为智能体补充所需的额外外部工具。 2.2 资源服务器(Resources Server) Resources Server 是智能体与之交互的“世界”。在 NeMo Gym 中,它实现为一个轻量的 FastAPI 应用,把工具暴露为 HTTP 端点(如 POST /search_database),模型可通过标准 OpenAI 兼容的工具 schema 调用,同时也包含奖励计算逻辑。 关键在于,这些服务器还负责会话管理。由于一次 agentic rollout 涉及多个步骤,环境必须“记住”之前发生了什么。NeMo Gym 用 session_id 为每个并行 rollout 维护隔离的状态。 # Resources Server 概念结构 class MyResourceServer(SimpleResourcesServer): async def seed_session(self, session_id, initial_data): # 为这次特定 rollout 初始化“沙箱” self.state[session_id] = initialize_environment(initial_data) async def my_custom_tool(self, session_id, tool_args): # 模型在 rollout 过程中调用它 result = execute_action(self.state[session_id], tool_args) return result 2.3 验证逻辑 验证器是环境设计中最关键的部分之一。它通常是一个确定性函数,评估 rollout 的最终状态并返回奖励信号。 两种常见的设计方式是: 轨迹匹配:把智能体具体的工具调用和参数与“黄金路径”对比。实现简单,但如果一个问题有多种正确解法,这种方式会变得脆弱。 状态匹配:只检查最终结果(比如数据库的最终状态是否与参考答案一致),不管智能体是怎么达成的。这更稳健,也是 Workplace Assistant 这类复杂环境所采用的方式。 其他主流的验证逻辑设计还包括沙箱执行(把生成的代码或产物放到单元测试中运行)、LLM 作为裁判(用于语义或开放式评估),以及训练奖励模型(用于捕捉人类偏好)等。 # 验证逻辑概念示例 async def verify(self, session_id, agent_response, ground_truth): # 1. 提取智能体实际做了什么 actual_outcome = self.state[session_id].get_final_state() # 2. 与“黄金”结果对比 if actual_outcome == ground_truth: return reward(1.0) # 成功! return reward(0.0) # 失败 设计验证逻辑的一些最佳实践: 优先使用二值奖励:虽然给中间步骤打部分分看起来很直觉,但严格的二值信号(成功/失败)通常能为 GRPO 这类算法提供最稳定、最有效的优化目标。 为奖励信号做画像:在投入大规模训练前,先用多个不同能力的模型(比如小型基础模型对比大型前沿模型)评估你的环境。如果前沿模型不能稳定地比基础模型得更高分,那你的验证器逻辑或任务定义很可能需要重新校准。 3. 模型训练 环境就绪后,智能体训练通过策略模型与环境的反复交互来生成 rollout。NeMo Gym 负责编排这一过程:大规模运行环境、管理会话状态,并产生带有验证逻辑所给奖励标注的结构化 rollout 轨迹。 这些 rollout 随后被 Unsloth、NeMo RL 或 HuggingFace TRL 之类的 RL 训练框架消费,通过优化算法(如 GRPO 或 PPO 类方法)更新模型权重。欢迎查看 NeMo RL + NeMo Gym 的 GRPO 训练教程,以及用 Unsloth 和 NeMo Gym 的数独环境进行 RL 训练的教程。 训练框架与环境实现保持解耦,团队可以在不改动环境逻辑的情况下更换优化器、扩展策略或硬件后端。 训练遵循一个迭代循环:生成 rollout、验证结果、更新策略、重新评估表现。rollout 生成与优化的这种分离,让 RL 工作流能够跨领域、跨基础设施地实现可扩展和灵活的组合。 深入阅读:如需包含有状态和多步环境代码示例的分步技术讲解,请参考配套的环境构建开发者指南。 环境驱动的 RL 与开放生态 环境驱动的 RL 工作流正日益影响着学术界和工业界 agentic 系统的训练方式。通过将环境定义、rollout 生成和优化相互分离,团队可以更快迭代、更轻松地扩展强化学习,而不必将奖励逻辑与单一训练框架绑死。 这种模式已经在真实系统中得到应用。例如,NVIDIA Nemotron 3 模型家族主要就是通过跨交互环境的结构化 RL 来精调的,其验证逻辑优先考虑正确的轨迹和工具使用,而非单步响应。该工作中使用的环境抽象现已作为开源库发布,并可与多个 RL 训练框架集成。 RL 环境也在应用领域不断涌现。例如,Edison Scientific 将 NeMo Gym 与他们的 Aviary gym 集成,训练能够探索假设、运行模拟并从特定领域环境获得确定性反馈的科研智能体。另可参阅 NVIDIA 关于如何用强化学习训练科研智能体的文章。 如今,用 NeMo Gym 构建的交互式环境生成的可验证 rollout 数据,可以被 Unsloth、HuggingFace TRL、NeMo RL 及其他 PyTorch 原生技术栈使用。这种互操作性让从业者可以独立于环境设计来选择优化器、内存策略和硬件后端,支撑从研究到生产全流程的可扩展 agentic AI。 结语与资源 在 agentic AI 时代,环境定义了智能的契约。 以下是你今天就可以上手的方式: Unsloth + NeMo Gym:用 Unsloth 和 NeMo Gym 进行数独及多环境训练的 RL notebook。 NeMo Gym 的环境教程和训练教程,帮你构建自定义 RL 环境,并配合你偏好的 RL 训练框架使用。 NeMo Gym GitHub:构建和编排可验证 RL 环境的核心库。 💕 谢谢你们!特别感谢 NVIDIA 与我们共同撰写这篇教程博客,也感谢大家阅读和使用 Unsloth,我们非常感激。🙏

老规矩,欢迎加入我们的 Reddit 社区和 Discord 服务器,寻求帮助或表达支持!你也可以在 Twitter 上关注我们,或在 Substack 上订阅我们的通讯。 感谢阅读! Daniel & Michael Han 🦥
2026年3月12日 立即学习强化学习(RL)!免费入门 加入我们的 Discord

评论 (0)