openai 1.55 调 Responses 接口,收到 function_call 后提交 type 为 function_call_output、output 为 ok 的项,返回 400,原文 Missing required parameter: input[1].call_id,input 里只放了这一项。

一开始怀疑是「output 传了对象而不是字符串」,查了一圈,方向不对。

真正麻烦的地方在于,几个原因的现象几乎一样。提交时漏了 call_id 字段。另一种情况是把函数名当成了 call_id。

还有一种情况,input 里没有带上原始的 function_call 项。

上来先把 response.output 里的调用项打印出来

python -c "import json;print(json.load(open('resp.json'))['output'])"

再往下按 call_id 回填并保留原始 function_call

python smoke_responses.py --echo-input true

接着用 curl 发一版最小可复现请求

curl -s https://api.openai.com/v1/responses -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' -d @input.json

等前面都确认过,再在提交前加一次字段完整性校验

python validate_input.py --require call_id,output

这台环境是别人交接的,不少默认值被动过,只能一项项核。

同事提醒我看一下最近一次发布,时间点确实对得上。

恢复的判定其实很直接。回填后返回 200,output 里出现新的 message,历史中 function_call 与 function_call_output 的 call_id 一一对应。

补一句。Responses 的 input 是有状态的列表,工具结果不是单独提交,而是追加到 input 里,缺了原始调用项或 call_id 都会报同样的 400。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189