给模型一道难题,拿到一段很长的推导,再看代码能不能过样例,这还不够构成一次评测。最容易漏掉的东西往往很小:题目允许重复值吗?空输入返回什么?整数能不能装下中间结果?
10 月 19 日,OpenAI 发布低资源语言编码研究,分别讨论“构建软件”和“迁移时保持原有行为”。这里值得借用的是评测对象的划分,不能把厂商在数据库任务上的成绩换算成算法竞赛胜率。官方原文
我给这次 1024 学习练习定的目标很具体:先做出能抓住错误答案的检验器,再考虑比较模型。本文没有调用模型,也没有一张预先填好的胜负表。
五组边界,要对应五项明确约定
| 边界 | 需要先问清的问题 | 可以独立检查的东西 |
|---|---|---|
| 空输入 | 无解、空结果、抛错,选择哪一种? | 返回值是否符合题面 |
| 重复值 | 元素按集合还是多重集合处理? | 每个值的出现次数 |
| 负数 | 证明是否偷偷使用了非负前提? | 小范围穷举与反例 |
| 大整数 | 数学整数还是固定宽度整数? | 中间值范围与溢出策略 |
| 不连通图 | 未到达节点返回什么? | 独立遍历得到的可达集合 |
它们不是五道已经跑完的竞赛题,而是五种设计测试的方向。每项都需要题目规格。例如 Python 整数不会按 32 位有符号数自动回绕;把同样的输入搬进 C++ 时,要重新检查类型和运算语义。
只说“边界已覆盖”也不够。图是否允许重边、自环,排序是否要求稳定,都可能继续改变答案的定义。
一个会被样例放过的错误:排序时顺手去重
假设要求返回所有输入元素的升序排列。有人写成了sorted(set(values))。对[3, 1, 2],输出完全正确;对[2, 1, 2],它把一个 2 丢掉了。
下面的检验器检查两项性质:非降序,以及输出与输入的计数一致。还要传入输入的副本,避免候选函数原地修改数据后,把检验依据也改掉。
from collections import Counter def valid_sort_result(before, after): return ( isinstance(after, list) and Counter(before) == Counter(after) and all(x <= y for x, y in zip(after, after[1:])) ) def correct(values): return sorted(values) def loses_duplicates(values): return sorted(set(values)) cases = [[], [2, 1, 2], [-3, 0, -3], [2**40, -2**40]] for original in cases: snapshot = original.copy() assert valid_sort_result(snapshot, correct(original.copy())) counterexample = [2, 1, 2] assert not valid_sort_result( counterexample, loses_duplicates(counterexample.copy()) ) print("4 valid cases checked; duplicate-loss bug detected")该脚本已在本地 Python 3.9.6 独立运行。输出是上面最后一行字符串。它验证的是这一个检验器及构造错误,不是任何大模型的通过率。
检查性质时也要小心:只比较集合会漏掉重复次数,只比较长度会放过替换元素,只检查有序会让空列表蒙混过关。这里用两个相互补充的条件,恰好对应这道排序题的规格。
将来接入模型,哪些记录不能省
每次生成至少保留题目版本、输入约束、模型实际 ID、工具权限、可设置的推理参数、完整公开输出、测试集版本与失败原因。别名可能随服务更新改变指向,仅记录一个商业名称不足以支持重放。
生成失败、格式错误、超时、测试失败应分开记录。题目没有完成,不能从分母里删掉。比较多个预算时,还要区分“设置的上限”与“实际消耗”;一次调用没有提供的用量字段,应记缺失。
公开题库可以学习检验方法,也可能存在训练数据污染。EvalPlus 将更充分的正确性测试与效率评估分开,这种分工比一句“过了 Hard”更有解释力;但用过它的数据集,也不能证明掌握了新题。EvalPlus 项目说明
现在能下的结论
这份小练习找到了一个确定的去重错误,说明检验器至少能识别这一类违约输出。它没有证明排序实现对所有类型都正确,更没有证明模型懂不懂排序。
作为算法学习者,我希望先能回答:“这段代码错在哪里,哪个输入能重放?”有了这个答案,再讨论模型之间的差别才站得住。
本文对应 10 月 24 日稿位,不包含尚未发生的当日发布或模型盲测。