rLLM:用于LLM Agent RL后訓練的創新框架

rLLM:用于LLM Agent RL后訓練的創新框架

本文介紹了rLLM,一個用于語言智能體后訓練的可擴展框架。它能讓用戶輕松構建自定義智能體與環境,通過強化學習進行訓練并部署。文中還展示了用其訓練的DeepSWE等智能體的出色表現,以及rLLM未來的發展方向,值得關注。

📄 標題: [rLLM: A Framework for Post-Training Language Agents]
🌐 來源: [Notion Blog] + https://pretty-radio-b75.notion.site/rLLM-A-Framework-for-Post-Training-Language-Agents-21b81902c146819db63cd98a54ba5f31

PS: 整理了LLM、量化投資、機器學習方向的學習資料,關注同名公眾號 「 亞里隨筆」 即刻免費解鎖

背景

rLLM團隊發布了rLLM-v0.1,這是一個用于語言智能體后訓練的可擴展框架,支持用戶構建自定義智能體和環境,通過強化學習進行訓練并部署到實際工作負載中。此前,Agentica團隊開源了兩個模型:DeepScaleR和DeepCoder,推動了推理模型的強化學習訓練民主化。但推理模型只是起點,真正的語言智能體需要在復雜、不確定的環境中進行推理、行動和交互。2025年下半年,團隊進入語言智能體時代,發布了rLLM框架和基于其訓練的DeepSWE模型,后者在SWEBench-Verified上取得了42.2%的Pass@1(測試時縮放為59.0%)的SOTA成績。

rLLM框架

設計目標與理念

rLLM旨在支持智能體從經驗中學習,即通過與動態環境的持續交互進行學習。現有大多數智能體框架僅關注編排和推理,對部署后學習支持不足。rLLM提供了靈活的框架來構建自定義智能體工作流,支持在實際環境中部署智能體以生成交互數據,并內置了基于強化學習的后訓練支持。它采用分層模塊化設計,既方便智能體構建者快速開發,又便于算法開發者進行定制研究。同時,rLLM作為一個前端層,可與不同的分布式強化學習訓練引擎集成,目前使用verl作為訓練后端。

快速上手示例

文檔提供了一個約30行代碼的示例,展示了如何訓練一個使用Python解釋器解決數學問題的工具智能體。通過使用rLLM的相關模塊和函數,用戶可以輕松完成訓練任務。

import hydrafrom rllm.agents import ToolAgent
from rllm.data.dataset import DatasetRegistry
from rllm.environments.tools.tool_env import ToolEnvironment
from rllm.rewards.reward_fn import math_reward_fn
from rllm.trainer.agent_trainer import AgentTrainer@hydra.main(config_path="pkg://rllm.trainer.config", config_name="ppo_trainer", version_base=None)
def main(config):train_dataset = DatasetRegistry.load_dataset("deepscaler_math", "train")test_dataset = DatasetRegistry.load_dataset("aime2024", "test")agent_args = {"tools": ["python"], "parser_name": "qwen", "system_prompt": "You are a math assistant that can write python to solve math problems."}env_args = {"tools": ["python"],"reward_fn": math_reward_fn,}trainer = AgentTrainer(agent_class=ToolAgent,env_class=ToolEnvironment,agent_args=agent_args,env_args=env_args,config=config,train_dataset=train_dataset,val_dataset=test_dataset,)trainer.train()if __name__ == "__main__":main()

架構與主要組件

  • 智能體和環境抽象:rLLM提供了簡單的模塊化接口,用戶可以繼承BaseAgentBaseEnv類來構建自定義智能體和環境。文檔中給出了一個數學智能體和基礎環境類的示例代碼。
