最终成果:核对人工标注的期望与候选输出,保留逐项失败,避免凭单次好回答选版本。
这是一门可离线完成的Python实践课,使用标准库,不需要模型密钥。例子均为教学虚构,不是现实业务数据或真实效果证据。
1. 先看成果
输入示例:
{
"cases": [
{
"id": "a",
"expected": "是",
"actual": "是"
}
]
}
预期输出:
{
"total": 1,
"passed": 1,
"missing": 0,
"failures": []
}
2. 准备与首次运行
准备Python 3.10或更高版本。完整解压项目包,在包含verify.py的文件夹打开终端。Windows可用py -3代替python,macOS/Linux可用python3。
python --version
python verify.py
起始代码尚未实现,首次看到7项FAIL和NotImplementedError属于正常起点;语法或导入错误会给中文说明且不生成报告。先提交这份失败报告也可以。
3. 输入输出契约
输入cases为最多100个对象,id唯一非空最多80字符;expected为最多2000字符的字符串;actual为同样长度字符串或null。逐字比较,不去空白、不忽略大小写。输出total、passed、missing和failures;actual为null计missing且失败,failures按输入顺序列失败ID。这只评估已保存输出,不调用模型、不证明语义质量。
solve(payload)接收一个JSON对象并返回上述JSON结果。任何契约规定的结构或类型错误都应抛ValueError,不返回貌似成功的部分结果。
4. 三段实现与分层提示
1. 固定评测集
核对ID、预期和空集合。
关注用例:pass、empty
-
第1层:没有固定预期,比较两版时依据是什么?
-
第2层:ID唯一,预期须先由人确定。
-
第3层:验证全部样例,再逐条比较expected与actual。
2. 保留失败原因
区分缺失输出与有输出但错误。
关注用例:fail、missing、mixed
-
第1层:没有输出能算作正确拒答吗?
-
第2层:null表示缺失,空字符串是实际输出。
-
第3层:先累计missing,再用严格相等判断passed并收集失败ID。
3. 保持评价口径
验证大小写和空白都参与比较。
关注用例:case、spaces
-
第1层:逐字匹配能说明回答有用吗?
-
第2层:本课的精确匹配只适合确定格式的任务。
-
第3层:不要偷偷strip或lower;另用人工记录解释语义局限。
先写下自己的预期,再展开一层提示并修改。verify.py默认展示字段差异,仍卡住可加--explain查看诊断。
5. 用本地网页检查自己的输入
python run.py
打开终端显示的本地地址(默认http://127.0.0.1:8870),修改输入并运行,保存输出。端口已占用可运行python run.py --port 8871;不需要停止其他程序。
参考演示可运行python run.py --reference,参考输出不表示你自己的实现通过。
6. 组合挑战与评分
python verify.py --suite challenge --report challenge-report.json
4项挑战各25分,输入、错误类型及所有输出字段符合约定才得该项分数。完整用例与评分依据在project.json的learning.cases中。只表示这组输出符合约定,不证明独立能力。
-
空字符串不是缺失:空字符串能与空预期精确匹配。
-
失败列表保持原序:失败顺序用于追溯评测集。
-
换行不可忽略:换行也是契约的一部分。
-
拒绝重复样例ID:同ID不能代表两个评测样例,整批抛ValueError。
7. 自主扩展与提交
新增一种人工评价维度,例如有依据或可执行,保存两版已有输出的对照;不要把精确匹配率称为综合质量。
至少自建一个测试,先写预期,再运行并保存实际结果。在项目页上传报告,填写两道解释题,展开自主扩展记录,填写需求、JSON输入/预期/实际及修订说明。扩展内容不自动算分,申请人工评价后由人核对。
-
解释题:为什么null、空字符串和错误字符串应分开?
-
解释题:自建一个语义相同却逐字失败的样例,解释你会怎样补充人工评价。
报告默认私有;申请后管理员才可看该次报告、项目链接、复盘与扩展证据,可撤回共享。服务器复核报告输出,不执行上传代码、不访问作品链接。修订时保留失败与新报告,不覆盖旧记录。
8. 局限与后续
本项目训练上述确定性规则,不调用模型,不代表完整业务系统。如需以后接入模型,先保留基线,单独明确成本与调用授权、构造错误输出并人工核对,不把本站参考结果当作模型效果。