各大厂商大模型 API 格式对比:OpenAI、Claude、Gemini 与国内模型


各大厂商大模型 API 格式对比

目前,有三种API在人工智能驱动的产品开发中占据主导地位:OpenAI 的 GPT-5 系列、Anthropic 的 Claude Opus 4.6,以及 Google 的 Gemini 3 Pro,以及国内的Kimi、DeepSeek、Qwen也凭借价格的优势在某些领域大放异彩。目前对于开发者来说,真正重要的差异不再是以那个模型的性能最好来评判,而是通过自己的任务和价格来综合考虑。
目前主流的大模型 API 以 OpenAI 的 Chat Completions 和 Anthropic 的 Messages API 影响力最大。由于 OpenAI 起步最早,其 messages 格式已成为事实上的行业标准,国内绝大多数厂商都兼容这一格式。
OpenAI 在生态系统复杂度、微调能力以及编码任务的吞吐量方面表现领先。Anthropic 则在推理测试、提示缓存效率以及智能编码质量方面表现出色。Gemini 则在原生多模态处理、上下文窗口的成熟度以及低价格水平下的 token 性价比方面具有优势。

本文将按时间线梳理各家 API 的演进与核心差异,帮助你在实际开发中快速判断该用哪种格式。

1. 起点:OpenAI Chat Completions API(2023.03)

2023 年 3 月,OpenAI 发布 ChatGPT 并同步推出 Chat Completions API,迅速成为行业事实标准。

请求示例

{
  "model": "gpt-4o",
  "messages": [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Hello!"}
  ]
}

核心设计

  • 使用 messages 数组表示完整对话历史
  • 每条消息由 role(system / user / assistant / tool)和 content 组成
  • 模型通过 model 字段指定
  • 返回路径:choices[0].message.content

这个设计虽然简单,但因为 ChatGPT 的巨大影响力,迅速成为“USB 接口”般的事实标准——不一定最优,但兼容性最好。后续加入 Function Calling 时,只是在 messages 中新增了 tool 角色和 tools 参数,整体骨架没有改变。

curl 示例

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "Hello!"}
    ]
  }'

主要请求参数

必填:

  • model:模型 ID(如 gpt-4o、o 系列等)
  • messages:消息数组。每条包含 role 和 content(字符串或 content parts 数组)。支持 system/developer、user、assistant、tool 等角色。
    可选参数:
  • max_tokens / max_completion_tokens:最大生成 token 数,如果超过就会以length方式截断。
  • temperature:采样温度(0–2,越高越随机)
  • top_p:核采样
  • n:生成多少个候选(默认 1)
  • stream:是否流式
  • stop:停止序列
  • presence_penalty / frequency_penalty:惩罚已出现内容
  • tools:工具定义数组
  • tool_choice:控制是否/如何调用工具(none / auto / required / 指定工具)
  • response_format:输出格式(text / json_object / json_schema 结构化输出)
  • seed:尽量确定性
  • logprobs / top_logprobs:返回 log 概率
  • user:终端用户标识(防滥用)
  • metadata、service_tier、reasoning 相关参数(视模型)等

返回格式的主要字段

{
  "id": "chatcmpl-...",
  "object": "chat.completion",
  "created": 1234567890,
  "model": "...",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "回复文本",
        "tool_calls": [...],   // 若有工具调用
        "refusal": null
      },
      "finish_reason": "stop",  // stop | length | tool_calls | content_filter | ...
      "logprobs": null
    }
  ],
  "usage": {
    "prompt_tokens": ...,
    "completion_tokens": ...,
    "total_tokens": ...,
    "prompt_tokens_details": {...},
    "completion_tokens_details": {...}  // 可能含 reasoning_tokens 等
  },
  "system_fingerprint": "...",
  "service_tier": "..."
}

2. Anthropic Messages API(2024.03)

2024 年 3 月,Anthropic 发布 Claude 系列模型时,没有完全跟随 OpenAI,而是设计了自己的 Messages API。

