展开本页目录
开始前准备什么
- Python 3.13+ 与独立练习目录;默认离线重放不需要 Key。
- 发起新请求时使用自己的 apizt Key;先核对当前模型权限和价格,Key 不写入教材。
- 材料为原创合成样例;相关第三方项目仅作方法参考,真实执行范围以本页记录为准。
- 核对输入
- 保存响应
- 执行本地处理
- 验收文件和负例
原始输入、真实请求与响应、业务脚本、正反例检查及已生成的结果文件;不含 Key。
1. 准备这份输入,先确定不能猜的字段
区分月租与合同总额,未知结束日不猜测。先将下面的原创合成材料保存为 input.json;不要一开始接正式客户资料。
本例与已有教程的区别:已有招标响应与发票抽取不同,本篇是合同登记和提醒文件
input.json(较长时显示节选,完整文件在资料包)
{
"as_of": "2026-10-24",
"contracts": [
{
"id": "C1",
"text": "甲方星河社,合同总额12000元,2026-01-01至2026-11-15。"
},
{
"id": "C2",
"text": "月租2000元,租期2026-03-01至2027-02-28。"
},
{
"id": "C3",
"text": "年度技术支持,开始日期2026-01-01,结束日另行约定。"
}
]
}2. 发送一次小请求,保留原始响应
下载并解压资料包,按 README 创建独立 Python 环境。python run.py 默认仅离线复核已保存回执;显式运行 python run.py --live 才发起新请求并可能计费。
模型阶段使用下面的任务约束。若存在预处理,prepared-input.json 是去重、分页收集或过滤后的真实输入;完整原始材料仍保留。识图任务发送实际 JPEG,不把人工真值放入提示词。
对应任务的请求参数说明;完整实际 request-N.json 见资料包
{
"model": "gpt-4.1-mini",
"messages": [
{
"role": "system",
"content": "只处理给定的虚构演示材料。只输出JSON,contracts数组每项id、total(字符串或null)、monthly(字符串或null)、start、end(YYYY-MM-DD或null)。不得用月租乘租期猜总额。"
},
{
"role": "user",
"content": "{\n \"as_of\": \"2026-10-24\",\n \"contracts\": [\n {\n \"id\": \"C1\",\n \"text\": \"甲方星河社,合同总额12000元,2026-01-01至2026-11-15。\"\n },\n {\n \"id\": \"C2\",\n \"text\": \"月租2000元,租期2026-03-01至2027-02-28。\"\n },\n {\n \"id\": \"C3\",\n \"text\": \"年度技术支持,开始日期2026-01-01,结束日另行约定。\"\n }\n ]\n}"
}
],
"temperature": 0,
"max_tokens": 1024,
"provider": {
"sort": "success_rate"
},
"response_format": {
"type": "json_object"
}
}3. 执行本例的本地处理,模型字段还要再验算
以下节选来自这次实际执行的 verify-task.py 分支。完整函数和辅助方法均在资料包;运行 python run.py 会使用原始回执重放这段业务操作,而不是让模型自己宣布成功。
程序到期清单只列C1;未按月租推算合同总额
verify-task.py · contract-ledger 分支节选,需在完整脚本上下文运行
contracts = {row['id']: row for row in output['contracts']}
as_of = datetime.fromisoformat(data['as_of'])
due = [key for key, row in contracts.items() if row['end'] and 0 <= (datetime.fromisoformat(row['end']) - as_of).days <= 30]
check('程序到期清单只列C1', due == ['C1'])
check('未按月租推算合同总额', contracts['C2']['total'] is None and contracts['C3']['end'] is None)
normalized = copy.deepcopy(output['contracts'])
for row in normalized:
for key in ['total', 'monthly']:
if row[key] is not None:
row[key] = str(Decimal(str(row[key]).removesuffix('元')))
save_csv(folder / 'contract-ledger.csv', normalized)
result = {'contracts': normalized, 'raw_api_contracts': output['contracts'], 'due_in_30_days': due, 'external_reminders_sent': 0}4. 查看真实结果、文件与验收记录
本次 9/9 项通过。模型返回与最终业务结果分开保存;以下是本地处理后的 result.json。
最后一次实测时间:2026-10-24T15:16:38.373439+00:00;HTTP 200;请求型号 gpt-4.1-mini;返回型号 gpt-4.1-mini;本次返回用量 339。中断或超时不会补造用量,多个尝试不合并成一次成功。
实际产物:checks.json、contract-ledger.csv、result.json。
| 检查项 | 本次结果 |
|---|---|
| 真实 apizt 响应 HTTP 200 | 通过 |
| 原始响应 content 可直接解析 JSON | 通过 |
| 事实检查:contracts.0.total | 通过 |
| 事实检查:contracts.1.total | 通过 |
| 事实检查:contracts.1.monthly | 通过 |
| 事实检查:contracts.2.end | 通过 |
| 明确错误的本地反例被验收规则拒绝 | 通过 |
| 程序到期清单只列C1 | 通过 |
| 未按月租推算合同总额 | 通过 |
- 检查项
- 真实 apizt 响应 HTTP 200
- 本次结果
- 通过
- 检查项
- 原始响应 content 可直接解析 JSON
- 本次结果
- 通过
- 检查项
- 事实检查:contracts.0.total
- 本次结果
- 通过
- 检查项
- 事实检查:contracts.1.total
- 本次结果
- 通过
- 检查项
- 事实检查:contracts.1.monthly
- 本次结果
- 通过
- 检查项
- 事实检查:contracts.2.end
- 本次结果
- 通过
- 检查项
- 明确错误的本地反例被验收规则拒绝
- 本次结果
- 通过
- 检查项
- 程序到期清单只列C1
- 本次结果
- 通过
- 检查项
- 未按月租推算合同总额
- 本次结果
- 通过
verified/result.json(节选)
{
"contracts": [
{
"id": "C1",
"total": "12000",
"monthly": null,
"start": "2026-01-01",
"end": "2026-11-15"
},
{
"id": "C2",
"total": null,
"monthly": "2000",
"start": "2026-03-01",
"end": "2027-02-28"
},
{
"id": "C3",
"total": null,
"monthly": null,
"start": "2026-01-01",
"end": null
}
],
"raw_api_contracts": [
{
"id": "C1",
"total": "12000元",
"monthly": null,
"start": "2026-01-01",
"end": "2026-11-15"
},
{
"id": "C2",
"total": null,
"monthly": "2000元",
"start": "2026-03-01",
"end": "2027-02-28"
},
{
"id": "C3",
"total": null,
"monthly": null,
"start": "2026-01-01",
"end": null
}
],
"due_in_30_days": [
"C1"
],
"external_reminders_sent": 0
}5. 换自己的材料时,先检查失败分支
本地反例用于验证业务边界,已在检查表中明确标记;不能把本地构造的错误状态写成网关真实故障。原始回执及失败尝试不删除。
本例是小样验证;替换输入后必须重新检查字段、事实和实际费用。
只把本篇标注的任务作为本次验收范围。第三方软件、未测模型、工具调用能力和真实用户数据都需要另行验证;没有调用视频生成模型。
- 程序到期清单只列C1
- 未按月租推算合同总额
解压目录中运行;第一条离线,第二条显式发起新请求
python run.py
# 安全设置自己的 tokenba_API_KEY 后,才执行下面这一条
python run.py --live怎样确认已经完成
- 真实 apizt 响应 HTTP 200
- 原始响应 content 可直接解析 JSON
- 事实检查:contracts.0.total
- 事实检查:contracts.1.total
- 事实检查:contracts.1.monthly
- 事实检查:contracts.2.end
- 明确错误的本地反例被验收规则拒绝
- 程序到期清单只列C1
- 未按月租推算合同总额
常见问题
AI 合同台账只看 HTTP200 就完成了吗?
还需要按本页独立规则检查事实、缺失项及最终文件。模型阶段成功与本地工作流成功分别记录。
可以不登录其他平台运行本例吗?
可以。本例使用 apizt API 和本地 Python 脚本;离线复核也无需 API Key。第三方软件的原生 UI、插件和账号权限不在本次验收范围。
更换输入后还能沿用本页的通过结果吗?
不能。原始事实断言只适用于本页合成材料。替换输入后必须同步调整 expected、业务规则与负例,再检查输出。


