Summary
main 分支存在 5 个 Scoring-Critical 逻辑问题,会直接影响最终跑分可信度(错误计分、误结束、误续跑、错误 GT、结果收集失败)。
Impact Statement
这些问题会导致以下后果(任一项都足以影响 leaderboard):
- 可疑(anti-cheat fail)结果仍可能进入最终分数。
finish 参数解析失败时会被当作成功 finish,导致会话提前结束。
- 已完成会话仍可被
--resume 继续执行,污染最终成绩。
ground_truth 断点续跑会错误复用旧 top_k chunk,扭曲 recall 与是否过阈值。
- 结果收集阶段
python3 -c 存在字符串拼接问题,特殊模型名会直接导致收集失败。
A) anti-cheat 被忽略,疑似作弊结果仍可上分
代码证据链
- benchmark 明确输出 anti-cheat 结果:
benchmark/src/main.rs anti_cheat::detect_hardcoded_results(...)
- JSON stdout 同时包含
benchmark 和 anti_cheat
- 评分侧只看
recall_passed + qps:
scripts/run_eval.sh 选择逻辑仅判断 recall_passed / qps
scripts/rebuild_leaderboard.py 同样只按 recall_passed / qps
复现示例(逻辑层)
如果 benchmark 输出为:
{
"benchmark": {"qps": 5000, "recall": 0.99, "recall_passed": true},
"anti_cheat": {"passed": false, "message": "SUSPICIOUS"}
}
当前打分链路仍可能把该条作为有效高分候选(因为收分脚本不看 anti_cheat)。
影响
可疑结果进入 leaderboard,导致排名失真。
B) finish 解析失败仍触发会话结束
代码证据(main 上)
- 工具解析失败走 error 分支(返回
ToolResult::Error)
- 结束判定却只看原始
tool_name == "finish"
触发条件
LLM 发送 finish 但参数 JSON 不合法(例如缺字段、字段类型错误)。
实际后果
尽管 finish 未成功解析,主循环仍进入结束分支,可能跳过真实最终 benchmark,直接影响最终分数。
C) --resume 仅按次数判断,已结束会话可被误续跑
代码证据(main 上)
恢复条件是 tool_calls_used < tool_calls_total,未判断会话是否已通过 finish 正常结束。
触发条件
- 上一轮会话已调用
finish
- 但
tool_calls_used 尚未达到上限(常见)
- 使用同一
WORK_DIR + --resume 再启动
实际后果
旧会话被继续执行并产生额外 benchmark/tool log,污染最终成绩。
D) ground_truth 断点续跑错误复用旧 top_k chunk
代码证据(main 上)
chunk 跳过条件只校验 len(existing),不校验 top_k / query_id 连续性。
可复现命令(已记录)
先跑 top_k=2,再构造已有 chunk 后改跑 top_k=1,输出仍沿用旧长度:
neighbors_lengths [2, 2]
top_k1_expected_all_1 False
影响
GT 与当前评测参数不一致,recall 被系统性扭曲,进而影响 QPS 是否计分与最终排名。
E) run_eval.sh 结果收集阶段字符串拼接导致失败
代码证据(main 上)
python3 -c "... '${MODEL_NAME}' ..." 直接将变量内联到 Python 源码字符串。
可复现命令(已记录)
MODEL_NAME="bad'name"
python3 -c "model_name='${MODEL_NAME}'; print(model_name)"
输出:
SyntaxError: invalid syntax
影响
Step 7 收集/落盘失败,导致本次跑分结果无法正确更新 leaderboard。
Expected Behavior
- anti-cheat fail 必须阻断得分(至少 QPS 归零且不进入候选)。
- 仅“成功解析为 Finish call”时才结束会话。
--resume 必须识别“已 finish”的会话并拒绝续跑。
- chunk 复用需校验
top_k 与 query_id 连续性。
run_eval.sh 需改为安全传参(heredoc + argv/env),避免内联拼接 Python 源码。
Severity
Scoring-Critical(直接影响 benchmark 最终分数与 leaderboard 可信度)。
Summary
main分支存在 5 个 Scoring-Critical 逻辑问题,会直接影响最终跑分可信度(错误计分、误结束、误续跑、错误 GT、结果收集失败)。Impact Statement
这些问题会导致以下后果(任一项都足以影响 leaderboard):
finish参数解析失败时会被当作成功finish,导致会话提前结束。--resume继续执行,污染最终成绩。ground_truth断点续跑会错误复用旧top_kchunk,扭曲 recall 与是否过阈值。python3 -c存在字符串拼接问题,特殊模型名会直接导致收集失败。A) anti-cheat 被忽略,疑似作弊结果仍可上分
代码证据链
benchmark/src/main.rsanti_cheat::detect_hardcoded_results(...)benchmark和anti_cheatrecall_passed+qps:scripts/run_eval.sh选择逻辑仅判断recall_passed/qpsscripts/rebuild_leaderboard.py同样只按recall_passed/qps复现示例(逻辑层)
如果 benchmark 输出为:
{ "benchmark": {"qps": 5000, "recall": 0.99, "recall_passed": true}, "anti_cheat": {"passed": false, "message": "SUSPICIOUS"} }当前打分链路仍可能把该条作为有效高分候选(因为收分脚本不看
anti_cheat)。影响
可疑结果进入 leaderboard,导致排名失真。
B)
finish解析失败仍触发会话结束代码证据(main 上)
ToolResult::Error)tool_name == "finish"触发条件
LLM 发送
finish但参数 JSON 不合法(例如缺字段、字段类型错误)。实际后果
尽管
finish未成功解析,主循环仍进入结束分支,可能跳过真实最终 benchmark,直接影响最终分数。C)
--resume仅按次数判断,已结束会话可被误续跑代码证据(main 上)
恢复条件是
tool_calls_used < tool_calls_total,未判断会话是否已通过finish正常结束。触发条件
finishtool_calls_used尚未达到上限(常见)WORK_DIR+--resume再启动实际后果
旧会话被继续执行并产生额外 benchmark/tool log,污染最终成绩。
D)
ground_truth断点续跑错误复用旧top_kchunk代码证据(main 上)
chunk 跳过条件只校验
len(existing),不校验top_k/query_id连续性。可复现命令(已记录)
先跑
top_k=2,再构造已有 chunk 后改跑top_k=1,输出仍沿用旧长度:影响
GT 与当前评测参数不一致,recall 被系统性扭曲,进而影响 QPS 是否计分与最终排名。
E)
run_eval.sh结果收集阶段字符串拼接导致失败代码证据(main 上)
python3 -c "... '${MODEL_NAME}' ..."直接将变量内联到 Python 源码字符串。可复现命令(已记录)
输出:
影响
Step 7 收集/落盘失败,导致本次跑分结果无法正确更新 leaderboard。
Expected Behavior
--resume必须识别“已 finish”的会话并拒绝续跑。top_k与query_id连续性。run_eval.sh需改为安全传参(heredoc + argv/env),避免内联拼接 Python 源码。Severity
Scoring-Critical(直接影响 benchmark 最终分数与 leaderboard 可信度)。