geo3k_tool.py — verl/tools/geo3k_tool.py¶
文件路径¶
verl/tools/geo3k_tool.py
文件概述¶
Geo3kTool 是一个面向 Geometry3K(几何题)数据集的工具,用于在 RL 训练中计算 LLM 解答几何题的奖励分数。它的结构和逻辑与 Gsm8kTool 几乎完全一致,只是评分函数不同。
关键代码讲解¶
1. 执行工具¶
@rollout_trace_op
async def execute(self, instance_id, parameters, **kwargs):
answer = parameters.get("answer", "")
if not isinstance(answer, str):
answer = str(answer)
self._instance_dict[instance_id]["response"] = answer
reward = await self.calc_reward(instance_id)
tool_reward = 0.0 if reward > self._instance_dict[instance_id]["reward"] else -0.05
self._instance_dict[instance_id]["reward"] = reward
return ToolResponse(text=f"Current parsed {answer=} {reward=}"), tool_reward, {}
与 Gsm8kTool 的区别:不需要添加 "#### " 前缀(几何题的答案格式不同)。其他逻辑完全一致:计算奖励、惩罚未改进的提交。
2. 计算奖励¶
async def calc_reward(self, instance_id, **kwargs):
return geo3k.compute_score(
self._instance_dict[instance_id]["response"],
self._instance_dict[instance_id]["ground_truth"],
use_boxed=False,
format_score=0.0,
)
使用 geo3k.compute_score 函数:
- use_boxed=False:不要求答案用 \boxed{} 包裹。
- format_score=0.0:格式错误时得 0 分。
核心类/函数列表¶
| 类/方法 | 作用 |
|---|---|
Geo3kTool |
几何题奖励计算工具 |
create |
创建实例并设置标准答案 |
execute |
接收答案,计算奖励 |
calc_reward |
调用 geo3k 评分函数 |
release |
释放实例 |
与其他模块的关系¶
- 继承自
BaseTool。 - 依赖
verl.utils.reward_score.geo3k模块计算分数。 - 与
Gsm8kTool高度相似,主要区别在评分函数和答案格式。
小结¶
Geo3kTool 是 Gsm8kTool 在几何题场景下的对应实现。它展示了 verl 工具系统的可扩展性——只需替换评分函数,就能支持不同类型的数学题目。