GPT Actions 报 UnrecognizedKwargsError:我的踩坑、定位、修复记录(含通用模板)

吾爱分享 编程开发 AI领域评论7字数 857阅读2分51秒阅读模式
GPT Actions 报 UnrecognizedKwargsError:我的踩坑、定位、修复记录(含通用模板)插图

我在 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 时,按这个顺序查,基本能快速定位:

  1. 报错字段 xxx 是不是 type: object
  2. 该 object 是否缺少 properties
  3. 你是否写了 properties 但最终输出变成了 [](而不是 {})?
  4. 如果 additionalProperties 里允许 type: object 的嵌套对象,嵌套对象是否也缺 properties: {}
  5. 你的请求本地 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 校验;反之再查服务端。

 
吾爱分享

发表评论