3. OpenManus-RL中使用AgentGym建立强化学习环境

news2025/5/24 15:39:07

AgentGym概述

AgentGym是为评估和开发大模型agent而设计的支持多环境和多任务的框架。该框架统一采用ReAct格式,提供多样化的交互环境和任务,支持实时反馈和并发操作。


What is Ai Agent(基于大模型的智能体)?

首先是人造实体,且具备以下3种能力
能力1 环境感知; 能力2 决策或推理
能力3 行动,如调用工具或,语言输出,其他模态输出


训练基于LLM的agent两种方式

1 行为克隆方法
让专家(人或专家模型)来标注数据,agent去模仿这些标注好的数据

  • 优势:稳定,可以混合各类数据来训练解决通用问题的agent
  • 缺点:1 标注数据昂贵很难scaling 2 agent不会跟环境交互,缺乏探索学习过程(这类过程对于agent自我提升或训练时非常重要的)
    2 交互式训练范式
    agent跟环境充分交互,根据环境反馈来优化自身。如 犯错->跌打->爬起来->积累经验 再犯错再累积经验
  • 优点:减少了对专家数据的依赖,并且能充分探索环境
  • 缺点:目前这类的交互式训练主要针对的是单环境特定领域的agent

交互式训练研究现状

开发能够在人类水平上跨不同环境执行各种任务的agent一直是AI社区的长期目标。大型语言模型由于其泛化能力被认为是构造基于llm通用agent的一个很有前途的基础。但现在构建基于大语言模型通用agent智能体仍存在挑战,基于大模型的Agent在做强化学习时需要构建环境env以及定义任务task,但之前交互式训练范式工作主要是在单一的环境里面,而我们目前需要构建能处理多环境多任务的较为通用agent。


AgentGym工作目标

构建能在多样化的环境中进行自我进化并且具有某种通用多任务能力的agent


实现目标的三大挑战

1 交互式训练平台 (框架)

  • 需包含多样化的环境 任务,能让agent去交互去进行全面地优化(最重要)
  • 需支持并发,并行地与智能体agent交互
    2 适当大小的轨迹的数据集(数据)
    需要适当大小的轨迹的数据集。也就是初始数据集来训练一个具备初步智能体能力,或具备初步序列决策能力和前序知识的基础智能体。
    这有助于智能体在更大的环境中去进一步探索和优化。因为在多样化很复杂的环境中让智能体从零开始不断尝试和犯错来学习所有知识的效率非常低,通常需要一个warm up 。
    3 有效且灵活的进化方法 (算法)
    让智能体在多个环境中进化,涉及到agent如何与环境互动,如何利用环境反馈信息实现自我进化。

探索AgentGym

AgentGym主要贡献

AgentGym主要贡献,提出了一个新的框架AGENTGYM。AGENTGYM包括一个多agent环境的交互平台,一个基准测试集AGENTTEVAL,以及两个轨迹集AGENTTRAJ和AGENTTRAJ-L,一种新的基于LLM的agent进化算法AGENTEVOL。


AgentGym交互式训练平台(解决第一个挑战)

AgentGym包括14个智能体环境,89个不同任务(如web任务,文本游戏任务,具身任务)。通过统一的接口,实现agent与环境间的多轮交互和实时反馈,同时也标准化来 任务规范,环境设置和agent的观察/动作空间。AgentGym框架概述图如下所示:
在这里插入图片描述
AgentGym的各个环境的任务数,指令集大小,测试集大小,轨迹集大小(traj,traj-L),每个环节平均轮次
在这里插入图片描述


AgentGym平台架构主要由下面四个模块组成:
LLM-based Agents <—> AgentEnvController <—> EnvClients <—> EnvServers

  • LLM-based Agents: 两个属性 大模型和分词器tokenizer。
  • AgentController: 是我们连接agent和环境的核心组件。它负责评估agent、数据收集和训练agent。
  • EnvClients:负责接收服务器提供的服务,并将其封装为用户调用的功能。
  • EnvServers: 部署在不同的服务器或端口上,并通过的HTTP(用Fastapi来实现)提供服务。这使环境(EnvServers)与其他部分脱钩。提供了创建、销毁、观察、获取可用动作、执行动作、重置环境等 API 接口
    AgentGym平台架构图如下所示:
    在这里插入图片描述

