
我在 GPT Actions 里用 OpenAPI 调 WordPress 更新 meta,本地 curl 明明成功,但 GPT 一直报 UnrecognizedKwargsError: meta。最终发现根因不在 WordPress,而在 GPT Actions 对 OpenAPI 中 type: object 的校验“非常挑”。
如果你也遇到类似的 UnrecognizedKwargsError: xxx(尤其是 meta / params / data / requestArgs 这类“动态键值对象”字段),基本可以照这篇做。
1) 我遇到的现象(最迷惑的点)
- 我在 GPT Actions 里调用
updatePost,传参(简化):
{
"id": 113,
"meta": { "version": "v1.1.3" }
}
- GPT debug 日志里也能看到
params.meta确实传了。 - 但 Actions 返回:
UnrecognizedKwargsError: meta
- 同时
http_status: null(很像请求还没到我的服务器就被拦了)。 - 我用 curl 直接打 WordPress REST:
POST /wp/v2/posts/113+{"meta":{"version":"v1.1.3"}}- 成功更新
因此我确认:WordPress 端没问题,问题在 GPT Actions 的 schema 校验/解析。
2) 最关键的结论(社区经验 + 我这次验证)
在 GPT Actions 里:只要你声明了
type: object,就必须显式提供properties,哪怕它是空对象{}。否则很容易触发
UnrecognizedKwargsError: <字段名>。
很多人第一反应会写 additionalProperties,但在 Actions 里仅写 additionalProperties 仍可能不行。
✅ 正确模板(强烈建议照抄)
meta:
type: object
description: Post meta key-value pairs
properties: {}
additionalProperties: true
重点:
properties: {}必须是对象(字典),不能是空数组[]。
3) 我为什么会踩第二个坑:properties: {} 在生成后变成了 []
我这次是用 PHP 生成 OpenAPI JSON。然后发现一个隐藏坑:
- PHP 里的空数组
array()在 JSON 里会序列化为[] - 但 OpenAPI 的
properties期望的是对象(字典){},不是数组
所以即使我在 PHP 里写了 properties => array(),最终输出到 GPT 里会变成:
"properties": []
这会触发你看到的那种校验报错:Input should be a valid dictionary。
✅ PHP 正确写法
'properties' => (object) array(), // 确保序列化成 {}
'additionalProperties' => true,
4) 如果你也在 WordPress/REST 场景:我这次的落地修复(供参考)
以 WordPress 为例,我需要支持:
meta: 动态 key(例如version、_yoast_wpseo_title等)acf_fields: 动态 key(ACF 字段)
那么在 OpenAPI 的 Upsert schema 里,我会把这两个字段都写成:
meta:
type: object
properties: {}
additionalProperties: true
acf_fields:
type: object
properties: {}
additionalProperties: true
这样 GPT Actions 才能稳定通过 schema 校验,并把对象原样发出去。
5) 排查清单:你是不是踩了同一个坑?
当你看到 UnrecognizedKwargsError: xxx 时,按这个顺序查,基本能快速定位:
- 报错字段
xxx是不是type: object? - 该 object 是否缺少
properties? - 你是否写了
properties但最终输出变成了[](而不是{})? - 如果
additionalProperties里允许type: object的嵌套对象,嵌套对象是否也缺properties: {}? - 你的请求本地 curl 是否能成功?如果 curl 成功而 GPT 失败,基本就是 Actions 侧校验问题。
6) 可选补充:数字 key / 小数 key 的规避建议
社区里有人反馈:当 object 的 key 像 "2"、"1.3" 这种“数字/小数字符串”时也可能触发 UnrecognizedKwargsError。
如果你必须传这种 key(常见于表单系统),我更推荐你把它改造成数组键值对(最稳):
{
"fields": [
{ "key": "2", "value": "..." },
{ "key": "1.3", "value": "..." }
]
}
服务端再还原成对象结构。
7) 结论
- 最核心的修复:任何
type: object都补上properties: {},并视情况配additionalProperties: true。 - 生成器注意事项:如果你是用代码生成 schema,要保证
properties输出是{}而不是[](PHP 必须用(object)[])。 - 验证方法:curl 成功但 GPT 失败 → 优先怀疑 schema 校验;反之再查服务端。


评论