verl/tools 模块总览¶
模块概述¶
verl/tools 模块是 verl 框架的工具系统,让 LLM 在强化学习训练过程中能够调用外部工具(如搜索引擎、代码执行器、数学评分器等)。这是实现 Tool-augmented RL(工具增强强化学习)的核心组件。
为什么需要工具系统?¶
在传统的 RL 训练中,LLM 只能生成文本。但在实际应用中,LLM 可能需要: - 搜索外部知识来回答问题(如 DeepSeek-R1) - 执行代码来验证计算结果 - 放大图片来看清细节 - 提交答案来获取即时反馈
工具系统为 LLM 提供了这些能力,并在训练中通过奖励信号引导 LLM 学会正确使用工具。
模块架构¶
verl/tools/
├── __init__.py # 包初始化(空)
├── schemas.py # 数据模式定义(OpenAI 格式)
├── base_tool.py # 工具抽象基类
├── mcp_base_tool.py # MCP 工具基类
├── gsm8k_tool.py # GSM8K 数学题工具
├── geo3k_tool.py # Geometry3K 几何题工具
├── sandbox_fusion_tools.py # 沙箱代码执行工具
├── search_tool.py # 搜索工具(直接 HTTP)
├── mcp_search_tool.py # 搜索工具(MCP 协议)
├── image_zoom_in_tool.py # 图片放大工具
└── utils/
├── __init__.py # 子包初始化(空)
├── tool_registry.py # 工具注册中心(配置加载)
├── search_r1_like_utils.py # 搜索 API 调用工具函数
└── mcp_clients/
├── McpClientManager.py # MCP 客户端管理器
└── utils.py # 令牌桶 + 格式转换
类继承关系¶
BaseTool
├── SandboxFusionTool (代码执行)
├── SearchTool (HTTP 搜索)
├── Gsm8kTool (数学题评分)
├── Geo3kTool (几何题评分)
├── ImageZoomInTool (图片放大)
└── MCPBaseTool (MCP 工具基类)
└── MCPSearchTool (MCP 搜索)
建议阅读顺序¶
schemas.py- 理解工具系统的数据格式base_tool.py- 理解工具的生命周期和接口gsm8k_tool.py- 最简单的工具实现示例geo3k_tool.py- 另一个简单示例,与 gsm8k 对比sandbox_fusion_tools.py- 理解 Ray 并发框架和代码执行search_tool.py- 理解搜索工具和并发框架的复用utils/search_r1_like_utils.py- 搜索的底层实现mcp_base_tool.py- 理解 MCP 协议的工具调用mcp_search_tool.py- MCP 工具的具体实现utils/mcp_clients/utils.py- MCP 工具函数utils/mcp_clients/McpClientManager.py- MCP 客户端管理image_zoom_in_tool.py- 多模态工具utils/tool_registry.py- 工具的配置和注册__init__.py/utils/__init__.py- 包初始化
核心概念¶
工具生命周期¶
两种工具类型¶
- Native:代码直接运行在 verl 进程中
- MCP:通过 MCP 协议调用远程服务
并发控制¶
通过 Ray Actor 实现的令牌桶速率限制 + 执行池,支持高并发的工具调用。
文档列表¶
| 文件 | 讲解文档 |
|---|---|
__init__.py |
init.md |
schemas.py |
schemas.md |
base_tool.py |
base_tool.md |
mcp_base_tool.py |
mcp_base_tool.md |
gsm8k_tool.py |
gsm8k_tool.md |
geo3k_tool.py |
geo3k_tool.md |
sandbox_fusion_tools.py |
sandbox_fusion_tools.md |
search_tool.py |
search_tool.md |
mcp_search_tool.py |
mcp_search_tool.md |
image_zoom_in_tool.py |
image_zoom_in_tool.md |
utils/__init__.py |
utils/init.md |
utils/tool_registry.py |
utils/tool_registry.md |
utils/search_r1_like_utils.py |
utils/search_r1_like_utils.md |
utils/mcp_clients/McpClientManager.py |
utils/mcp_clients/McpClientManager.md |
utils/mcp_clients/utils.py |
utils/mcp_clients/utils.md |