AgentGym提供交互式训练和评测平台。包含更多环境, 支持并发地,可持续的交互来帮助数据收集与智能体进化。下表是agentgym与其他agent框架的对比。
在这里插入图片描述


数据集构建(解决第二个挑战)

文中指出需要构建以下三类数据集
Expanded instructions
benchmark suite
high-quality interactive trajectories across environments
可扩展的指令数据集
基准测试套件
跨环境的高质量交互轨迹
指令数据集 :通过众包 和 基于AI(self-instruct [33] and instruction evolution,例如 prompting GPT-4 来生成instruction)的方式,从各种环境和任务中收集instructions(20509个)。指令包括任务描述,环境设置,给agent提问等指令。

基准测试套件:从收集的instructions中选个子集(1160个)当作测试集 benchmark suite 称为AgentEval,用来评估agent。

跨环境的高质量交互轨迹:使用众包(crowdsource)标注轨迹集和sota模型(GPT-4-Turbo)形成轨迹集,严格过滤根据奖励或正确性确保数据质量,最后形成6130条轨迹,称为为AgentTraj,用来训练 base agent(行为克隆)。为了公平比较,使用相同的pipeline对所有的指令标注和过滤,还收集了更大的轨迹集AgentTraj-L(论文讲座中讲的是所有轨迹)作为一个baseline, 代表行为克隆方法性能上限。

⚠️上述收集的数据在论文附件 C 中。


进化算法AgentEvol(解决第三个挑战)

AgentEvol重点是研究agent在面对以前看不见的任务和指令(训练集中没有的任务和指令)时是否能进化自己,这需要他们进行探索并从新的经验中学习。


POMDP和ReAct

Pomdp为部分可预测马尔可夫决策过程是强化学习领域处理不完全信息环境的核心数学模型。MDP假设环境状态完全可观测,而POMDP允许agent通过部分观测(如传感器数据、文本反馈)推断真实状态。具体agent通过贝叶斯更新维护对当前状态的概率分布​,使agent能在不确定环境中持续修正对环境的认知。
ReAct即模型回答前先输出推理的过程。二者在强化学习中结合起来表示如下图所示:
在这里插入图片描述

行为克隆训练base agent

通过行为克隆(behavioral cloning)方法用AgenTraj轨迹集 (Ds) 来训练一个基本的通用agent,使其具备基本的交互能力。在该agent基础上来使用进化算法。agent的 thought为h, action为a, baseagent用 πθbase表示。
行为克隆目标函数公式如下:
在这里插入图片描述

核心逻辑​:让智能体(参数为 θ)模仿专家策略,使得在给定环境 e 和指令 u 时,智能体生成轨迹 τ 的概率 πθ(τ∣e,u) 尽可能接近专家轨迹。也就是求目标函数最大化。
公式第二步-时间步分解​:将专家轨迹概率拆解为每个时间步 t 的思考和动作步骤的联合概率。 因为专家轨迹的概率是多个时间步联合概率的连乘,因为乘积会导致计算复杂、数值不稳定。取 log 将对数应用于乘积,转化为求和​。

标准RL公式

在这里插入图片描述

但是由于大采样空间和agent任务的长期特性,需引入概率推理改进标准RL。


Learning from estimated optimal policy

从预估的最优策略中学习,将 RL 视为特定概率模型中推理问题,用P(O = 1) 表示“通过最大期望奖励 获得最优策略”或“在rl任务中取得成功”的事件,这可以通过在每个采样点 对最优策略概率进行积分来计算。the policy agent 为πθ, 最优策略可以通过最大化下面公式结果来获得。
在这里插入图片描述

但是,基于llm的agent需要 token-wise 反馈来更新梯度,所以上述公式难以直接进行。故引入最优策略的估计函数q来构造 Eq5的变分下届,利用Jensen不等式得到如下公式:
在这里插入图片描述