class MathAgent(BaseAgent):def __init__(self, accumulate_thinking=True):self.instruction = "Let's think step by step, and put your final answer within \\boxed{}."self._trajectory = Trajectory()self.messages = []self.accumulate_thinking = accumulate_thinkingdef update_from_env(self, observation, reward, done, info, **kwargs):if not self.trajectory.steps:question = observation["question"]formatted_observation = f"{question} {self.instruction}"else:formatted_observation = "Your previous answer may contain a mistake. Please review it."self.messages.append({"role": "user", "content": formatted_observation})def update_from_model(self, response, **kwargs):self.messages.append({"role": "assistant", "content": response})new_step = Step(chat_completions=copy.deepcopy(self.chat_completions))self.trajectory.steps.append(new_step)return Action(action=response)def reset(self):self._trajectory = Trajectory()self.messages = []@propertydef chat_completions(self):messages = copy.deepcopy(self.messages)if not self.accumulate_thinking:for msg in messages[:-1]:if msg["role"] == "assistant":_, sep, after = msg["content"].partition("</think>")if sep:msg["content"] = afterreturn messages@propertydef trajectory(self):return self._trajectorydef get_current_state(self):assert self._trajectory.stepsreturn self._trajectory.steps[-1]class BaseEnv(ABC):@abstractmethoddef reset(self) -> tuple[dict, dict]:pass@abstractmethoddef step(self, action: Any) -> tuple[Any, float, bool, dict]:passdef close(self):return@staticmethod@abstractmethoddef from_dict(info: dict) -> "BaseEnv":raise NotImplementedError("Subclasses must implement 'from_dict'")
  • AgentExecutionEngine:這是一個高性能的采樣器,負責協調智能體和環境之間的交互,支持全異步、并行的軌跡滾動。在強化學習訓練過程中,它與訓練器無縫集成,支持多種強化學習算法。文檔展示了如何使用它進行軌跡收集的示例。
engine = AgentExecutionEngine(agent_class=ToolAgent,agent_args={"tools": ["python"], "parser_name": "qwen"},env_class=ToolEnvironment,env_args={"tools": ["python"], "reward_fn": math_reward_fn},engine_name="openai",rollout_engine_args={"base_url": "http://localhost:30000/v1"},tokenizer=AutoTokenizer.from_pretrained("Qwen/Qwen3-4B"),sampling_params={"temperature": 0.6, "top_p": 0.95, "model": "Qwen/Qwen3-4B"},max_response_length=16384,max_prompt_length=2048,n_parallel_agents=64,
)test_dataset = DatasetRegistry.load_dataset("aime2024", "test")
tasks = test_dataset.repeat(n=8)  # For pass@k evaluationresults = asyncio.run(engine.execute_tasks(tasks))
compute_pass_at_k(results)
  • AgentTrainer:提供了一個簡單的高級接口,用戶可以指定訓練工作負載和配置,調用train()方法即可使用強化學習訓練智能體。它使用AgentExecutionEngine作為軌跡采樣器,verl作為模型訓練器,并使用Ray來協調采樣器和訓練器之間的控制流。文檔中給出了使用AgentTrainer進行強化學習訓練的示例。
@hydra.main(config_path="pkg://rllm.trainer.config", config_name="ppo_trainer", version_base=None)
def main(config):train_dataset = DatasetRegistry.load_dataset("hotpotqa_combined", "train")val_dataset = DatasetRegistry.load_dataset("hotpotqa_combined", "test")tool_map = {"local_search": LocalRetrievalTool}env_args = {"max_steps": 20,"tool_map": tool_map,"reward_fn": search_reward_fn,}agent_args = {"system_prompt": SEARCH_SYSTEM_PROMPT, "tool_map": tool_map, "parser_name": "qwen"}trainer = AgentTrainer(agent_class=ToolAgent,env_class=ToolEnvironment,config=config,train_dataset=train_dataset,val_dataset=val_dataset,agent_args=agent_args,env_args=env_args,)trainer.train()

強化學習算法

根據智能體隨時間累積上下文的方式,rLLM將智能體分為累積智能體和非累積智能體,并為它們分別提供了不同的強化學習算法。

  • 累積智能體:使用GRPO with Observation Masking算法,在訓練時屏蔽非模型生成的標記,僅對模型生成的標記計算損失。該方法已用于訓練DeepSWE等模型。

  • 非累積智能體:支持兩種方法,即Stepwise GRPO with Advantage Broadcasting和Stepwise GRPO with Per-Step Grouping。前者將最終步驟的優勢廣播到所有先前步驟,適用于早期行動對最終結果有重要貢獻但缺乏細粒度獎勵的情況;后者為每個步驟分配獨立的獎勵,并按步驟位置分組計算優勢,適用于軌跡對稱的情況。

內置語言智能體

