基于 VERL 与 OpenYuanrong 的 DeepAgent 强化学习训练实战:openJiuwen agent_rl 模块从环境部署到计算器智能体训练

发布时间:2026/10/10 2:07:06
基于 VERL 与 OpenYuanrong 的 DeepAgent 强化学习训练实战:openJiuwen agent_rl 模块从环境部署到计算器智能体训练 人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习【免费下载链接】agent-coreopenJiuwen agent-core可提供AI Agent开发、运行、调优与演进相关的全套SDK能力项目地址https://gitcode.com/openJiuwen/agent-core点击查看免费下载openjiuwen.agent_evolving.agent_rl是 openJiuwen 面向 Agent 的强化学习RL训练扩展模块它基于VERL强化学习框架与OpenYuanrong元戎分布式计算引擎构建。本指南以「训练一个借助计算器工具求解数学题的 HarnessDeepAgent」为贯穿案例完整讲解环境搭建、RLConfig配置、奖励函数与工具注册、数据转换以及训练启停的端到端流程。读完本文你将掌握如何在自己的 Atlas 910B4NPU环境上用 openJiuwen 现成 SDK 跑通一条可复现的 Agent RL 训练流水线并理解其背后的运行时与轨迹采集原理。模块定位与运行时架构openjiuwen.agent_evolving.agent_rl在 openJiuwen 中承担以下职责依据 agent_rl.README.md提供 RL 训练所需的数据结构与配置 Schema基于 verl 实现训练执行器VerlTrainingExecutor继承RayPPOTrainer提供训练主循环协调器MainTrainer与多轮 rollout 编排提供并行 rollout 运行时执行器ParallelRuntimeExecutor提供高层用户入口OfflineRLOptimizer。标准 rollout 使用openjiuwen.harness.DeepAgent作为外层运行时代码位于 deep_agent.py。AgentFactory为每个任务构建并配置DeepAgentConfig单轮 rollout 场景enable_task_loopFalse工具挂载到DeepAgent上ParallelRuntimeExecutor持有一个共享的TrajectorySpanProcessor在读取 Agent 规范轨迹canonical trajectory前通过run_agent_and_collect_trajectory()在每个 Agent 上临时注册RLRail。因此若你自定义agent_factory其返回对象必须支持register_rail/invoke例如DeepAgent。从源码看AgentFactory构建 agent 时会设置llm_return_token_ids True见 agent_factory.py从而让 vLLM 直接返回 token IDs 与 logprobs供训练编码器使用避免本地重复 tokenize。工具注册路径也值得注意ability_manager.add()只接受ToolCard而tool装饰的函数是携带.card属性的LocalFunction实例因此需要同时把ToolCard加入ability_manager提供 LLM schema、把Tool实例注册进Runner.resource_mgr提供执行时按 id 检索。环境部署前置条件项目推荐版本硬件Atlas910B4NPUCANN8.3 RC1Python3.11.10本模块面向昇腾 NPU 平台开发请确保驱动、固件与 CANN 工具链就绪。源码安装 vLLM、vllm-ascend 与 VERLvLLM、vllm-ascend、VERL 均需从源码安装。建议把三个源码树放在同一目录下例如rl_pkgsmkdir rl_pkgs cd rl_pkgs安装 vLLM v0.11.0mkdir rl_pkgs git clone https://github.com/vllm-project/vllm cd vllm git checkout v0.11.0 VLLM_TARGET_DEVICEempty pip install -v -e . cd ..安装 vllm-ascend v0.11.0rc1git clone https://github.com/vllm-project/vllm-ascend cd vllm-ascend git checkout v0.11.0rc1 pip install -v -e . cd ..安装 VERL 0.7.0git clone https://github.com/verl-project/verl cd verl git checkout v0.7.0 pip install -e . cd ..注意各版本必须与上表严格对应混用版本可能导致 vLLM 引擎与 VERL trainer 之间的协议不兼容。安装 openJiuwen 及 Python 依赖pip install openjiuwen pip install triton-ascend3.2.0rc4 pip install transformers4.57.6 pip install uvicorn0.40.0 pip install fastapi0.128.0 pip install openai2.15.0这些固定版本与 910B4 上的 vLLM/VERL 运行时联动如triton-ascend提供 NPU 上的 kernel 支持、uvicorn/fastapi用于 vLLM 的 OpenAI 兼容推理服务。安装 OpenYuanrong 与 ray_adapter下载 OpenYuanrong 0.7.0 与 ray_adapter 0.7.1 的 wheel 包在 conda 环境中离线安装pip install openyuanrong-0.7.0-cp311-cp311-manylinux_2_34_aarch64.whl pip install ray_adapter-0.7.1-py3-none-any.whl再下载 VERL OpenYuanrong 补丁包放到rl_pkgs下并转换为 UTF-8iconv -f UTF-16 -t UTF-8 yr_v7.patch yr_v7.patch.utf8在 VERL 源码树中应用补丁cd verl patch -p1 ../yr_v7.patch.utf8补丁的作用是把 VERL 的分布式后端替换为元戎yr使 PPO/GRPO 训练步骤运行在元戎的分布式调度之上。安装完成后通过yr start/yr stop管理元戎服务进程。总体流程强化学习训练主要包括以下 5 个步骤准备配置构建RLConfig覆盖训练Training、Rollout、运行时Runtime、持久化Persistence等参数定义奖励函数实现并注册奖励函数依据 Agent 输出与标准答案计算奖励注册工具为 Agent 提供可调用的工具例如用于简单表达式求值与方程求解的计算器准备数据实现task_data_fn把数据集行转换为 Agent 输入格式启动训练创建OfflineRLOptimizer完成配置后调用train()开始训练。对应到训练期主循环OfflineRLOptimizer.train()会先init_trainer()再start_training()见 rl_optimizer.py。训练端到端链路为数据 →task_data_fn转成query/ground_truth→ 并行 rollout 生成轨迹 →RLRail经共享TrajectorySpanProcessor产出规范轨迹 →trajectory_to_rollouts()转换为Rollout列表 → 奖励函数打分 → VERL trainer 执行 GRPO 更新。RLConfig 配置详解RLConfig是强化学习训练的顶层配置包含训练、Rollout、运行时与持久化四个子配置外加可选的 Ada 配置。以下为文档中的完整示例from openjiuwen.agent_evolving.agent_rl import RLConfig from openjiuwen.agent_evolving.agent_rl.config import ( AdaConfig, AgentRuntimeConfig, PersistenceConfig, RolloutConfig, TrainingConfig, ) config RLConfig( trainingTrainingConfig( model_path~/model/Qwen2.5-1.5B-Instruct, train_files/path/to/train.parquet, val_files/path/to/test.parquet, train_batch_size32, total_epochs2, max_prompt_length3072, max_response_length3072, n_gpus_per_node4, visible_device0,1,2,3, save_freq200, test_freq20, project_nameCalcX, experiment_namecalc_x_grpo, algorithm_adv_estimatorgrpo, whole_trajectoryTrue, logger[tensorboard], val_before_trainFalse, save_path~/checkpoint/calx ), rolloutRolloutConfig( rollout_n4, actor_optimizer_lr1e-6, actor_clip_ratio_low0.2, actor_clip_ratio_high0.3, ), runtimeAgentRuntimeConfig( system_promptsystem_prompt, temperature0.7, max_new_tokens512, ), persistencePersistenceConfig( enabledTrue, save_path./rollout_output, flush_interval100, save_rolloutsTrue, save_step_summariesTrue, ), )参数说明TrainingConfig训练配置参数说明model_path基座模型路径train_files / val_files训练/验证数据文件parquet 格式train_batch_size训练批次大小total_epochs总训练轮数max_prompt_length / max_response_length最大输入/输出 token 长度n_gpus_per_node / visible_deviceGPU 数量与可见设备 IDalgorithm_adv_estimator算法类型save_freq / test_freqcheckpoint 保存与验证间隔步project_name / experiment_name项目与实验名称save_path模型 checkpoint 保存路径whole_trajectory是否使用完整轨迹计算 advantagelogger日志后端如[tensorboard]RolloutConfigRollout 配置参数说明rollout_n每个 prompt 的采样数量actor_optimizer_lrActor 模型学习率actor_clip_ratio_low / actor_clip_ratio_highPPO clip 下/上界AgentRuntimeConfig运行时配置参数说明system_promptAgent 系统提示词temperature生成温度控制随机性max_new_tokens单次生成最大 token 数PersistenceConfig持久化配置参数说明enabled是否启用 rollout 持久化save_path持久化文件保存目录flush_interval落盘间隔步save_rollouts / save_step_summaries是否保存 rollout 明细与步级摘要从源码补充默认值与进阶字段结合 offline_config.py各配置类还包含下列默认值与扩展能力便于按需调参TrainingConfig 默认值project_nameOpenJiuwenAgentRL、experiment_namegrpo_experiment、algorithm_adv_estimatorgrpo、algorithm_use_kl_in_rewardFalse、algorithm_norm_adv_by_std_in_grpoTrue、whole_trajectoryFalse、total_epochs2、save_freq20、test_freq20、train_batch_size32、rollout_concurrency40、visible_device0,1,2,3、nnodes1、n_gpus_per_node4、micro_batch_size_per_gpu4、max_prompt_length3072、max_response_length3072、truncationtruncate、val_before_trainTrue、logger[tensorboard]、log_rollout_detailsTrue、log_reward_distributionFalse、develop_modeFalse数据路径别名train_files/val_files与train_data_path/val_data_path互为兼容别名解析时优先train_files对应resolved_train_files属性RolloutConfig 默认值actor_optimizer_lr1e-6、actor_use_kl_lossFalse、actor_kl_loss_coef0.02、actor_entropy_coef0.0、actor_clip_ratio_low0.2、actor_clip_ratio_high0.3、actor_loss_agg_modeseq-mean-token-mean、rollout_n8AgentRuntimeConfig 默认值system_promptYou are a helpful assistant.、temperature0.7、top_p0.9、max_new_tokens512、presence_penalty0.0、frequency_penalty0.0其中 presence/frequency penalty 非零时才写入模型请求AdaConfig当RLConfig.ada被设置时启用 Ada rollout 变体rollout_max_round2、final_keep_per_prompt8。Ada 用于多轮 rollout 的均衡采样训练脚本中有一行注释示例# adaAdaConfig(rollout_max_round2, final_keep_per_prompt8),VERL Hydra 覆盖默认值VerlHydraOverlay会把结构化默认值合并进 VERL 的ppo_trainerHydra 配置关键项包括trainer.devicenpu、rollout.modeasync、rollout.namevllm、rollout.tensor_model_parallel_size1、rollout.enforce_eagerTrue、rollout.gpu_memory_utilization0.7、engine_kwargs.vllm.enable_auto_tool_choiceTrue、engine_kwargs.vllm.tool_call_parserhermes、engine_kwargs.vllm.served_model_nameagentrl、reward_model.reward_managernaive等。若需深度定制可传verl_extra字典或verl_config_path覆盖底层配置。这些默认值保证了「零配置也能起步」而自定义字段让 GRPO/KL 系数、Ada 多轮、并发度等高级玩法均可控。System Prompt 设计系统提示词应清晰定义 Agent 的角色、工具用法与输出格式。计算器场景示例如下from openjiuwen.core.foundation.prompt import PromptTemplate CALCULATOR_SYSTEM_PROMPT PromptTemplate( namecalculator_system, content( You are a {{role}}. Use the {{tool_name}} tool to solve {{task_type}} problems step by step.\n Output the answer when you are ready. The answer should be surrounded by three sharps (###), in the form of {{answer_format}}. ), ) system_prompt CALCULATOR_SYSTEM_PROMPT.format( keywords{ role: calculator assistant, tool_name: calculator, task_type: math, answer_format: ### ANSWER: answer ###, } ).contentPromptTemplate来自openjiuwen.core.foundation.prompt支持以{{key}}占位符与keywords参数做模板渲染。要求 Agent 在最终输出中使用### ANSWER: answer ###格式这样奖励函数就能稳定解析答案。此外AgentFactory在构建 agent 时会自动把PromptTemplate类型的 system prompt 取.content使用见 agent_factory.py。工具定义使用tool装饰器定义可供 Agent 调用的工具。计算器工具示例from openjiuwen.core.foundation.tool import tool tool( namecalculator, descriptionPerform arithmetic calculations, simplify algebraic expressions, and solve equations., ) def calculator(expression: str) - str: Evaluate a math expression and return the result. # Implement expression evaluation logic; support arithmetic, equation solving, etc. # ... return result训练时通过optimizer.set_tools([calculator])注册工具。完整实现参考 examples/rl_calculator/tools.py它先尝试simpleeval快速求值纯算术表达式遇到含的方程则用 sympy 求解含变量符号的代数式则执行展开与化简并支持^→**与隐式乘法等转换。运行前需pip install simpleevalsympy 为训练脚本的标准依赖。数据准备实现task_data_fn把数据集的每一行例如 parquet 行转换为query与ground_truthdef task_data_fn(task_sample: dict) - dict: Convert dataset row to Agent input format. Dataset columns: question, result, chain, etc. Returns query (Agent input) and ground_truth (for reward computation). return { query: task_sample.get(question, ), ground_truth: task_sample.get(result, ), }query作为用户输入传给 Agentground_truth用于奖励函数与 Agent 输出对比得到奖励值。示例中 Calc-X 数据集的 parquet 含question、result列分别对应题目与标准答案。奖励函数奖励函数接收RolloutMessage依据 Agent 的对话轨迹与输出计算奖励。返回值必须包含reward_list和global_rewardfrom openjiuwen.agent_evolving.agent_rl.schemas import RolloutMessage def calc_reward(msg: RolloutMessage) - dict: Return 1.0 if answer is correct, otherwise 0.0. if not msg.rollout_info: return {reward_list: [], global_reward: 0.0} first_turn msg.rollout_info[0] ground_truth (first_turn.input_prompt or {}).get(ground_truth, ) last_turn msg.rollout_info[-1] response last_turn.output_response or {} content response.get(content, ) # Parse answer in ### ANSWER: xxx ### format from content answer _extract_answer(content) matched _results_match(answer, ground_truth) global_reward 1.0 if matched else 0.0 reward_list [global_reward] * len(msg.rollout_info) return {reward_list: reward_list, global_reward: global_reward}rollout_info每一轮对话的输入输出信息Rollout列表ground_truth来自task_data_fn生成的input_prompt中的ground_truthreward_list步级step-level奖励global_reward任务级总奖励。从 schemas.py 看Rollout除input_prompt/output_response外还包含input_prompt_ids/output_response_ids——当 vLLM 开启return_token_ids时token IDs 直接随轨迹返回训练编码器可跳过本地重 tokenize。完整的calc_reward实现在 examples/rl_calculator/reward.py其_results_match支持大小写不敏感匹配与math.isclose(rel_tol1e-2)的数值近似比较并对答案解析失败做了兜底奖励函数注册采用全局RewardRegistry见 reward.pyregister_reward同时提供了装饰器用法。启动训练组装好上述配置与函数后创建OfflineRLOptimizer并启动训练from openjiuwen.core.common.logging import logger from openjiuwen.agent_evolving.agent_rl import RLConfig, OfflineRLOptimizer def main(): optimizer OfflineRLOptimizer(config) optimizer.register_reward(calc_reward, namecalc_reward) optimizer.set_tools([calculator]) optimizer.set_task_data_fn(task_data_fn) logger.info( Starting Calculator RL Training ) logger.info(Model: %s, config.training.model_path) logger.info(Train files: %s, config.training.train_files) logger.info(Algorithm: %s, config.training.algorithm_adv_estimator) logger.info(Epochs: %d, config.training.total_epochs) try: optimizer.train() except KeyboardInterrupt: logger.info(Training interrupted by user) finally: optimizer.stop() logger.info(Training complete) if __name__ __main__: main()register_reward注册奖励函数可通过name指定注册名默认为函数名set_tools注册工具列表set_task_data_fn设置数据转换函数train()启动训练循环stop()清理资源。OfflineRLOptimizer还提供set_agent_factory()以自定义 agent 构建方式若不设置_resolve_agent_factory()会基于 runtime 配置与已注册工具构建默认AgentFactory。训练初始化时还会设置一批 NPU/vLLM 相关环境变量如VLLM_USE_V11、VLLM_ASCEND_DISABLE_CAMEM1、ASCEND_RT_VISIBLE_DEVICESvisible_device并用ray_adapter初始化 Ray 运行时。运行完整示例完整的可运行示例位于 examples/rl_calculator/README.md训练入口脚本为 examples/rl_calculator/train.py。步骤一安装计算器工具依赖pip install simpleeval步骤二下载 Calc-X 数据从 Calc-X 数据包下载并解压得到包含train.parquet与test.parquet的目录parquet 含question、result列。步骤三编辑训练脚本打开examples/rl_calculator/train.py至少配置Parquet 训练/验证数据修改文件顶部的DATA_DIR指向解压后的目录应包含train.parquet、test.parquet基座模型在TrainingConfig中设置model_path指向本机 Hugging Face 格式模型目录其它按需调整save_pathcheckpoint 输出、n_gpus_per_node、visible_device、micro_batch_size_per_gpu等。步骤四启动元戎分布式计算框架yr start --master -l DEBUG -d log_path步骤五配置分布式环境变量用ifconfig查看本机网卡名与 IP然后导出export HCCL_SOCKET_IFNAMEeth0 export GLOO_SOCKET_IFNAMEeth0 export VLLM_DP_MASTER_IPXX.XX.XX.XX export DISTRIBUTED_BACKENDyr export HCCL_EXEC_TIMEOUT3600 export HCCL_CONNECT_TIMEOUT3600 export HCCL_IF_BASE_PORT48890 export TASK_QUEUE_ENABLE1 export VLLM_ASCEND_ENABLE_NZ0 export VLLM_USE_V11其中HCCL_SOCKET_IFNAME/GLOO_SOCKET_IFNAME对应ifconfig中实际网卡名如eth0VLLM_DP_MASTER_IP填本机内网 IPDISTRIBUTED_BACKENDyr声明使用元戎作为分布式后端。步骤六启动训练cd examples/rl_calculator python train.py日志会打印模型路径、数据路径、算法、epoch 等相关信息若启用 TensorBoardlogger[tensorboard]可在本地加载查看训练曲线。步骤七关闭元戎训练结束或重启训练服务时yr stopRollout 持久化与指标追踪PersistenceConfig背后的实现位于 offline/storeFileRolloutStore把 rollout 数据按步区间分组落盘为本地 JSONL 文件支持按filters查询历史 rollout 用于分析与调试RLMetricsTracker则提供结构化的步级指标与诊断信息开发模式下可输出各阶段训练流水线诊断。启用持久化后save_rolloutsTrue会保存每个任务的完整轨迹save_step_summariesTrue会保存每步的指标摘要flush_interval100控制每 100 步统一落盘一次。常见问题与排查建议自定义 agent 无法采集轨迹run_agent_and_collect_trajectory()要求 agent 支持register_rail()与invoke()不支持的 agent 会抛出ValueErrorinvoke 失败时会记录日志并可能返回部分规范轨迹见 offline/runtime.md。奖励恒为 0 或异常波动先确认task_data_fn产出的ground_truth是否为空、Agent 输出是否严格符合### ANSWER: answer ###格式再检查_results_match的数值容差rel_tol1e-2。分布式通信异常检查HCCL_SOCKET_IFNAME/GLOO_SOCKET_IFNAME是否与实际网卡一致、VLLM_DP_MASTER_IP是否正确、HCCL_IF_BASE_PORT端口段是否未被占用。多轮 rollout 需求默认enable_task_loopFalse为单轮模式如需多轮与均衡采样可通过RLConfig.adaAdaConfig(...)启用 Ada rollout 变体。延伸阅读模块 API 与类完整说明agent_rl 模块文档离线运行时RLRail、RuntimeExecutor、ParallelRuntimeExecutor、AgentFactoryoffline/runtime.md配置 Schema 细节config.md可运行示例examples/rl_calculator/README.md 与 examples/rl_calculator/train.py在线 RL 服务Online RL入口examples/jiuwenrl_online/README.md赞分享人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习【免费下载链接】agent-coreopenJiuwen agent-core可提供AI Agent开发、运行、调优与演进相关的全套SDK能力项目地址https://gitcode.com/openJiuwen/agent-core点击查看免费下载相关推荐verl 强化学习训练实战指南基于 HybridFlow 的 PPO/GRPO 大模型后训练verl 强化学习训练实战指南基于 HybridFlow 的 PPO/GRPO 大模型后训练 verlVolcano Engine ReinforcemenAI 技能人工智能大模型深度学习Qwen3 TorchTitan NPU 强化学习训练指南基于 veRL 的 GRPO 训练环境搭建与启动实战cann-recipes-trainQwen3 TorchTitan NPU 强化学习训练指南基于 veRL 的 GRPO 训练环境搭建与启动实战cann recipes train 本篇技示例工程人工智能大模型预训练微调强化学习AscendDopamine 容器化部署实战基于 Docker 构建 Atari 与 MuJoCo 强化学习训练环境Dopamine 容器化部署实战基于 Docker 构建 Atari 与 MuJoCo 强化学习训练环境 Dopamine 是面向强化学习算法快速原型验证的研强化学习机器学习深度学习上一篇APK-Installer在Windows上安装安卓应用的终极解决方案下一篇5分钟掌握PiliPlus跨平台B站客户端的完整使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询