最后结果的前一项表示agent在状态空间上最大化期望奖励来估计采样轨迹上的最优策略分布。后一项表示将agent当前参数θ更新为最优策略q,完成一次优化迭代。其中πθ是agent诱导的轨迹分布,q(τ)是变分分布。
下面是对该公式参数以及公式的解释:
q(τ)​:

  • 作用​:作为agent的 变分分布​​,用于近似难以直接优化的真实轨迹分布(如专家策略或高回报轨迹的分布)。
  • 设计目的​:
    • 替代原始策略 πθ(τ),简化期望计算;
    • 通过重要性采样(Importance Sampling)将复杂积分转换为可优化的期望形式。

Eq(τ)​:

  • 数学意义​:表示对所有可能轨迹 τ 的期望值计算,但轨迹的权重由变分分布 q(τ) 的概率密度决定。
  • 公式形式​:
    E q ( τ ) [ f ( τ ) ] = ∫ f ( τ ) ⋅ q ( τ ) d τ Eq(τ)[f(τ)]=∫f(τ)⋅q(τ)dτ Eq(τ)[f(τ)]=f(τ)q(τ)dτ 即对函数 f(τ) 在所有轨迹上按 q(τ) 的概率加权求和(或积分)。

在这里插入图片描述

AGENTEVOL algorithm (本篇论文中强化学习)

由于对数函数的单调性,通过最大化下界J(q,πθ),我们可以得到一个期望收益比以前更高的策略。
在这里插入图片描述

  1. 探索步(Exploration Step)​​:
    通过最大化期望奖励,更新对最优策略的估计 qm+1,使其更倾向于高奖励轨迹。
  2. 学习步(Learning Step)​​:
    通过最小化KL散度,更新策略参数 θ,使当前策略 πθ 逼近探索步得到的最优估计 qm+1。
    励等。

Openmanus-RL中如何添加新环境

OpenManus-RL 是一个用于训练大型语言模型(LLM)执行智能体任务的强化学习框架。结合了两个主要仓库:

  1. AgentGym:提供环境、奖励和智能体任务的评估工具
  2. Verl:处理强化学习训练、轨迹生成方法和奖励计算

AgentGym框架组件

该项目总体架构包括以下几个主要组件:

AgentGym/
├── agentenv/                      # 核心包,包含主要功能实现
│   ├── agentenv/                  # 框架主要模块
│   │   ├── controller/            # 控制器模块,用于连接智能体与环境
│   │   ├── envs/                  # 环境客户端实现,每个文件对应一种环境
│   │   └── trainer/               # 训练器,包含行为克隆和智能体演化的实现
│   ├── examples/                  # 使用示例
│   └── utils/                     # 工具函数
├── agentenv-webshop/              # WebShop环境服务器实现
├── agentenv-webarena/             # WebArena环境服务器实现
├── agentenv-tool/                 # 工具使用相关环境服务器实现
├── agentenv-textcraft/            # TextCraft环境服务器实现
├── agentenv-sciworld/             # SciWorld环境服务器实现
├── agentenv-sqlgym/               # SQL相关环境服务器实现
├── agentenv-lmrlgym/              # LMRL环境服务器实现
├── agentenv-alfworld/             # ALFWorld环境服务器实现
├── agentenv-babyai/               # BabyAI环境服务器实现
├── docs/                          # 文档
└── assets/                        # 资源文件,如图片等
控制器模块 (controller/)

控制器模块是整个AgentGym框架的核心组件,充当智能体与环境之间的桥梁,负责协调它们之间的交互,管理数据流动,并提供评估和训练的基础设施。该模块由以下几个关键文件组成:

  • agent.py: 定义了智能体的基本接口
  • env.py: 提供环境客户端的抽象接口
  • task.py: 实现任务的基本框架和会话处理
  • utils.py: 包含控制器BaseAgentEnvController、评估器Evaluator(BaseAgentEnvController)和训练器BaseTrainer(BaseAgentEnvController)的实现
  • init.py: 导出模块的主要组件
环境模块 (envs/)

每个环境都有一个对应的客户端类(如WebshopEnvClient)和任务类(如WebshopTask),分别继承自BaseEnvClient和BaseTask。环境包括:

  1. WebShop
  2. WebArena
  3. MAZE
  4. Wordle
  5. ALFWorld
  6. SciWorld
  7. BabyAI
  8. TextCraft
  9. Weather
  10. Movie
  11. Academia
  12. Sheet
  13. TODOList
  14. BIRD (SQL)
