这类问题我又碰上了一次。用结构化输出抽取工单号,schema 里给字段加了 pattern ^WO-[0-9]{8}$,请求回 400,原文是 Invalid schema: pattern is not supported,去掉后能跑但格式就没约束了。
第一反应是「schema 从表单校验直接复制过来」,验证下来不成立。
这类报错背后常见的原因有几处,逐个排除就行。结构化输出不支持 pattern 关键字;minLength 与 maximum 同样被拒;嵌套数组里的约束也没被放过。
上来先把不支持的关键字列出来
python -c "s=open('schema.json',encoding='utf-8').read();print([k for k in ('pattern','minLength','maximum','multipleOf') if k in s])"
移除 pattern 改用枚举与提示约束
python clean_schema.py --in schema.json --out schema_fix.json --drop pattern
随后在字段描述里写清格式要求
python -c "import json;s=json.load(open('schema_fix.json'));print(s['properties'])"
末了用一批真实工单跑校验
python validate_out.py --schema schema_fix.json --in cases.jsonl
这类问题以前遇到过,但这次的触发条件和上次不一样。
这类改动我都写进变更记录,过两周再出问题时能对上号。
恢复的判定其实很直接。请求返回 200,输出字段全部符合工单号格式,校验脚本零失败。
容易忽略的是,schema 只管结构不管语义,格式约束放在字段描述和下游校验里,比硬塞 pattern 可靠。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
