messages,从 choices[0].message.content 读取回复。
需要 Anthropic Messages 或 Gemini 原生的消息结构时,改用 Claude 协议或 Gemini 协议;三种协议的差异对照见文本生成 API。
发送请求
Authorization: Bearer 认证,内容类型为 application/json。先在令牌管理创建 API Key,计费模式选择按量优先(推荐)或按量计费,并确认它所在的令牌分组可以调用所选模型:
python -m pip install openai。
- cURL
- Python
流式输出
在请求中加入"stream": true,服务端会通过 SSE(server-sent events)边生成边返回。
每个数据块是一行以 data: 开头的 JSON,新增的文本在 choices[0].delta.content;最后一行是 data: [DONE],表示流已经结束。
- cURL
- Python
-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 与业务层同时重试。
向支持团队反馈时,提供请求时间、模型、接口路径和脱敏后的错误信息,不要附上密钥。