展开本页目录
开始前准备什么
- 独立练习目录及Python 3.14;系统与Node依赖以README为准。
- 离线重放无需Key;新请求使用自己的apizt Key,先核对模型权限和当前价格。
- 原创合成材料,不需要登录第三方平台账号。
- 先看文件
- 按步骤操作
- 对照真实结果
- 离线或模型复跑
默认离线重放;包含完整失败尝试与本地检查,不含Key。
1. 核对本例材料与目标文件
区别补货/库存求和,新增批次消耗与短缺状态。需人工重叠复核。
先下载合成材料在独立目录练习。原始文件、模型输入与验收答案分别保留;本地核对答案不发送给模型。
input.json(节选)
{
"rule": "先到期先出,已经过期的库存不能分配。",
"as_of": "2026-10-15",
"batches": [
{
"id": "B1",
"sku": "A",
"expires": "2026-10-10",
"qty": 3
},
{
"id": "B2",
"sku": "A",
"expires": "2026-10-20",
"qty": 4
},
{
"id": "B3",
"sku": "A",
"expires": "2026-11-01",
"qty": 5
}
],
"orders": [
{
"id": "O1",
"sku": "A",
"qty": 6
},
{
"id": "O2",
"sku": "A",
"qty": 5
}
]
}2. 按顺序完成这项具体操作
本次实际使用Python 3.14,依赖版本固定在资料包。需要LibreOffice或Node的案例请先按README安装对应运行时。python run.py读取真实旧响应完成本地处理;只有显式--live才发新请求。
- 1. 读取 source-batches.csv 与 source-orders.csv,核对as_of为2026-10-15,B1已过期,B2/B3仍可用于两张领料需求。
- 2. 让 apizt 识别FEFO政策和过期批次ID,保存实际返回,再由程序按到期日与批次ID排序分配。
- 3. 逐单减少可用库存:先使用B2,再使用B3;每条分配保留订单号、批次、数量和到期日,不允许分配已过期B1。
- 4. 回读 batch-allocation.csv,检查O1得到6件;再打开 shortage.csv,确认O2仍缺2件且缺口没有被模型说明覆盖。
- 5. 检查全部批次余量非负、B1未出库,已分配数加缺口等于订单需求;库存不足时保留真实缺口,不自动改需求量。
独立练习目录 · 默认仅离线复核
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
python run.py3. 对照真正发送的请求
只处理给定原创虚构材料,只输出JSON。识别policy为FEFO,expired_batches列出在as_of之前到期的批次ID;不要分配数量,数量由程序计算。 输出结构:{"policy": "string", "expired_batches": ["string"]}
网页实验台只执行这一步模型字段检查。原生文件写入、坐标/公式/格式回读及负例验收由下载包负责。
request-1.json(图片Base64省略,原文件在下载包)
{
"model": "gemini-2.5-flash-lite",
"messages": [
{
"role": "system",
"content": "严格只输出单个JSON对象,不要Markdown代码围栏,不要解释。只处理给定原创虚构材料,只输出JSON。识别policy为FEFO,expired_batches列出在as_of之前到期的批次ID;不要分配数量,数量由程序计算。 输出结构:{\"policy\": \"string\", \"expired_batches\": [\"string\"]}"
},
{
"role": "user",
"content": "任务约束(只输出JSON对象,不用代码围栏):\n只处理给定原创虚构材料,只输出JSON。识别policy为FEFO,expired_batches列出在as_of之前到期的批次ID;不要分配数量,数量由程序计算。 输出结构:{\"policy\": \"string\", \"expired_batches\": [\"string\"]}\n待处理合成材料:\n{\"rule\": \"先到期先出,已经过期的库存不能分配。\", \"as_of\": \"2026-10-15\", \"batches\": [{\"id\": \"B1\", \"sku\": \"A\", \"expires\": \"2026-10-10\", \"qty\": 3}, {\"id\": \"B2\", \"sku\": \"A\", \"expires\": \"2026-10-20\", \"qty\": 4}, {\"id\": \"B3\", \"sku\": \"A\", \"expires\": \"2026-11-01\", \"qty\": 5}], \"orders\": [{\"id\": \"O1\", \"sku\": \"A\", \"qty\": 6}, {\"id\": \"O2\", \"sku\": \"A\", \"qty\": 5}]}"
}
],
"temperature": 0,
"max_tokens": 1024,
"provider": {
"sort": "success_rate"
},
"response_format": {
"type": "json_object"
}
}4. 查看原生处理代码与实际文件
下面节选来自本次实际执行的workflow.py分支,需要结合完整脚本运行。模型输出不能代替文件解析器或业务验算。
具体产物:batch-allocation.csv、shortage.csv、result.json、checks.json、preview.html。
workflow.py · 本例分支节选
asof = data['as_of']
remaining = {b['id']: b['qty'] for b in data['batches']}
allocation = []
short = []
for order in data['orders']:
need = order['qty']
eligible = sorted((b for b in data['batches'] if b['sku'] == order['sku'] and b['expires'] >= asof), key=lambda b: (b['expires'], b['id']))
for batch in eligible:
take = min(need, remaining[batch['id']])
if take:
allocation.append({'order': order['id'], 'batch': batch['id'], 'quantity': take, 'expires': batch['expires']})
remaining[batch['id']] -= take
need -= take
if not need:
break
if need:
short.append({'order': order['id'], 'missing_quantity': need})
check('过期批次B1没有出库', all((r['batch'] != 'B1' for r in allocation)))
check('先分配B2再B3', [r['batch'] for r in allocation] == ['B2', 'B3', 'B3'])
check('缺口两件保留', short == [{'order': 'O2', 'missing_quantity': 2}])
check('库存没有负数', all((x >= 0 for x in remaining.values())))
cout('batch-allocation.csv', allocation)
cout('shortage.csv', short)
result = {'allocations': allocation, 'shortages': short, 'remaining': remaining}5. 对照真实结果和检查表
实测2026-10-25T07:51:06.197544+00:00,HTTP200;请求gemini-2.5-flash-lite,返回gemini-2.5-flash-lite。本次6/6项检查通过,指本例执行及验收机制通过,不代表所有模型字段零误差。
最后一次返回用量354tokens;1份尝试记录的已知用量合计354。失败记录保留,用量缺失不按0计,本文不推算实际金额。
| 实际检查 | 结果 |
|---|---|
| 真实apizt API响应HTTP200 | 通过 |
| 模型结构化事实与原始材料一致 | 通过 |
| 过期批次B1没有出库 | 通过 |
| 先分配B2再B3 | 通过 |
| 缺口两件保留 | 通过 |
| 库存没有负数 | 通过 |
- 实际检查
- 真实apizt API响应HTTP200
- 结果
- 通过
- 实际检查
- 模型结构化事实与原始材料一致
- 结果
- 通过
- 实际检查
- 过期批次B1没有出库
- 结果
- 通过
- 实际检查
- 先分配B2再B3
- 结果
- 通过
- 实际检查
- 缺口两件保留
- 结果
- 通过
- 实际检查
- 库存没有负数
- 结果
- 通过
result.json · 原生处理后实际结果
{
"allocations": [
{
"order": "O1",
"batch": "B2",
"quantity": 4,
"expires": "2026-10-20"
},
{
"order": "O1",
"batch": "B3",
"quantity": 2,
"expires": "2026-11-01"
},
{
"order": "O2",
"batch": "B3",
"quantity": 3,
"expires": "2026-11-01"
}
],
"shortages": [
{
"order": "O2",
"missing_quantity": 2
}
],
"remaining": {
"B1": 3,
"B2": 0,
"B3": 0
}
}6. 替换输入前,先确认这些边界
本例只验证合成材料和本地原生文件;不连接真实客户数据,不代表第三方SaaS已运行。
修改材料后应重新制定事实断言和反例。识别错误率、混淆矩阵或拒答类教程允许保留模型实际错误;检查通过指计算和处理正确。没有调用视频模型。
怎样确认已经完成
- 真实apizt API响应HTTP200
- 模型结构化事实与原始材料一致
- 过期批次B1没有出库
- 先分配B2再B3
- 缺口两件保留
- 库存没有负数
常见问题
AI 库存 批次 有效期怎么开始?
读取 source-batches.csv 与 source-orders.csv,核对as_of为2026-10-15,B1已过期,B2/B3仍可用于两张领料需求。按本页顺序继续,先用下载包离线重放,再替换自己的材料。
网页试跑和下载包有什么区别?
网页只复跑模型字段,不生成全部原生文件;资料包包含实际原生处理和本地验收。
这次通过结果适用于其他材料吗?
本例只验证合成材料和本地原生文件;不连接真实客户数据,不代表第三方SaaS已运行。


