先看现象。抽取订单明细数组,要求每项含 sku、qty、price,模型偶尔返回只有 sku 和 qty 的对象,pydantic 报 items.2.price Field required,整张订单校验失败。

排查方向其实有限,先把可能性排一排。schema 里 items 的 required 只写在顶层。另一种情况是原文本身缺价格 模型没有编造。

另外,提示词没说缺失时该填什么。

少数情况下是校验策略是全量失败 不是逐项降级。

第一件事是找出缺字段的原文片段

python -c "import json;print([x for x in json.load(open('r.json'))['items'] if 'price' not in x])"

补全 items 的 required 并给出缺失占位

python patch_schema.py --items-required sku,qty,price

校验改成逐项容错 缺失记 null 并打标

python validate.py --mode lenient --mark-missing

汇总缺失率做人工复核清单

python report.py --field price --out miss.csv

中间停过一次,把已经改的东西回滚干净,再重新来一遍。

同样的操作我在测试机上先走了一遍,线上只做验证过的部分。

恢复的判定其实很直接。整单不再因单项缺字段失败,缺失项被标记进入复核队列,缺失率降到 1% 以下。

全量失败是最差的策略,明细类数据本来就应该允许局部缺失。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189