给 function calling 的 create_order 工具写 schema,日期字段加了 format: date-time,OpenAI 返回 400,原文 Invalid schema for function 'create_order': 'format' is not permitted,删掉就通,但模型开始返回 2024/1/5 这种日期。

一开始怀疑是「模型没有格式约束就会混用斜杠与中文日期」,查了一圈,方向不对。

这类报错背后常见的原因有几处,逐个排除就行。strict 模式只支持 JSON Schema 的一个子集。少数情况下是format 不在允许的关键字里,被直接拒绝。

还有一种情况,描述里没写清格式,示例也没给。

第一件事是把报错里的 schema 路径打出来定位字段

python -c "import json;print(json.load(open('schema.json'))['properties']['date'])"

随后用 pattern 替代 format 约束日期

python -c "import json;print(json.dumps({'type':'string','pattern':'^[0-9]{4}-[0-9]{2}-[0-9]{2}$'}))"

接着在描述里补一个合法示例

python -c "import json;d=json.load(open('schema.json'));d['properties']['date']['description']='格式 2026-11-13';json.dump(d,open('schema2.json','w'))"

等前面都确认过,再用一次真实调用验证 schema 是否被接受

python tool_schema_probe.py --schema schema2.json --model gpt-4o-mini

同一份数据我导出了两份,一份留底,一份拿来试。

改完先别撤,确认这几项。请求返回 200,工具参数里的日期全部符合 YYYY-MM-DD,校验层没有一条失败。

strict 模式支持的 schema 关键字比想象中少,能用 pattern 和描述解决的,就不要依赖 format。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189