请求示例

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

核心差异

对比项 OpenAI Anthropic
system 提示词 放在 messages 数组里(role=system) 独立顶层字段 system
max_tokens 可选 必填
认证方式 Authorization: Bearer x-api-key + anthropic-version
返回内容路径 choices[0].message.content content[0].text
content 格式 字符串或数组 始终是数组(天然支持多模态)

Anthropic 把 system 独立出来,认为它是对模型行为的全局指令,而不是对话历史的一部分。这种设计在多轮对话和长上下文场景下更清晰,也便于后续优化。

curl 示例

curl https://api.anthropic.com/v1/messages \
  -H "content-type: application/json" \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-sonnet-4-20250514",
    "max_tokens": 1000,
    "messages": [
      {
        "role": "user",
        "content": "What should I search for to find the latest developments in renewable energy?"
      }
    ]
  }'

主要请求参数

必填:

  • model:模型 ID(如 claude-sonnet-4-5-…)
  • max_tokens:最大生成 token 数(必填)
  • messages:消息数组。每条 {role: “user”|”assistant”, content: string | content blocks[]}

常用可选参数:

  • system:系统提示(字符串或文本块数组,独立于 messages)
  • temperature:0–1(部分新模型可能限制)
  • top_p / top_k:采样控制(top_k 是 Anthropic 特色)
  • stop_sequences:自定义停止序列
  • stream:是否流式
  • tools:工具定义(name + description + input_schema)
  • tool_choice:控制工具使用策略
  • metadata:如 user_id
  • thinking:扩展思考相关配置(部分模型)
  • cache_control:提示缓存控制
  • 其他:output_config(结构化输出)、service_tier、container 等高级字段

内容块类型丰富:text、image、tool_use、tool_result、thinking、document 等。

返回格式

{
  "id": "msg_...",
  "type": "message",
  "role": "assistant",
  "model": "...",
  "content": [
    {
      "type": "text",
      "text": "回复文本"
    }
    // 也可能有 tool_use、thinking 等块
  ],
  "stop_reason": "end_turn",  // end_turn | max_tokens | tool_use | stop_sequence | refusal | ...
  "stop_sequence": null,
  "usage": {
    "input_tokens": ...,
    "output_tokens": ...,
    "cache_creation_input_tokens": ...,
    "cache_read_input_tokens": ...
  }
}

3. OpenAI Responses API(2025.03)

2025 年 3 月,OpenAI 推出 Responses API,定位为 Chat Completions 的下一代替代方案。

请求示例

{
  "model": "gpt-4o",
  "instructions": "你是一个有用的助手。",
  "input": "你好"
}

主要变化

  • messages → input(可以是字符串或数组)
  • system 提示词改为独立的 instructions 字段
  • 返回路径变为 output[0].content[0].text
  • 内置了 web_search、file_search 等工具能力
  • 上下文管理支持通过 previous_response_id 自动串联,无需手动维护完整历史

可以看出,OpenAI 自己也开始把 system 指令从对话历史中独立出来,向 Anthropic 的设计靠拢。

4. Google Gemini API

Google Gemini 提供了原生格式,同时也支持 OpenAI 兼容接口。原生格式如下:

{
  "system_instruction": {
    "parts": [{"text": "你是一个有用的助手。"}]
  },
  "contents": [
    {
      "role": "user",
      "parts": [{"text": "你好"}]
    }
  ]
}

核心特点

  • 使用 contents 而不是 messages
  • 每条消息的内容必须放在 parts 数组中(为多模态设计)
  • system 提示词使用独立的 system_instruction
  • 角色只有 user 和 model 两种
  • 模型名称写在 URL 路径中,而不是请求体里
  • 认证支持两种方式:
    • Query 参数:?key=$GEMINI_API_KEY
    • Header:x-goog-api-key: $GEMINI_API_KEY(更推荐)

