如果评测分数低于模型发布的精度,该怎么办?
可以调的参数
1. 提示词(影响最大)
可以直接修改 swebench.yaml 中的 system_template 和 instance_template。项目里已经提供了不同风格的配置供参考:
| 配置文件 | 特点 |
|---|---|
swebench.yaml |
简短提示词,无 step/cost 限制 |
swebench_backticks.yaml |
详细的工作流指引,有明确的 patch 创建/提交指引,cwd: /testbed |
swebench_xml.yaml |
XML 格式输出,适合对 XML 标签更好的模型 |
如果当前用的是默认的 swebench.yaml,强烈建议试试 swebench_backticks.yaml------它的提示词更详细,包含了分析问题→复现→修复→验证→提交的完整工作流指引,以及如何用 git diff 生成 patch 的具体说明。
2. 资源限制
| 参数 | 默认值 | 影响 |
|---|---|---|
step_limit |
swebench.yaml 为 0(无限),backticks/xml 为 250 |
太低会导致 agent 还没修完就被截断 |
cost_limit |
swebench.yaml 为 0,backticks/xml 为 3.0 |
太低会中途因预算不足退出 |
environment.timeout |
60s | 单条命令超时,长测试可能被截断 |
3. 输出格式
observation_template 控制命令输出如何返回给模型------超过 10000 字符会被截断,只显示前后 5000 字符。如果模型需要看到完整输出来做判断,可以调大阈值。
4. temperature
backticks 和 xml 变体都设置了 temperature: 0.0(确定性输出),如果你当前没设置,加上可能有帮助。
排查步骤
- 先看失败实例的 trajectory :检查是
LimitsExceeded退出(step/cost 不够)、格式解析失败、还是修复逻辑本身有问题 - 对比模型擅长的输出格式 :如果模型更擅长 XML 标签输出,用
swebench_xml.yaml;如果更擅长 markdown 代码块,用swebench_backticks.yaml - 逐步调大 step_limit 和 cost_limit,排除资源不足的干扰
- 针对特定模型微调提示词 :可以在
-c参数中叠加覆盖,例如:
bash
mini-extra swebench -m your-model \
-c swebench_backticks \
-c agent.step_limit=500 \
-c agent.cost_limit=10.0
关于提示词调整的注意事项
提示词是可以改的,但需要注意:
- SWE-bench Verified 的评测标准是测试是否通过,和提示词无关,所以调提示词不会影响评测的公平性
- 不同模型对指令的遵循能力不同,提示词需要适配模型的风格(比如有的模型需要更明确的步骤指引,有的模型在简短提示下反而表现更好)
- 建议先在小规模实例上(
--slice :10)快速迭代提示词,确认效果后再跑全量