AgentCPM-Explore 智能体强化学习训练实战:基于 AgentRL 与 MCP 协议的 GRPO/MINIRL 全流程
AgentCPM-Explore 智能体强化学习训练实战:基于 AgentRL 与 MCP 协议的 GRPO/MINIRL 全流程
本文带你用开源的智能体强化学习框架 AgentRL 完整训练 AgentCPM-Explore——一个仅有 4B 参数却登顶 GAIA、BrowseComp 等多个长程智能体榜单的端侧智能体大模型。依托 MCP 协议统一接入的 AgentDock 工具沙盒,你可以跑通 GRPO 与 MINIRL 两套强化学习算法的完整训练流水线:环境部署、数据准备、多轮工具调用采样、模型更新到一键测评,全流程开源可复现 🚀。
一、AgentRL 是什么:智能体强化学习训练框架概览
AgentRL 是 AgentCPM-Explore 团队自研的分布式强化学习与监督微调训练栈,覆盖采样、训练、推理服务、数据库存储全链路。与 verl、trl 等通用框架不同,它专为"智能体 + 工具"场景设计,四大核心特性值得新手重点了解:
| 特性 | 解决的问题 |
|---|---|
| 🛡️ 多轮交互训练 | 智能体可连续多轮调用工具,框架自动维护上下文,支持模型原生输出直接参与训练 |
| 🔌 MCP 协议集成 | 工具沙盒统一接入,自定义工具无需编写适配器即可作为 RL 训练环境 |
| ⚡ 训推完全解耦 | 采样与训练完全异步,支持同一 GPU 并发采样+训练,硬件利用率更高 |
| 🚀 前缀合并 + 全链路审计 | 类似推理端 KV Cache 的计算复用,128K+ tokens 超长上下文训练,轨迹全量持久化可回溯 |
对于智能体训练来说,最难的一点是让模型学会"调工具、看结果、再决策"的长链路行为。AgentRL 通过 MCP 协议把网页搜索、代码执行等工具封装成标准沙盒,模型在训练时直接和真实工具环境交互,多轮轨迹全部落库——这就是它能产出"100+ 轮连续交互"智能体的关键。
二、环境准备:AgentRL 安装与 MCP 工具沙盒部署
1️⃣ 安装 AgentRL 依赖并自检
在 AgentCPM-Explore/AgentRL/ 目录下执行:
uv pip install -r requirements.txt --no-build-isolation
python -c "import sys; sys.path.insert(0, 'src'); import models, sampler; print('All dependencies working')"
输出 All dependencies working 即代表基础环境就绪(无 GPU 亦可验证)。依赖清单见 requirements.txt。
2️⃣ 部署 MongoDB(必需)
MongoDB 是训练的数据中枢,存储采样任务和全部训练轨迹:
cd src/databases/deploy/mongo
docker-compose up -d
默认端口 27017,账号 root/password(生产环境请务必修改),部署文件见 docker-compose.yml。
3️⃣ 部署 MCP-Docker 工具沙盒
这是 AgentRL-MCP 的核心依赖:它通过 MCP 协议统一管理所有工具服务,训练时智能体靠它调用搜索、抓取、代码执行等工具。
AgentDock 是配套的容器化工具沙盒平台,docker compose up -d 一键拉起管理面板、数据库和工具节点。以下就是沙盒中 search-fusion 搜索工具的接入示意,智能体训练时会通过 MCP 协议调用其中的 search、fetch_url 等工具:
各节点分工:
agentdock-node-explore提供网页搜索、内容抓取、代码执行;agentdock-node-full提供 GitHub、Slack、文档处理等全功能工具。架构细节见 AgentCPM-Explore/AgentDock/README.md。
4️⃣ 配置 Agent 文件
训练涉及两个辅助智能体,统一在 assets/agent_config.yml 中管理(参考 agent_config_example.yml):
- Browse Agent:通过 MCP 调用浏览/代码执行工具并摘要结果,支持多模型故障转移
- Scorer Agent:启用 LLM judge 评分时的评估模型配置
若用本地 SGLang 模型做 Browse Agent,可参考 src/databases/deploy/sglang/docker-compose.yml 部署;用 API 模型则只需填 api_key 和 base_url。
三、训练数据准备:一份 JSONL 就够了
推荐直接使用预定义 MCP 采样器(AgentRL-MCP 的核心特性),只需准备 JSONL 格式任务文件:
{"id": "task_001", "query": "什么是机器学习?", "answer": "机器学习是...", "scorer": "agentcpm", "answer_schema": "answer"}
{"id": "task_002", "query": "计算 2+2 等于多少?", "answer": "4", "scorer": "math", "answer_schema": "boxed"}
字段说明(新手友好速查):
id/query:任务标识与用户问题,必填answer:期望答案,可选scorer:评分器名称,缺省为"agentcpm"(LLM judge 评分)answer_schema:答案提取格式,"answer"对应<answer>...</answer>,"boxed"对应数学题的\boxed{...}
亮点在于同一份训练里可混用不同 scorer:math 任务走数学专用评分,deepresearch 任务走 LLM judge,互不干扰。想扩展评分逻辑?通过 MCPScorerFactory.register_scorer() 注册一个异步函数即可,实现见 src/rollout/mcp/scorer.py。
四、算法选型:GRPO vs MINIRL 关键差异与推荐参数
AgentRL 通过 --loss_calculater 一键切换 GRPO / GSPO / MINIRL / CISPO 等算法,两者差异速览:
| 维度 | GRPO | MINIRL |
|---|---|---|
| 损失粒度 | --token_level_loss true,token 级 |
--token_level_loss false,序列级 |
| 额外参数 | 无 | --strict_in_bound true + --skip_length_normalization true |
| 适用场景 | 通用强化学习基线 | 对奖励稀疏、格式敏感的智能体任务更稳 |
官方推荐设置(摘自 docs/rl_zh.md):
- GRPO:
--loss_calculater "GRPO",--token_level_loss true - MINIRL:
--loss_calculater "MINIRL",--token_level_loss false、--strict_in_bound true、--skip_length_normalization true
其他常用调优旋钮(完整参数表见 src/configs.py):
- 采样侧:
num_generations(每任务生成数)、max_new_tokens、target_concurrency - 并行侧:训练
tp_size/pp_size/ep_size/cp_size,推理inf_tp_size、inf_mem_ratio(推理显存占比) - 数据过滤:
drop_zero_advantage、max_trained_count等
五、启动训练:GRPO/MINIRL 全流程实战
1️⃣ 修改示例脚本
仓库自带三个开箱即用的启动脚本:
| 脚本 | 用途 |
|---|---|
| grpo_example.sh | GRPO 强化学习训练 |
| minirl_example.sh | MINIRL 强化学习训练 |
| eval_example.sh | 模型评估采样 |
复制脚本后替换 <YOUR_...> 占位符:多机多卡配置(Accelerate + fsdp2_dst.yml)、模型路径 --model_name_or_path、--db_connection_string(Mongo 连接串)、--mcp_manager_url(MCP 工具服务地址,如 http://localhost:8000/mcpapi)以及 --agent_config_path。
2️⃣ 一条命令启动
# MINIRL 训练
./minirl_example.sh my_rl_training_run
# 或 GRPO 训练
./grpo_example.sh my_rl_training_run
3️⃣ 理解训练过程与数据流转
训练按"初始化 → 采样 → 训练 → 迭代"循环进行:SGLang 推理服务启动后,MCPSampler 让模型通过 MCP 协议多轮调用工具(每轮可换不同工具、基于上轮结果继续),轨迹写回 MongoDB,训练端流式消费并更新模型。
数据链值得记一下,调试时全靠它:
Task → Record → DispatchedSamplingTask → DBRecordData
Task:待采样任务定义(存在 Mongo 中)Record:采样进程领取任务后,存储完整多轮交互轨迹DispatchedSamplingTask:每次工具调用的请求/响应派发记录DBRecordData:训练直接消费的最终数据格式
采样器核心实现可看 src/rollout/mcp/sampler.py。
4️⃣ 三处关键产出
- 训练日志:
logs/as/${RUN_NAME}_train_${MACHINE_RANK}.log,每节点独立 - 模型 Checkpoint:
output/${RUN_NAME}/,按--save_steps定期保存,可续训或推理 - 轨迹数据库:MongoDB 中同名库
${RUN_NAME},全部采样任务、工具调用记录可审计回溯
六、训练完成后的测评与调优清单
📊 一键测评验证
训完的模型用 AgentToLeaP 评测框架验证:GAIA、BrowseComp、HLE、Frames 等 8 个长程智能体基准集,各自独立目录 + run.sh,改 MODEL_NAME、BASE_URL、MANAGER_URL 即可 bash run.sh,结果统一输出 dialog.json 完整轨迹与评分报告。
cd AgentToLeaP/benchmarks/gaia
bash run.sh
🔧 新手调优速查(常见问题)
| 症状 | 排查方向 |
|---|---|
| 采样长时间无结果 | Task 集合是否为空;target_concurrency / max_concurrent_samples_per_process 是否过低 |
| 训练显存不足 | 降 per_device_train_batch_size,或叠加 TP/CP/PP 并行 |
| 推理显存不足 | 降 inf_mem_ratio 或 max_new_tokens |
| 推理服务状态异常 | 在 Mongo 的 InferenceService 集合查看端口/状态 |
💡 完整监控与故障排查指南见 AgentCPM-Explore/AgentRL/docs/rl_zh.md。
七、关键文件路径速查表
| 资源 | 路径 |
|---|---|
| AgentRL 中文训练文档 | AgentCPM-Explore/AgentRL/README_zh.md |
| GRPO/RL 指南(中文) | AgentCPM-Explore/AgentRL/docs/rl_zh.md |
| SFT 监督微调脚本 | AgentCPM-Explore/sft/AgentCPM_SFT.py |
| GRPO 训练示例 | AgentCPM-Explore/AgentRL/grpo_example.sh |
| MINIRL 训练示例 | AgentCPM-Explore/AgentRL/minirl_example.sh |
| 评估脚本 | AgentCPM-Explore/AgentRL/eval_example.sh |
| MCP 采样器源码 | AgentCPM-Explore/AgentRL/src/rollout/mcp/sampler.py |
| 评分器工厂 | AgentCPM-Explore/AgentRL/src/rollout/mcp/scorer.py |
| 参数总配置 | AgentCPM-Explore/AgentRL/src/configs.py |
| 评测框架文档 | AgentCPM-Explore/AgentToLeaP/README_zh.md |
总结:AgentCPM-Explore 的强化学习训练栈把"智能体 RL 最难搞的三件事"——多轮工具交互、工具环境接入、训推资源调度——分别用 MCP 协议、AgentDock 沙盒、全异步解耦架构标准化了。新手只需准备好 MongoDB + AgentDock + 一份 JSONL 数据,跑 ./grpo_example.sh 或 ./minirl_example.sh 即可进入智能体强化学习的完整闭环 🎯。