parts 设计天然支持多模态(文本、图片、音频、视频可自由组合),但纯文本场景下会显得稍显啰嗦。

curl 示例(原生格式)

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -X POST \
  -d '{
    "contents": [{
      "parts": [{"text": "Write a story about a magic backpack."}]
    }]
  }'

注意:模型 ID(如 gemini-2.0-flash)直接写在路径中。

5. 国内主流大模型

国内厂商几乎全部兼容 OpenAI Chat Completions 格式,只需更换 base_url 和 API Key 即可:

平台 兼容 OpenAI 格式 端点
阿里云百炼(通义千问) ✅ https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
DeepSeek ✅ https://api.deepseek.com/v1/chat/completions
智谱 AI(GLM) ✅ https://open.bigmodel.cn/api/paas/v4/chat/completions
月之暗面(Kimi) ✅ https://api.moonshot.cn/v1/chat/completions

这也是 OpenAI 格式成为事实标准的最大价值——学会一套,国内模型几乎通吃。

6. 快速对比总结

特性 OpenAI Chat Completions Anthropic Messages OpenAI Responses Gemini 原生
对话字段 messages messages input contents
system 位置 messages 内 独立 system 独立 instructions 独立 system_instruction
内容格式 string / array 始终 array string / array parts 数组
模型位置 body body body URL 路径
国内兼容性 ✅ 广泛 ❌ ❌ ❌
推荐场景 通用、国内模型 直接调 Claude OpenAI 新能力 需要原生多模态能力

如何选择模型

7. 该学哪个格式?

针对不同阶段开发者的建议:

  1. 刚入门 → 先掌握 OpenAI Chat Completions
    它是事实标准,国内平台全部兼容,学一次就能到处用。

  2. 需要调用 Claude → 必须了解 Anthropic Messages API
    Claude 能力强,且 system 独立设计更清晰。

  3. Responses API 和 Gemini 原生格式
    知道有这回事即可,真正用到时再查文档。

  4. 做 Agent 开发
    Function Calling(工具调用)是基础中的基础,建议优先在 OpenAI 格式下熟练掌握。

8. 一个有意思的趋势

后出的 API 格式几乎都把 system 提示词从对话历史中独立出来:

  • Anthropic → system
  • OpenAI Responses → instructions
  • Gemini → system_instruction

这不是巧合。实践中发现,把 system 和用户消息混在 messages 里,在多轮长对话时容易被“挤”到很远的位置,模型可能逐渐忽略它。独立出来后语义更清晰,也更利于服务端优化。

Chat Completions 把 system 放在 messages 里,其实是早期的历史包袱——就像 JavaScript 的 var,能用,但新设计已不再推荐。

9. 官方文档入口

平台 文档地址
OpenAI Chat Completions platform.openai.com/docs/api-reference/chat
OpenAI Responses platform.openai.com/docs/api-reference/responses
Anthropic Messages docs.anthropic.com/en/api/messages
Google Gemini ai.google.dev/api
阿里云百炼 help.aliyun.com/zh/model-studio
DeepSeek api-docs.deepseek.com
智谱 AI open.bigmodel.cn/dev/api
月之暗面 platform.moonshot.cn/docs/api

参考链接

  1. OpenAI Chat Completions 官方文档
  2. OpenAI Responses API
  3. Anthropic Messages API
  4. Google Gemini API
  5. Agent开发


文章作者: ZhangZhengYu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ZhangZhengYu !
评论
 上一篇
Vibe Coding 实战流程 Vibe Coding 实战流程
如何清晰描述需求、让 AI 先出方案再拆小任务,并审查验证它生成的代码。
2026-05-07
下一篇 
Go代码如何测试? Go代码如何测试?
如何保证自己的代码质量?如何对上线后的项目所出现的bug进行提前预演,而不是等待部署上线后崩溃,这就是测试的必要性,每个人都要对自己写的代码负责!
  目录