展开本页目录
开始前准备什么
- Python 3 标准库;下载材料中不需要安装依赖。
- 只使用虚构题目和作者 baseline,不给模型参考实现。
- 准备无密钥、无网络、无业务数据的隔离执行环境,人工审查后才导入候选代码。
- 读函数合同
- 检查错误 baseline
- 同题生成修复
- 审查改动范围
- 运行独立测试
20个虚构任务、参考答案、可信测试与空记录模板。没有新模型成绩,不会调用API。
包含 allowedOutputFile、完整 prompt 与边界输入。
先审查候选,再在隔离环境运行;不把作者参考通过当模型成绩。
完整文件树、baseline 与 reference 用途及结果记录规则。
第一道题:别让数量解析丢掉精度与负号
这份作者编写的 baseline 使用局部匹配和 float,会丢掉精度、漏掉负号并接受尾部杂文。题目要求完整匹配并返回 Decimal,不能用“正常例子有结果”代替修复。
quantity.py:有已知错误的 baseline
import re
def parse_quantity(text):
match = re.search(r"([\d.]+)\s*(kg|g|个)", str(text))
if not match:
raise ValueError("invalid quantity")
return float(match.group(1)), match.group(2)两道修复题的合同先固定
重试题只计算列表,不发送请求、不 sleep,也不改变实际 API 重试策略。数量题只解析字符串,不涉及交易或自动写入。
| 任务 | 正确行为 | 必须拒绝 |
|---|---|---|
| parse_quantity | “1.250 kg”返回 (Decimal("1.250"), "kg");保留原单位 | bool、科学计数、NaN、千位逗号、尾部说明 |
| retry_delays | (4,100,250) 返回 [100,200,250,250],从 base 开始 | bool / float、超出轮次范围、cap 小于 base |
- 任务
- parse_quantity
- 正确行为
- “1.250 kg”返回 (Decimal("1.250"), "kg");保留原单位
- 必须拒绝
- bool、科学计数、NaN、千位逗号、尾部说明
- 任务
- retry_delays
- 正确行为
- (4,100,250) 返回 [100,200,250,250],从 base 开始
- 必须拒绝
- bool / float、超出轮次范围、cap 小于 base
把约束连同 baseline 一起发给模型
- 只允许 quantity.py 或 retry.py 对应的一份文件,禁止改测试、安装依赖和加入联网逻辑。
- 每次修复保存模型原始输出与最终文件;不要把人工修复后的代码记作模型一次通过。
- 同一型号尝试第二次时新建 trialId,并保留第一次失败。
代码修复任务 prompt
仅修复 quantity.py 的 parse_quantity(text),输出该文件完整内容,不修改测试。输入必须是 str;去除两端空白,数字使用 ASCII 0-9,支持可选正负号、整数或小数;小数点前后必须有数字,单位仅 g、kg、个。数字与单位之间可以有空白。返回 (Decimal, str) 元组,保留 Decimal 精度与输入小数位(例如 1.250);不得单位换算。非法类型抛 TypeError,非法文本抛 ValueError。拒绝布尔值、科学计数、NaN、千位逗号及末尾说明。使用 Python 标准库,不访问网络、不写其他文件。测试由作者独立编写,不从候选实现反推
reference 是作者实现,用来验证测试本身;baseline 应在同一套测试下失败。第三条会导入候选文件,测试脚本不会自动隔离网络或文件系统,必须先审查并由执行环境隔离。
| 检查 | 题目中的具体例子 | 不通过的回答 |
|---|---|---|
| 类型 | Decimal,而不是 float | 数值看起来对但类型错 |
| 精度 | 12345678901234567890.001kg | 先转 float 再转 Decimal |
| 完整匹配 | 2 kg approx 应拒绝 | 只截取前半段 |
| 类型负例 | True 不能当 1 次重试 | 用 isinstance(x,int) 接受 bool |
| 轮次起点 | 首项为 base_ms | 首项乘了 2 |
- 检查
- 类型
- 题目中的具体例子
- Decimal,而不是 float
- 不通过的回答
- 数值看起来对但类型错
- 检查
- 精度
- 题目中的具体例子
- 12345678901234567890.001kg
- 不通过的回答
- 先转 float 再转 Decimal
- 检查
- 完整匹配
- 题目中的具体例子
- 2 kg approx 应拒绝
- 不通过的回答
- 只截取前半段
- 检查
- 类型负例
- 题目中的具体例子
- True 不能当 1 次重试
- 不通过的回答
- 用 isinstance(x,int) 接受 bool
- 检查
- 轮次起点
- 题目中的具体例子
- 首项为 base_ms
- 不通过的回答
- 首项乘了 2
离线验证命令
python3 code/test_contracts.py --candidate-dir code/reference
python3 code/test_contracts.py --candidate-dir code/baseline QuantityContractTests
# 人工审查后,在隔离环境测试模型候选目录
python3 code/test_contracts.py --candidate-dir /absolute/path/reviewed-candidate代码可运行、测试通过、只改允许文件分开验收
下载材料的离线检查验证作者参考与 baseline,不是任何模型成绩。本批未执行模型生成的任意代码;用自己的候选测试后,才将 passed 填入记录。
| 层次 | 记录 | 失败边界 |
|---|---|---|
| 完成状态 | 响应已完整结束 | 截断代码不可记通过 |
| 改动范围 | 只含允许的修复文件 | 重写测试不能算通过 |
| 功能合同 | 12 项测试与各项失败原因 | 少跑一组不能给全套通过 |
| 执行安全 | 人工审查与隔离环境已就绪 | 候选含命令、联网或额外读写先阻止 |
- 层次
- 完成状态
- 记录
- 响应已完整结束
- 失败边界
- 截断代码不可记通过
- 层次
- 改动范围
- 记录
- 只含允许的修复文件
- 失败边界
- 重写测试不能算通过
- 层次
- 功能合同
- 记录
- 12 项测试与各项失败原因
- 失败边界
- 少跑一组不能给全套通过
- 层次
- 执行安全
- 记录
- 人工审查与隔离环境已就绪
- 失败边界
- 候选含命令、联网或额外读写先阻止
避免“测试都绿了”的假阳性
- 模型把所有输入转换成字符串,正常输入看似可用,类型错误没有得到拒绝。
- 模型删除负例或只运行容易的测试,覆盖范围减少。
- 代码修复依赖某个未声明第三方包,换环境后失效。
- 用两道小函数的结果推断大型仓库修改能力;两者任务范围不同。
怎样确认已经完成
- 作者 baseline 确实在独立测试中失败,作者 reference 通过。
- 测试没有被模型修改,运行范围和失败原因保留。
- 候选代码人工审查后才在隔离环境执行。
- 报告说明小函数修复范围,没有声称完整代码 Agent 已验收。
常见问题
能不能自动运行模型输出的代码?
本材料不提供自动运行链路。先审查允许文件、依赖和副作用,再在无密钥与无业务数据的隔离环境导入候选。
作者 reference 通过是否代表模型也会通过?
不代表。reference 只用于核对作者测试合同,模型必须交付自己的文件并接受同一测试。
这两道题能说明哪个编程模型最强吗?
只能比较这两项受控修复。仓库理解、多文件修改、回归与工具循环需要另外的数据集。