Chat Completions、Responses API 与 Claude Messages API:别只看名字,要看输入结构

Chat Completions、Responses API 与 Claude Messages API:别只看名字,要看输入结构

这三个接口都能让模型“回一句话”,但它们的设计重心并不一样。Chat Completions 更像经典聊天入口;Responses API 更像 OpenAI 新一代统一入口;Claude Messages API 则坚持清晰的 message history 组织方式,并强调 stateless 调用。

一句话先分清

如果把一次模型调用拆成“输入怎么组织、模型怎么执行、输出怎么返回”,三者差异会非常明显。

横向对比表

不追求列满参数,只列实际写代码最容易踩的点。

维度OpenAI Chat CompletionsOpenAI Responses APIClaude Messages API
接口入口POST /chat/completionsPOST /responsesclient.messages.create(...),底层是 Anthropic Messages API
核心输入字段messagesinput,可以是 string,也可以是结构化 input item 列表messages,通常由user/assistant消息构成
上下文管理通常由调用方传入历史 messages可直接传 input,也可结合conversation等机制管理响应归属文档明确强调stateless,多轮时每次发送完整 history
工具调用支持tool_calls;旧function_call已被替代工具系统更集中,支持 built-in tools、MCP tools、custom tools 等支持 tool use 和 computer use,但使用时仍围绕 Messages API 组织
多模态输入支持 text、image、audio、file 等内容部件,具体看模型能力把 text、image、file input 放进同一 response 创建流程支持 text 和 image;image 可通过base64urlfilesource 提供
适合场景旧项目、普通聊天、轻量 function calling新项目、agent、RAG、多模态、内置工具、复杂输出希望自己掌控 history、prompt 缓存、上下文拼接的 Claude 应用

怎么选:别问“哪个 API 更高级”,先问项目会不会变复杂

接口选择不是信仰问题,是后续维护成本问题。

我的判断是:只要你预期项目会加入工具调用、文件检索、视觉输入、结构化输出,就不要把架构绑死在纯 messages 聊天模型上。

选择建议

  • 已有 OpenAI Chat Completions 项目:不用立刻重写。先保持稳定,等你要加 agent、多模态或工具链时,再迁移到 Responses API。
  • 全新 OpenAI 项目:优先 Responses API。普通文本任务也能做,后续扩展空间更大。
  • Claude 项目:按 Messages API 的规则维护 conversation history;不要默认服务端会帮你记住上下文。
  • 跨厂商封装:内部可以抽象成统一的turns,但外层适配时要保留各自的差异,比如 OpenAI Responses 的input item和 Claude 的content block

代码速查:同一个“你好”,三种写法

下面代码是为了看结构,不是为了堆参数。实际项目里再加 error handling、timeout、retry、日志和 token 统计。

OpenAI Chat Completions

from openai import OpenAI client = OpenAI() completion = client.chat.completions.create( model="gpt-5.5", messages=[ {"role": "system", "content": "你是一个简洁的技术助手。"}, {"role": "user", "content": "用一句话解释 API。"} ] ) print(completion.choices[0].message.content)

OpenAI Responses API

from openai import OpenAI client = OpenAI() response = client.responses.create( model="gpt-5.5", input="用一句话解释 API。" ) print(response.output_text)

Claude Messages API

import anthropic client = anthropic.Anthropic() message = client.messages.create( model="claude-opus-4-8", max_tokens=1024, messages=[ {"role": "user", "content": "用一句话解释 API。"} ] ) print(message.content[0].text)

Responses API + built-in tool 思路

from openai import OpenAI client = OpenAI() response = client.responses.create( model="gpt-5.5", input="查找项目文档后,总结接口变更点。", tools=[ {"type": "file_search"} ] ) print(response.output_text)