训练器模块 (trainer/)
  • AgentEvolTrainer: 智能体演化训练器
  • BCTrainer: 行为克隆训练器

数据流向


┌─────────────┐          ┌─────────────┐          ┌─────────────┐
│   输入指令   │───────►  │    智能体    │───────►  │  环境客户端  │
└─────────────┘          └─────────────┘          └─────────────┘
                              ▲  │                       │
                              │  │                       │
                              │  ▼                       ▼
┌─────────────┐          ┌─────────────┐          ┌─────────────┐
│    反馈     │◄─────────┤    控制器    │◄─────────┤  环境服务器  │
└─────────────┘          └─────────────┘          └─────────────┘
      ▲                         │
      │                         │
      │                         ▼
┌─────────────┐          ┌─────────────┐
│  评估结果   │◄─────────┤    评估器    │
└─────────────┘          └─────────────┘

Openmanus-RL中添加新环境

  1. 准备环境包:
  • 在 openmanus_rl/agentgym/agentenv-<env_name>/ 中创建专用目录
  • 在openmanus_rl/agentgym/agentenv-<env_name>/目录下创建 environment.yml 用于 conda 环境规范,如下所示:
name: agentenv-new_env # 新环境名 new_env
channels:
 - conda-forge
 - defaults
dependencies:
 - python=3.8.13
 - faiss-cpu=1.7.4
 - openjdk=11.0.21
  • 在openmanus_rl/agentgym/agentenv-<env_name>/目录下创建 setup.sh 用于任何额外的设置步骤,如下所示:
pip install -U "Werkzeug>=2,<3" "mkl>=2021,<2022"

cd ./new_env
bash ./setup.sh -d small
pip install -U "typing_extensions<4.6.0" "gym==0.23.1"
python -m spacy download en_core_web_lg
cd ..

pip install -U python-Levenshtein
pip install -r requirements.txt

pip install -e .

pip uninstall numpy -y
pip install numpy
  1. 更新训练脚本:
    在这里插入图片描述

  2. 更新 OpenManus 智能体(openmanus_rl/llm_agent/openmanus.py):
    在这里插入图片描述

  3. 准备训练数据:

  • 在 data/<env_name>/ 中创建用于训练/验证的 parquet 文件
  • 在数据中定义适当的奖励模型
    在这里插入图片描述
  1. 测试集成:
./train_ppo.sh --env_name new_env

AgentGym项目结构文档:https://github.com/OpenManus/OpenManus-RL/blob/main/openmanus_rl/agentgym/2nd_dev_docs/

相关探讨

后续工作

训练的整个流程为:将我们的环境封装起来,提供agent连接到rollout系统 收集轨迹,并根据优秀轨迹训练,更新模型。

在这里插入图片描述

问题探讨

OpenManus-RL官方roadmap中指出Agent Environment Setup 来自于 Openmanus。
在这里插入图片描述
但我在OpenManus-RL官方飞书群咨询,如何把自己的OpenManus作为环境整合到OpenManus-RL中,有官方的人回答还在更新中。但通过上述学习和分享,若把自己的openmanus成功整合到OpenManus-RL中,我们就可以提供一个例子供他人参考,我们组也许能成为OpenManus-RL代码贡献者之一。

参考文档

论文摘要:https://agentgym.github.io
论文:https://arxiv.org/abs/2406.04151
论文讲座:https://www.bilibili.com/video/BV1RDHYeYE9C/?spm_id_from=333.337.search-card.all.click&vd_source=5afc56aaa0d4664e2b8f364e5e347a45
代码:https://github.com/WooooDyy/AgentGym.git
https://github.com/OpenManus/OpenManus-RL/tree/main/openmanus_rl
AgentGym项目结构文档:https://github.com/OpenManus/OpenManus-RL/blob/main/openmanus_rl/agentgym/2nd_dev_docs/
AgentGym二次开发设计文档:https://github.com/OpenManus/OpenManus-RL/blob/main/openmanus_rl/agentgym/2nd_dev_docs/
OpenManus-RL开发指南: https://github.com/OpenManus/OpenManus-RL/blob/main/docs/DEVELOPMENT_GUIDE_ZH.md
OpenManus-RL:https://deepwiki.com/OpenManus/OpenManus-RL
OpenManus模型训练概述:https://github.com/OpenManus/OpenManus-RL/blob/main/docs/README_ZH.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2384705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++性能测试工具——sysprof的使用

