跳转到主要内容
OpenAI 协议即 OpenAI Chat Completions 格式,是老张API最通用的文本调用方式:发送 messages,从 choices[0].message.content 读取回复。 需要 Anthropic Messages 或 Gemini 原生的消息结构时,改用 Claude 协议或 Gemini 协议;三种协议的差异对照见文本生成 API。

发送请求

请求使用 Authorization: Bearer 认证,内容类型为 application/json。先在令牌管理创建 API Key,计费模式选择按量优先(推荐)或按量计费,并确认它所在的令牌分组可以调用所选模型:
使用 Python 示例时,先执行 python -m pip install openai。
示例关闭了 SDK 自动重试,由应用决定失败后是否重发。更换模型时,从模型与价格总表复制完整 ID;不同模型接受的可选参数可能不同。

流式输出

在请求中加入 "stream": true,服务端会通过 SSE(server-sent events)边生成边返回。 每个数据块是一行以 data: 开头的 JSON,新增的文本在 choices[0].delta.content;最后一行是 data: [DONE],表示流已经结束。
cURL 的 -N 关闭输出缓冲,数据块一到就显示。输出类似下面这样(省略了 id、model 等字段):
逐块读取时注意:
  • 把每块的 delta.content 按到达顺序拼接,就是完整回复;
  • 有的数据块没有 content(例如只携带结束原因的最后一块),也可能没有 choices,跳过即可;
  • finish_reason 出现在最后一个有效数据块中,含义与非流式响应相同;
  • Python SDK 收到 data: [DONE] 后会自动结束 for 循环。连接在 [DONE] 之前断开时,已收到的文本不完整。

请求字段

必需字段只有 model 和 messages。先完成最小请求,再按模型说明添加可选配置。 模型可能拒绝不适用的参数。遇到参数错误时,回到最小请求,再依据错误正文调整字段和值。

消息角色与历史

user 表示用户输入,assistant 表示模型回复。后续请求需要显式携带必要的历史消息,普通 Chat Completions 请求不会自动续接上一轮对话。 下面是文本对话的消息排列方式:
系统指令可使用 system 角色,部分模型采用 developer;具体角色以该模型说明为准。发送图片时,content 改为内容块数组,写法见图片理解 API。 对于支持工具调用的模型,响应可能包含 tool_calls,而 content 为空。应用执行所需函数后,按以下方式回传结果:
  • 保留模型发出调用的那条 assistant 消息;
  • 追加 tool 角色的消息,并带上对应的 tool_call_id。

读取响应

非流式响应的关键字段如下,省略了请求标识与使用量等字段:
  • choices[].message.content:普通文本回复。
  • choices[].message.tool_calls:模型请求的工具调用,适用于支持该能力的模型。
  • choices[].finish_reason:结束原因;stop 通常表示正常结束,length 表示达到长度限制。
  • usage:返回时可用于统计用量,实际费用查看调用日志。
文本为空时,先查看工具调用和结束原因。输出因长度限制中断时,调大该模型支持的输出预算,或缩短输入;不要把空文本直接当成网络错误。

选择模型

模型 ID、价格和可用分组以模型与价格总表为准,能否调用取决于 API Key 所在的令牌分组。常用文本模型支持的协议与价格见文本生成 API;o3-pro 系列只支持 Responses,调用方法见 OpenAI 模型接入。 选型时不要照搬固定的“最佳模型”榜单,用自己业务中有代表性的样本比较:
  • 任务完成率和事实准确性;
  • 指令遵循与结构化输出是否稳定;
  • 需要工具调用时,调用参数是否完整;
  • 响应延迟和失败率;
  • 相同样本下的实际用量与费用(在调用日志中查看)。

错误处理

修正参数或权限问题后再发起请求。对于临时限流和服务错误,可以有限次数地退避重试;超时后先在调用日志中确认请求状态,避免 SDK 与业务层同时重试。 向支持团队反馈时,提供请求时间、模型、接口路径和脱敏后的错误信息,不要附上密钥。

相关文档