news 2026/5/12 2:20:09

OpenAI API 协议学习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenAI API 协议学习

OpenAI API 协议是 OpenAI 公司定义的一套与大语言模型交互的 HTTP API 接口规范。由于其先发优势和广泛的应用场景,这套协议已经成为事实上的行业标准

API 路径格式

https://域名地址/v1/chat/completions

认证方式

所有请求都需要在 HTTP 请求头中携带 API Key:

Authorization: Bearer <your-api-key>

输入参数

参数名称是否必填数据类型默认值取值范围作用参数说明
model✅ 必填String--指定模型确定使用哪一个具体的大模型,如gpt-4qwen-plusdeepseek-chat
messages✅ 必填Array--消息列表传递给模型的对话历史或指令,包含rolecontent
temperature❌ 选填Float1.00.0 - 2.0温度系数控制输出随机性,低值稳定,高值创意
top_p❌ 选填Float1.00.0 - 1.0核采样与 temperature 类似但算法不同,建议只调其一
max_tokens❌ 选填Integer模型最大-最大输出长度限定单次响应最大 Token 数
n❌ 选填Integer11-N生成次数为同一 Prompt 生成 n 个不同回应
stream❌ 选填Booleanfalsetrue/false流式输出是否流式返回 Token
stop❌ 选填String/Arraynull-停止标记遇到指定字符串立即停止生成
presence_penalty❌ 选填Float0-2.0 - 2.0出现惩罚正值鼓励新话题,负值减少新话题
frequency_penalty❌ 选填Float0-2.0 - 2.0频率惩罚正值减少重复,负值增加连贯
seed❌ 选填Integernull-复现种子提高结果可复现性(非 100% 保证)
tools❌ 选填Arraynull-工具定义定义可调用的外部工具/函数
tool_choice❌ 选填String/Objectauto-工具选择控制工具调用行为
response_format❌ 选填Objectnull-响应格式指定输出格式如 JSON
user❌ 选填Stringnull-用户标识用于追踪和识别终端用户

核心参数详解

1. messages(消息列表)

这是最重要的参数,定义了与模型的完整对话上下文。messages 是一个数组,每个元素都是一个消息对象,包含role(角色)和content(内容)两个核心字段。

role 字段:用来标识一段消息是谁说的、以及它在对话中的作用。最常见的三个角色是 system、user、assistant。

{ "messages": [ {"role": "system", "content": "你是一个有帮助的助手。"}, {"role": "user", "content": "你好!"}, {"role": "assistant", "content": "你好!有什么可以帮助你的吗?"}, {"role": "user", "content": "请介绍一下你自己。"} ] }

角色类型详细说明:

角色作用使用场景示例
system设定模型的行为、角色和约束放在 messages 第一位,定义 AI 的"人设"和回答风格"你是一个专业的Python编程助手,回答时请给出代码示例。"
user用户的输入或问题每次用户提问时添加到 messages 末尾"请帮我写一个快速排序算法。"
assistant模型的历史回复多轮对话时保存之前的 AI 回复,保持上下文连贯"好的,这是快速排序的Python实现..."
tool工具调用的返回结果⚠️ 仅用于 Function Calling,必须紧跟在包含 tool_calls 的 assistant 消息之后{"role": "tool", "tool_call_id": "xxx", "content": "北京今天晴,25℃"}
2. temperature(温度系数)

这是控制输出多样性的关键参数:

温度值适用场景特点
0.1 - 0.3代码生成、事实问答、法律文本高确定性、可预测
0.5 - 0.7通用对话、翻译、摘要平衡创意与准确
0.8 - 1.0创意写作、头脑风暴、营销文案高创意、多样性
> 1.0极端创意场景输出可能不可预测

建议:通常默认 0.7 即可,需要更稳定输出可设 0.3。

3. stream(流式输出)

这个参数对用户体验至关重要:

行为适用场景
false等待完整响应后一次性返回批量处理、后台任务
true逐 Token 流式返回实时对话、提升用户体验
4. tools / tool_choice(工具调用)

这是 AI Agent 开发的核心参数,用于 Function Calling:

{ "tools": [ { "type": "function", "function": { "name": "get_weather", "description": "获取指定城市的天气信息", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "城市名称" } }, "required": ["city"] } } } ], "tool_choice": "auto" }

tool_choice 选项:

  • auto:模型自动决定是否调用工具(默认)
  • none:不调用任何工具
  • required:必须调用工具
  • {"type": "function", "function": {"name": "xxx"}}:强制调用指定工具

输出参数详解

非流式输出结构

stream: false时,API 会返回完整的 JSON 响应:

{ "id": "chatcmpl-abc123", "object": "chat.completion", "created": 1699000000, "model": "qwen-plus", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "你好!我是一个AI助手...", "tool_calls": null }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 20, "completion_tokens": 50, "total_tokens": 70 } }

非流式输出参数表格

参数名称数据类型作用参数说明
idString唯一标识符本次 API 请求的唯一 ID
objectString响应对象类型固定为chat.completion
modelString模型名称实际使用的模型名称
createdInteger时间戳API 响应创建的 Unix 时间戳
choicesArray输出列表包含模型生成的所有回复选项
choices[i].indexInteger选项索引从 0 开始的索引
choices[i].messageObject消息内容包含完整的回复信息
choices[i].message.roleString角色固定为assistant
choices[i].message.contentString生成文本模型生成的全部文本内容
choices[i].message.tool_callsArray工具调用AI Agent 核心:包含要调用的函数名和参数
choices[i].finish_reasonString停止原因stop(正常结束)、length(达到 max_tokens)、tool_calls(调用工具)
usageObjectToken 统计计费的核心依据
usage.prompt_tokensInteger输入 Token输入消息消耗的 Token 数
usage.completion_tokensInteger输出 Token模型输出消耗的 Token 数
usage.total_tokensInteger总 Token总消耗 Token 数

