帮你快速理解、总结文档立即下载

TIONE x taco-agentic-rl 实践文档

最近更新时间:2026-07-14 15:28:00

我的收藏

概述

taco-agentic-rl 是面向智能体强化学习(Agentic RL)场景的训练框架,与 TI-ONE 平台深度集成,为用户提供开箱即用的 Agentic RL 训练能力。本文档涵盖产品入口、最佳实践操作指南,以及与行业主流框架 VERL 的对比分析。

产品入口

镜像中心 已上架平台预置镜像 taco-agentic-rl-v1.0.0,如下所示:

任务式建模开发机 模块可选中该预置镜像。


最佳实践

概述

本最佳实践以 Qwen2.5-7B-Instruct 模型为基础,演示如何在 TI-ONE 平台上使用 taco-agentic-rl 框架完成智能体强化学习训练的完整流程。整体流程如下:
操作步骤
说明
在 TI-ONE 平台启动开发机(HCCPNV6 × 8 卡),配置镜像、CFS 存储及网络端口,下载基座模型。
根据业务场景选择 Agent 实现(如 zeroclaw),部署独立的 Agent 在线服务并完成配置对接。
在开发机上依次启动 Redis 任务队列、LLM Proxy、训练脚本和 Agent Server 四个组件,协同完成 Agentic RL 训练循环。
使用 Perfetto UI 可视化查看训练过程中的 Agent 交互轨迹,辅助分析和调试。
合并 FSDP 格式的 Checkpoint 为 HuggingFace 格式,使用 vLLM 部署训练后模型,通过 Agent 对话验证训练效果。

步骤1:准备环境

启动开发机

本次实践采用 HCCPNV6 × 8 卡,启动开发机作为训练平台。
镜像选择:内置镜像-taco-agentic-rl-v1.0.0
机器资源:8卡 / 256C 2000G
CFS 资源:请把您的 CFS 挂载到 /home/tione/notebook

添加端口:推荐使用 CLB,映射 8001 端口,避免服务重启导致 IP 变更需要重新配置。


注意:
后续非特别标注,所有命令以及操作均在此开发机执行。

模型下载

请把模型下载到 /home/tione/notebook/models/Qwen2.5-7B-Instruct,如果路径不一样后续需要修改配置文件以及训练脚本。

步骤2:启动 Agent 服务

1. 创建在线服务

这部分为一个独立的在线服务,非“准备环境”步骤中启动的开发机。请新建一个在线服务,或者复用您已有的 zeroclaw 服务。
如果您选择新建在线服务,配置如下:
配置项
说明
镜像
ccr.ccs.tencentyun.com/ti-public/notebook-conda-gpu:zeroclaw-ti-dev20260603(可以直接填写该自定义镜像地址拉起 agent 服务)
端口
42617
CFS 挂载
将修改好的配置文件目录挂载到 /opt/ml/conf
启动命令
需要覆盖原有的启动命令(见下方)


2. 配置文件

配置文件为 config.toml,需要手动修改以下内容(如果您已有 zeroclaw 服务,则无需使用默认配置文件,直接修改下列内容即可):
# 根据您的配置修改配置文件下列内容
# 1. 调用地址:改为 taco-agentic-rl 开发机的 IP 地址
default_provider = "custom:http://172.17.64.13:8001/v1"
# 2. 模型名:改为您配置的模型
default_model = "/home/tione/notebook/models/Qwen2.5-7B-Instruct"

3. 启动命令

cp /opt/ml/conf/config.toml /zeroclaw-data/.zeroclaw/ && zeroclaw daemon
启动结果:


4. 配对获取 Token

这部分可以用“服务调用” tab 的调用地址访问,也可以直接用在线服务对应的 pod ip + 端口访问。示例:
# IP 修改为您 zeroclaw 在线服务的 pod id
# Pairing Code 可以从服务日志中看到
curl -X POST http://172.17.x.x:42617/pair -H 'X-Pairing-Code: 045162'
调用结果如下图所示:


Tips:上面的 Pairing Code 是一次性的,请及时保存您获取到的 token,同一个服务无法再次使用同一个 Pairing Code 获取新的 token。

步骤3:开发机启动训练

训练代码

此示例的代码路径位于镜像内:/workspace/youtu-agentic-rl/examples/zeroclaw,后续所有脚本均在此目录下执行。
.
├── agent_client.py
├── agent_handler.py # 包含 agent 调用及奖励函数实现
├── agent_server.py
├── checkpoint/ # ckpt 默认保存目录
├── config.yaml # 配置文件
├── run_proxy.sh # 启动 LLM Proxy 的脚本
├── run_queue.sh # 启动 redis 任务队列的脚本
├── run_server.sh # 启动 agent server 的脚本
├── train.sh # 训练脚本
└── wandb/

训练过程

按以下顺序分别在新的 shell 中启动各组件:
1. 启动 Redis 任务队列
cd /workspace/youtu-agentic-rl/examples/zeroclaw
bash run_queue.sh

2. 启动 LLM Proxy
cd /workspace/youtu-agentic-rl/examples/zeroclaw
bash run_proxy.sh

3. 启动训练脚本
cd /workspace/youtu-agentic-rl/examples/zeroclaw
# 配置环境变量
export ZEROCLAW_GATEWAY_URL=http://172.17.X.X/ms-XXX
export ZEROCLAW_BEARER_TOKEN=zc_XXX
bash train.sh

4. 启动 Agent Server
cd /workspace/youtu-agentic-rl/examples/zeroclaw
bash run_server.sh