一、sysprof sysprof相对于前面的一些性能测试工具来说&#xff0c;要简单不少。特别是其图形界面的操作&#xff0c;非常容易上手&#xff0c;它还支持分析文件的保存和导入功能&#xff0c;这是一个非常不错的功能。做为一款系统性能测试工具&#xff0c;它支持多种硬件平台…

树莓派内核源码的下载,配置,编译和替换

共享文件夹的创建 ubuntu创建共享文件夹可以实现和本地windows跨系统文件共享 下面是创建步骤 先在windows准备一个文件夹来当做共享文件夹 树莓派内核源码下载 1.在树莓派终端输入以下指令查看内核版本 uname -r我这里是已经编译替换过后的版本 2.选择树莓派对应的版本号下…

CentOS停止维护了,解决yum不能安装软件的问题

最近在使用CentOS的yum命令安装软件时&#xff0c;出现了如下错误&#xff1a; 原因&#xff1a; 这是因为CentOS在2024 年 6 月 30 日停止维护了&#xff0c;同时也移除了相关的软件镜像仓库&#xff0c;导致网站地址访问不了&#xff0c;从而下载不了软件。 解决方法&#xf…

过压保护电路设计和计算

设备供电电压因各种原因变得过高会烧坏设备,因此可以在前级加过压保护电路。 稳压二极管+PMOS 电路分析 1、当输入电压 Vin < 5.1V 时:(下图以输入电压 Vin = 5V 举例) D1是5.1V稳压管,此时输入电压Vin才5V,小于5.1V,所以稳压管D1未进入稳压状态,不导通。 5.1V稳…

20250523-BUG:无法加载“GameLib/Framework.h“头文件(已解决)

BUG&#xff1a;无法加载"GameLib/Framework.h"头文件&#xff08;已解决&#xff09; 最近在打开新的C项目时报了这个错&#xff0c;我是按照以下步骤来排除的BUG&#xff0c;希望对您有所帮助~ 检查【C/C】-【附加包含目录】中的路径有无问题&#xff0c;一般需要加…

OpenCv高阶(8.0)——答题卡识别自动判分

文章目录 前言一、代码分析及流程讲解&#xff08;一&#xff09;初始化模块正确答案映射字典&#xff08;题目序号: 正确选项索引&#xff09;图像显示工具函数 &#xff08;二&#xff09;轮廓处理工具模块&#xff08;三&#xff09;几何变换核心模块 二、主处理流程图像读取…

Python语法特点与编码规范

注释 单行注释 把#号当做注释符号 多行注释 python中并没有规定多行注释标记&#xff0c;通常使用单引号作为多行注释 中文注释 规定文件所用编码&#xff0c;当时是为解决python2不支持中文的问题 #codingutf-8代码缩进 python采用代码缩进和冒号区分代码层次&#xff0c…

反本能---如何对抗你的习以为常

目录 一、概述 二、自我提升 &#xff08;一&#xff09;我们为什么总想拖延 &#xff08;二&#xff09;如何有效应对拖延 &#xff08;三&#xff09;如何更好的自我控制 &#xff08;四&#xff09;为啥付出了没有回报 &#xff08;五&#xff09;如何提高学习效率 三…

(15)关于窗体的右键菜单的学习与使用,这关系到了信号与事件 event

&#xff08;1&#xff09;起因来源于 4.11 的老师讲的例题&#xff0c;标准的&#xff0c;规范的使用右键菜单的代码及参考资料如下&#xff1a; &#xff08;2&#xff09; 接着脱离上面的那个复杂的环境&#xff0c;用简单的例子测试一下 &#xff1a; 说明老师讲的都是对…

Ubuntu Desktop 24.04 常用软件安装步骤

文章目录 Ubuntu Desktop 24.04 常用软件安装步骤Snipaste F1快捷截图&#xff08;超方便 | 我6台电脑每台都用&#xff09;搜狗输入法快速浏览工具 | 空格键快速预览文件壁纸工具 | varietySSH 工具 | Termius 终端分屏工具 | TmuxCaffeine | 避免息屏小工具 一些设置将启动台…