rLLM包含一系列內置的智能體和環境,涵蓋多個領域,如通用工具使用智能體、DeepSWE(SOTA編碼/軟件工程智能體)、DeepScaleR和DeepCoder(數學/編碼推理模型)、FrozenLake智能體和WebAgent等。用戶還可以使用rLLM的模塊化API和訓練引擎構建和訓練自己的自定義智能體和環境,并歡迎貢獻回rLLM社區。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914760.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914760.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914760.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

rocky8 --Elasticsearch+Logstash+Filebeat+Kibana部署【7.1.1版本】

軟件說明&#xff1a; 所有軟件包下載地址&#xff1a;Past Releases of Elastic Stack Software | Elastic 打開頁面后選擇對應的組件及版本即可&#xff01; 所有軟件包名稱如下&#xff1a; 架構拓撲&#xff1a; 集群模式&#xff1a; 單機模式 架構規劃&#xff1a…

【JVM】內存分配與回收原則

在 Java 開發中&#xff0c;自動內存管理是 JVM 的核心能力之一&#xff0c;而內存分配與回收的策略直接影響程序的性能和穩定性。本文將詳細解析 JVM 的內存分配機制、對象回收規則以及背后的設計思想&#xff0c;幫助開發者更好地理解 JVM 的 "自動化" 內存管理邏輯…

Qt獲取hid設備信息

Qt 中通過 HID&#xff08;Human Interface Device&#xff09;接口獲取指定的 USB 設備&#xff0c;并讀取其數據。資源文件中包含了 hidapi.h、hidapi.dll 和 hidapi.lib。通過這些文件&#xff0c;您可以在 Qt 項目中實現對 USB 設備的 HID 接口調用。#include <QObject&…

Anaconda Jupyter 使用注意事項

Anaconda Jupyter 使用注意事項 1.將cell轉換為markdown。 First, select the cell you want to convertPress Esc to enter command mode (the cell border should turn blue)Press M to convert the cell to Markdown在編輯模式下按下ESC鍵&#xff0c;使單元塊&#xff08;c…

[硬件電路-20]:模擬信號處理運算與數字信號處理運算的相同點與不同點

模擬信號處理運算與數字信號處理運算是信號處理領域的兩大核心方法&#xff0c;二者在信號形式、處理機制、性能特點和應用場景上存在顯著差異&#xff0c;但也共享一些基礎目標與理論支撐。以下從多個維度進行系統對比分析&#xff1a;一、相同點1. 核心目標一致信號變換與分析…

Redis 高頻面試題

1. 緩存穿透 1.1 描述 用戶想要查詢某個數據,在 Redis 中查詢不到,即沒有緩存命中,這時就會直接訪問數據庫進行查詢。當請求量超出數據庫最大承載量時,就會導致數據庫崩潰。這種情況一般發生在非正常 URL 訪問,目的不是為了獲取數據,而是進行惡意攻擊。 1.2 現象 1、應…

OWASP Top 10 攻擊場景實戰

OWASP (開放式Web應用程序安全項目) Top 10 榜單是全球公認的、針對Web應用最關鍵安全風險的權威指南。它不是一份詳盡無遺的清單&#xff0c;而是一份凝聚了安全專家共識的“高危預警”。本文將不止于羅列這些風險&#xff0c;而是深入每個風險的核心&#xff0c;通過生動的比…

Three.js 實戰:使用 PBR 貼圖打造真實地面材質

在 Three.js 中&#xff0c;我們可以通過 MeshStandardMaterial 材質配合多張貼圖來實現真實的地面效果。這種方式模擬了物理世界中光照與表面材質的復雜交互&#xff0c;常用于構建高質量場景&#xff0c;如數字孿生、建筑可視化、游戲等。 本文將以一個完整示例為基礎&#x…

Java基礎的總結問題(第一篇)

JDK和JRE的區別&#xff1f;JRE是Java運行環境&#xff08;Java Runtime Environment&#xff09;&#xff0c;包含了JVM和Java核心類庫JDK是Java開發工具包&#xff08;Java Developers Kit&#xff09;,包含了JRE和Java常見的開發工具與equals的區別&#xff1f;可以用來比較…

[智能算法]MOEA/D算法的Python實現

一、初始化不同于NSGA-II&#xff0c;MOEA/D在進行迭代之前需要先進行初始化&#xff0c;初始化的主要內容是計算個體向量權重之間的歐氏距離&#xff0c;并得出其鄰域集合。# 計算T個鄰居 def cpt_W_Bi_T(moead):# 設置的鄰居個數錯誤(自己不能是自己的鄰居)if moead.T_size &…