流式输出结构

stream: true时,API 会通过 SSE (Server-Sent Events) 流式返回数据块:

data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1699000000,"model":"qwen-plus","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]} data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1699000000,"model":"qwen-plus","choices":[{"index":0,"delta":{"content":"你"},"finish_reason":null}]} data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1699000000,"model":"qwen-plus","choices":[{"index":0,"delta":{"content":"好"},"finish_reason":null}]} data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1699000000,"model":"qwen-plus","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]} data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1699000000,"model":"qwen-plus","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":20,"completion_tokens":3,"total_tokens":23}} data: [DONE]

流式输出参数表格

参数名称数据类型作用参数说明
idString唯一标识符每个 chunk 中相同,标识同一次请求
objectString响应对象类型固定为chat.completion.chunk
modelString模型名称实际使用的模型名称
createdInteger时间戳API 响应创建的 Unix 时间戳
choicesArray分块输出列表包含本次增量内容
choices[i].indexInteger选项索引从 0 开始的索引
choices[i].deltaObject增量内容本次数据块新增的内容
choices[i].delta.roleString角色仅在第一个 chunk 出现
choices[i].delta.contentString增量文本本次新增的极小部分文本,需拼接
choices[i].delta.tool_callsArray工具调用增量流式工具调用,增量式返回
choices[i].finish_reasonString停止原因仅在最后一个 chunk 返回
usageObjectToken 统计通常在最后一个 chunk 返回

finish_reason 完整说明

含义处理建议
stop正常完成输出完整,可直接使用
length达到 max_tokens 限制输出被截断,可能需要继续
tool_calls模型请求调用工具AI Agent 核心,需要执行工具并返回结果
content_filter内容被安全过滤输入或输出触发了安全策略
function_call旧版函数调用(已废弃)使用 tool_calls 替代

Anthropic Claude 的独立体系

值得注意的是,Anthropic 的 Claude 系列模型采用了自成一体的 API 协议,与 OpenAI 协议存在差异:

对比项OpenAI APIAnthropic API
端点/v1/chat/completions/v1/messages
消息格式messages数组messages+system分离
系统提示放在 messages 中单独的system参数
流式字段choices[0].delta.contentdelta.text
工具调用tool_callscontent中的tool_use

Anthropic API 示例:

{ "model": "claude-sonnet-4-20250514", "max_tokens": 1024, "system": "你是一个有帮助的AI助手。", "messages": [ {"role": "user", "content": "你好!"} ] }

兼容方案:

大多数中转站(如 New API)会自动转换协议,让你可以用 OpenAI 协议调用 Claude。但如果你直接调用 Anthropic 官方 API,需要遵循其原生协议。

参考链接:https://juejin.cn/post/7624184992536952867#heading-34

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 2:14:03

博彩业资助STEM教育:短期融资的诱惑与长期发展的陷阱

1. 项目概述&#xff1a;当教育经费与博彩业挂钩作为一名长期关注科技产业与教育政策交叉领域的研究者&#xff0c;我时常需要审视那些影响未来创新人才供给的根本性问题。最近&#xff0c;我重新翻阅了十多年前的一篇旧文&#xff0c;其核心议题在今天看来依然尖锐且极具现实意…

作者头像 李华
网站建设 2026/5/12 2:12:05

AI视频生成提示词工程:从Sora官方示例解析高质量Prompt设计

1. 项目概述&#xff1a;Sora Prompt 灵感库的诞生与价值如果你最近关注AI视频生成&#xff0c;尤其是OpenAI的Sora&#xff0c;那你大概率和我一样&#xff0c;被那些从文字描述中“无中生有”的逼真、奇幻视频所震撼。从东京街头的时尚女性&#xff0c;到咖啡杯里激战的海盗船…

作者头像 李华
网站建设 2026/5/12 2:12:05

对于服务端发送数据实现方式的思考

一般在客户端和服务端通信中&#xff0c;服务端处理完请求后&#xff0c;需要通过 send() 将响应写回客户端。但在非阻塞 IO 模型下&#xff0c;send() 并不保证一次就能把全部响应写入内核 socket 发送缓冲区。如果客户端接收较慢&#xff0c;或者服务端短时间内产生了大量响应…

作者头像 李华
网站建设 2026/5/12 2:07:45

【伊珊娜特别企划】宠物店“黑”话 5+1 之 不吐不快的行业心里话

【伊珊娜特别企划】宠物店“黑”话 51 之 不吐不快的行业心里话第一位“璀璨之星”已上线&#xff5c;保持学习状态的“怪人”。长春嘉艺宠物 & 伊珊娜认证调理店店主王碧君她说自己是个“保持学习状态的怪人”。从学美容到考A级&#xff0c;从拿奖到开学校&#xff0c;再到…

作者头像 李华
网站建设 2026/5/12 2:07:41

增材制造在国防工业的应用:从原型到关键部件生产的变革

1. 增材制造如何重塑国防工业的游戏规则如果你在军工或航空航天领域待过几年&#xff0c;就会深刻体会到“时间就是战斗力”这句话的分量。一个关键零件的交付延迟&#xff0c;可能意味着整个装备项目的停滞&#xff1b;一个原型设计的反复迭代&#xff0c;不仅烧钱&#xff0c…

作者头像 李华