运行日志

zeroclaw:

proxy:

训练进程:

agent_server:


步骤4:查看轨迹

使用 Perfetto UI 打开 trace.json 文件查看训练轨迹。

训练轨迹如下:


生成轨迹文件

训练脚本 train.sh 默认会生成 trace.json,默认导出所有 batch 的轨迹。如果您需要手动 dump,请确保 Redis 服务存在,然后执行:
python -m tilearn.agentic_rl --config $CONFIG_PATH \\
trace dump \\
--batch 1 $total_training_steps \\
-o $default_local_dir/trace.json

步骤5:训练后推理

1. 合并 Checkpoint 文件

训练后需要将 FSDP 格式的 ckpt 合并为 HuggingFace 格式才能使用 vLLM 等框架一键部署。在开发机执行:
cd /workspace/youtu-agentic-rl/examples/zeroclaw/checkpoint/youtu-agentic-rl/calc_x_claw_test
python -m verl.model_merger merge --backend fsdp \\
--local_dir global_step_10/actor/ --target_dir ./merged_model

2. 部署原版模型(对照组)

使用 vLLM 启动原版 Qwen2.5-7B-Instruct:
vllm serve /home/tione/notebook/models/Qwen2.5-7B-Instruct/ \\
--enable-auto-tool-choice --tool-call-parser hermes \\
--served-model-name models/Qwen2.5-7B-Instruct --port 8001
然后在 zeroclaw 服务中进入 CLI 模式交互:zeroclaw agent
对话效果如下:


3. 部署训练后模型

使用 vLLM 启动训练后的模型:
cd /workspace/.../calc_x_claw_test
vllm serve ./merged_model/ \\
--enable-auto-tool-choice --tool-call-parser hermes \\
--served-model-name models/Qwen2.5-7B-Instruct --port 8001
对话效果如下:


已知问题

问题描述:异常退出后显存残留
处理方法:目前训练脚本 train.sh 异常退出后,可能存在显存残留,通过 nvidia-smi 命令可确认。遇到此问题时执行以下命令清理:
pkill -9 -f ray::WorkerDict


TACO vs VERL 适配成本分析

对比背景

以论文 ReTool: Reinforcement Learning for Strategic Tool Use in LLMs 作为示例 Agent 场景,对比 TACO 和 VERL 两个框架在 Agentic RL 场景下的适配改造成本。

VERL 的 Agent 接入方式

为了接入 retool,verl 除了 recipe/retool 下的代码外,还在框架内部实现了 tool_agent,用来给 retool 注册:
data = {
"data_source": data_source.split("/")[1].lower(), # aime_2024, aime_2025
"prompt": [{"role": "user", "content": prompt}],
"ability": "MATH",
"reward_model": {"ground_truth": str(answer)},
"agent_name": "tool_agent",
}
tool_agent 实现在 verl/experimental/tool_agent_loop.py 下:
@register("tool_agent")
class ToolAgentLoop(AgentLoopBase):
@classmethod
def init_class(cls, config, tokenizer, processor, **kwargs):
...
VERL 把"agent"做成了框架内部的一等公民——必须实现一个继承自 AgentLoopBase 的类,注册到 agent_loop 里,框架来调度这个类的 rollout / generate / call_tool 等方法。所以 VERL 的 retool 例子里需要:
一个 ToolAgentLoop(AgentLoopBase) 类
一组 OpenAIFunctionToolSchema 描述的工具(位于 tool_parser.py 中)
agent_name="tool_agent" 在 dataset 里做路由
tool_config_path 指定工具配置 YAML

ReTool 启动方式:
硬件
HCCPNV6 单机 8 卡
Docker 镜像
mirror.ccs.tencentyun.com/verlai/verl:app-verl0.5-vllm0.9.1-mcore0.12.2-te2.2
模型
Qwen2.5-7B-Instruct
数据集
DAPO-Math-17k、AIME_2024、AIME_2025
启动方式
bash retool/run_qwen2_7b_dapo.sh

TACO 的 Agent 接入方式

在 TACO 中,框架要求的“agent”只是一个签名为 (ctx, config) -> dict 的回调函数:
class Server:
def __init__(self, ..., process_task: Callable[[TaskContext], str] = None, ...)
Server 启动 worker 进程后,每来一个任务就调一次这个函数(server.py:484):
result = await process_task(ctx, self.config)
qapython/agent_handler.py 里就是一个普通函数(没有任何继承):
async def process_task_async(ctx: TaskContext, config) -> Dict[str, Any]:
# 1. 从 utu 加载现成的 agent
agent_config = ConfigLoader.load_agent_config("examples/rl_train/qa_python_sandbox")
qapython_agent = get_agent(config=agent_config)
await qapython_agent.build()
# 2. 跑多轮
result = await qapython_agent.run(input=prompt)
# 3. 算 reward 返回
return {"answer": ..., "reward": ..., "metadata": ...}
然后在 agent_server.py:41 把它注入框架:
server = Server(config=config, process_task=process_task_async)
没有一个新类被定义,agent 与框架完全解耦。

qapython 启动方式:
硬件
HCCPNV6 单机 8 卡
Docker 镜像
ccr.ccs.tencentyun.com/ti-platform/ytrl-env:v1
模型
7B-coldstart
数据集
DAPO-Math-17k、AIME_2024、AIME_2025
启动方式
run_queue.sh → run_proxy.sh → run_server.sh → train.sh

附录

参考资源