Linux iSCSI存储共享实验指南

实验介绍 1、在Linux平台上通过iSCSI协议实现IP-SAN存储共享 2、掌握存储导出(export)和存储导入(import)的配置方法 3、学习iSCSI存储的发现、连接、断开和管理操作 1、实验环境 两台同网段的Linux虚拟机&#xff08;无需物理交换机&#xff09; 操作系统&#xff1a;Lin…

git入门之HEAD介绍

目录 前言一、HEAD 的含义与作用二、游离状态的触发场景及特征1. 触发条件2. 游离状态的特征 三、游离状态的常见使用情况1. 临时查看历史代码2. 保留游离状态的提交 四、注意事项与最佳实践1. 风险防范2. 状态检测技巧 总结 前言 本文介绍Git核心概念HEAD的定义&#xff0c;作…

车道线检测:自动驾驶的“眼睛”

在自动驾驶技术的庞大体系中&#xff0c;车道线检测扮演着至关重要的角色&#xff0c;它就像是自动驾驶汽车的“眼睛”&#xff0c;帮助车辆感知道路边界&#xff0c;从而实现安全、准确的行驶。今天&#xff0c;我们就来深入探讨一下车道线检测的奥秘&#xff0c;看看它是如何…

力扣面试150题--填充每个节点的下一个右侧节点指针 II

Day 45 题目描述 思路 初次做法&#xff1a;考虑到每一节点都要指向它右边的第一个节点&#xff0c;那么我们需要从根向下&#xff0c;最好每次提前处理根节点指向它右边的节点&#xff0c;那么符合这样的遍历方法&#xff0c;很容易i想到前序遍历&#xff0c;但是前序遍历是…

使用openvino和onnxruntime的SDK部署yolo11检测模型

这里的代码参考ultralytics代码库里面的examples文件夹下面的openvino和onnxruntime使用案例部署yolo11检测模型的代码。这两种部署框架和前面的tensorRT框架都是类似的&#xff0c;只是使用的接口不太一样。 PART A -- onnxruntime的使用 1.下载onnxruntime的推理框架 (1) …

C 语言学习笔记(指针4)

内容提要 指针 函数指针与指针函数二级指针 指针 函数指针与指针函数 函数指针 定义 函数指针本质上是指针&#xff0c;是一个指向函数的指针。函数都有一个入口地址&#xff0c;所谓指向函数的指针&#xff0c;就是指向函数的入口地址。&#xff08;这里的函数名就代表…

MySQL的相关操作

目录 一. 字符串函数 二. group by分组 2.1 作用 2.2 格式 2.3 举例 三. order by排序 3.1 格式 3.2 举例 四. limit 4.1 作用 4.2 举例 五. having 5.1 作用 5.2 举例 六. 正则表达式 七. 多表查询 7.1 定义 7.2 子查询 7.3 联合查询 纵向合并 7.4 交叉连…

鸿蒙HarmonyOS多设备流转:分布式的智能协同技术介绍

随着物联网和智能设备的普及&#xff0c;多设备间的无缝协作变得越来越重要。鸿蒙&#xff08;HarmonyOS&#xff09;作为华为推出的新一代操作系统&#xff0c;其分布式技术为实现多设备流转提供了强大的支持。本文将详细介绍鸿蒙多设备流转的技术原理、实现方式和应用场景。 …

XXE(外部实体注入)

目录 学习xxe前提&#xff1a;了解xml格式 1. XML基础 2. XXE基础知识 2.1. 结构 2.2. 定义与原理 2.3. XML实体类型 2.4. 攻击类型 2.5. 防御措施 3. pikachu靶场xxe练习 学习xxe前提&#xff1a;了解xml格式 1. XML基础 文档结构包括XML声明、DTD文档类型定义&…

jenkins凭据管理

用途: 存储构建需要与其他系统认证所使用的账户或者密码信息. Username with password类型存储Harbor或者其他系统的用户名和密码。GitLab API token类型存储Gitlab的用户API token。Secret text类型可以用来存储OpenShift等系统中的token。Certificate类型可以用户存储证书&am…