Java設計模式之-組合模式

什么是組合模式&#xff1f; 組合模式允許你將對象組合成樹形結構來表示"部分-整體"的層次結構。它讓客戶端能夠以統一的方式處理單個對象和對象組合。 簡單來說&#xff0c;就像公司的組織結構&#xff1a; 公司有部門部門有小組小組有員工但無論是對公司、部門還是…

2021-10-29 C++與反轉數的和

緣由輸入一個三位數 與它倒過來的數相加&#xff0c;輸出和-編程語言-CSDN問答 直接寫 int n0,nn0,nnn0; cin>>n;nnn; while(nn)nnn*10,nnnnn%10,nn/10; cout<<nnnn<<endl; 緣由https://ask.csdn.net/questions/7552128 int 反轉數(int n) { int nn 0…

論安全架構設計(威脅與措施)

安全架構威脅與措施摘要2021年4月&#xff0c;我有幸參與了某保險公司的“優車險”項目的建設開發工作&#xff0c;該系統以車險報價、車險投保和報案理賠為核心功能&#xff0c;同時實現了年檢代辦、道路救援、一鍵挪車等增值服務功能。在本項目中&#xff0c;我被安排擔任架構…

022_提示緩存與性能優化

提示緩存與性能優化 目錄 緩存技術概述緩存工作原理實現方法詳解成本優化策略性能優化實踐高級應用場景最佳實踐指南 緩存技術概述 什么是提示緩存 提示緩存是Claude API的一項優化功能&#xff0c;允許緩存提示的特定部分以便重復使用&#xff0c;從而顯著減少處理時間和…

【AI交叉】地理:人工智能如何推動地理科學的智能轉型?

隨著人工智能&#xff08;AI&#xff09;技術的快速發展&#xff0c;越來越多的傳統學科開始與之融合&#xff0c;催生出一系列跨學科的新研究方向和應用場景。地理科學作為研究地球表層自然與人文現象的綜合性學科&#xff0c;也在這一浪潮中迎來轉型契機。 AI與地理學的交叉正…

iOS高級開發工程師面試——關于網絡

iOS高級開發工程師面試——關于網絡 一、談談對 HTTP、HTTPS 的理解1. HTTP協議:2. HTTPS 協議二、TCP、UDP 和 SocketTCPUDPTCP 和 UDP 的區別?Socket一、談談對 HTTP、HTTPS 的理解 1. HTTP協議: 超文本傳輸協議,他是基于TCP應用層協議。 是無連接 無狀態 的,需要通過…

跟著Nature正刊學作圖:回歸曲線+散點圖

&#x1f4cb;文章目錄復現目標圖片繪圖前期準備繪制左側回歸線圖繪制右側散點圖組合拼圖 (關鍵步驟&#xff01;)跟著「Nature」正刊學作圖&#xff0c;今天挑戰復現Nature文章中的一張組合圖–左邊為 回歸曲線、右邊為 散點圖。這種組合圖在展示相關性和分組效應時非常清晰有…

LVS集群調度器

目錄 集群和分布式 LVS運行原理 LVS概念 LVS的集群類型 實驗配置 安裝LVS ipvsadm命令參數 1.管理集群服務中的增刪改 2.管理集群服務中的RS增刪改 3.lvs調度策略的備份與恢復 4.lvs調度策略的開機啟動 LVS-NAT模式 LVS-DR模式 集群和分布式 集群&#xff08;Clu…

【React Natve】NetworkError 和 TouchableOpacity 組件

NetworkError公共組件 import SimpleLineIcons from "expo/vector-icons/SimpleLineIcons"; import { StyleSheet, Text, View } from "react-native";export default function NetworkError() {return (<View style{styles.container}><SimpleL…

Linux 驅動中 Timer / Tasklet / Workqueue 的作用與對比

Linux 驅動中 Timer / Tasklet / Workqueue 的作用與對比 &#x1f9e9; 1. 使用場景概覽&#xff08;對比表&#xff09;機制執行上下文是否可睡眠使用場景常用接口Timer中斷上下文? 不可睡眠延遲執行&#xff08;如防抖、超時處理&#xff09;add_timer() 等Tasklet軟中斷上…