__init__.py — 这是 PRIME 代码评测子包的入口文件¶
模块路径: verl.utils.reward_score.prime_code
文件概述¶
这是 PRIME 代码评测子包的入口文件,实现了本地代码正确性验证。它从模型输出中提取代码,然后在本地通过运行测试用例来评分。支持二元评分(全对/全错)和连续评分(通过率)两种模式。
关键代码讲解¶
评分函数 compute_score¶
def compute_score(completion, test_cases, continuous=False):
# 从模型输出中提取 Python 代码块
solution = completion.split("```python")[-1].split("```")[0]
try:
if not isinstance(test_cases, dict):
test_cases = json.loads(test_cases)
# 先做全量测试,如果全部通过就直接返回
res, metadata = apps_check_correctness(
in_outs=test_cases, generation=solution, timeout=5, debug=False
)
success = all(map(lambda x: x is True, res))
if success:
return success, metadata
# 如果需要连续评分(continuous),逐个测试前10个用例
if continuous:
for test_case_id, test_case in enumerate(test_cases_list):
res, metadata = apps_check_correctness(
in_outs=test_case, generation=solution, timeout=10
)
res_list.extend(res)
if test_case_id >= 9:
break
success = sum(map(lambda x: x is True, res_list)) / res_count
except Exception:
success = False
return success, metadata_list
评分策略: 1. 先尝试全量测试 -- 如果全部通过,直接返回满分 2. 全量未通过且需要连续评分时,逐个测试前 10 个用例,计算通过率 3. 连续评分模式返回的是 0.0~1.0 之间的浮点数,而非布尔值
核心类/函数列表¶
| 函数名 | 作用 |
|---|---|
compute_score |
主评分函数,提取代码并运行测试 |
与其他模块的关系¶
- 被
reward_score/__init__.py调用,处理codecontests、apps等代码数据集 - 使用
utils.check_correctness在独立进程中运行测试 testing_util.py提供底层的代码执行和输出比较逻辑- 当有
sandbox_fusion_url时,sandbox_fusion模块优先使用
小结¶
本地代码评测方案:从 markdown 代码块中提取代码,在独立进程中运行测试用例。continuous=True 模式提供细粒度的奖励信号(通过率),比二元评分更有利于 RL 训练。限制只测前 10 个用例以控制评测时间。