大模型基础协议格式解析
系统介绍大语言模型通信中的三种主流协议格式——OpenAI Chat Completions、OpenAI Responses和Anthropic Messages,重点解析OpenAI Chat Completions格式的设计理念、消息结构及三者的核心差异。
在大语言模型(LLM)的应用开发中,理解其底层通信协议是构建稳定、高效应用的基础。本文将系统介绍三种主流的协议格式:OpenAI Chat Completions格式、OpenAI Responses格式和Anthropic Messages格式,并重点解析 OpenAI Chat Completions 格式的设计哲学。
一、协议演进背景
早期的大模型 API 主要采用简单的“补全”(Completion)模式,即输入一段文本,模型续写输出。随着模型能力增强和应用场景复杂化,需要更结构化的通信方式来支持多轮对话、角色区分和工具调用等需求,从而演化出不同的协议格式。目前,OpenAI 和 Anthropic 作为两大主要厂商,各自推出了具有代表性的协议标准。
二、三种核心协议格式
1. OpenAI Chat Completions 格式(主流标准)
这是目前最主流、最广泛采用的协议格式,由 OpenAI 的 Chat Completions API 推广并成为事实标准。
核心特点:
- 基于消息列表(Messages):请求体的核心是一个
messages数组,每个元素代表对话中的一条消息。 - 角色系统:每条消息必须包含
role字段,明确标识消息来源。常见角色包括:system:系统指令,设定助手行为、人格或上下文。user:用户输入。assistant:模型(助手)的回复。function:函数调用的返回结果(在 Function Calling 场景中)。
- 结构清晰:请求体通常还包含
model(指定模型)、temperature(控制随机性)、max_tokens(最大输出长度)等参数。
OpenAI Chat Completions 格式请求示例:
{
"model": "gpt-4",
"messages": [
{"role": "system", "content": "你是一个 helpful 的助手。"},
{"role": "user", "content": "你好,请介绍一下自己。"},
{"role": "assistant", "content": "你好!我是一个人工智能助手..."}
],
"temperature": 0.7
}
优势:
- 直观模拟人类对话,易于理解和调试。
- 角色分离便于实现复杂的对话流控制。
- 生态成熟,几乎所有主流模型服务商都兼容或参考此格式。
2. OpenAI Responses 格式(新一代API)
OpenAI Responses 格式是 OpenAI 推出的新一代API,旨在提供更强大、更灵活的交互能力,支持更复杂的场景。
核心特点:
- 响应式设计:专注于模型生成结果的结构化描述,响应体包含更丰富的元数据。
- 多轮对话支持:虽然名为“Responses”,但同样支持多轮对话,通过
previous_response_id等参数关联上下文。 - 增强的工具调用:对 Function Calling 的支持更加完善,支持并行工具调用。
- 流式响应优化:对流式响应(Streaming)有更好的支持,适合实时交互场景。
OpenAI Responses 格式请求示例:
{
"model": "gpt-4",
"input": [
{"role": "user", "content": "解释量子计算"}
],
"tools": [
{
"type": "function",
"function": {
"name": "search_web",
"description": "搜索网页"
}
}
]
}
响应示例:
{
"id": "resp_abc123",
"output": [
{
"type": "message",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "量子计算是一种利用量子力学原理..."
}
]
}
],
"usage": {"input_tokens": 5, "output_tokens": 450, "total_tokens": 455}
}
与 Chat Completions 格式的区别:
- 设计理念:Chat Completions 模拟对话;Responses 更侧重于生成结果的结构化描述。
- 上下文管理:Responses 通过
previous_response_id管理上下文,而不是完整的 messages 数组。 - 响应结构:Responses 的响应结构更复杂,支持多种输出类型(文本、工具调用等)。
- 适用场景:Responses 适合需要更精细控制输出格式、支持复杂工具链的场景。
3. Anthropic Messages 格式(Claude专用)
Anthropic Messages 格式是 Anthropic 公司为其 Claude 模型设计的专用协议,与 OpenAI 的格式有显著差异。
核心特点:
- 系统指令分离:系统指令通过单独的
system参数传递,而不是作为 messages 数组的一部分。 - 内容块结构:消息内容使用
content字段,可以是字符串或内容块数组,支持多模态。 - 工具使用:通过
tools参数定义工具,模型响应中包含tool_use内容块。 - 停止原因:响应中包含
stop_reason字段,明确指示停止原因。
Anthropic Messages 格式请求示例:
{
"model": "claude-3-opus-20240229",
"max_tokens": 1024,
"system": "你是一个 helpful 的助手。",
"messages": [
{"role": "user", "content": "你好,请介绍一下自己。"}
]
}
Anthropic 响应示例:
{
"id": "msg_abc123",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "你好!我是一个人工智能助手..."
}
],
"model": "claude-3-opus-20240229",
"stop_reason": "end_turn",
"usage": {"input_tokens": 25, "output_tokens": 450}
}
与 OpenAI 格式的区别:
整体上两者是类似的,但有下面这些细节上的差异:
- 系统指令处理:Anthropic 将系统指令放在单独的
system参数中,OpenAI 将其作为 messages 数组的一部分。 - 内容结构:Anthropic 使用内容块数组,与OpenAI 的 content 在多模态处理上稍有不同。
- 工具调用:Anthropic 的工具调用通过
tool_use内容块实现,与 OpenAI 的tool_calls字段不同。 - 停止原因:Anthropic 提供详细的
stop_reason(如end_turn、max_tokens、tool_use),OpenAI 使用finish_reason。
三、重点:OpenAI Chat Completions 格式的设计哲学
OpenAI 的 Chat Completions API 能够成为事实标准,源于其优秀的设计:
- 对话优先(Conversation-First):将交互自然地建模为消息序列,完美契合人类对话模式。
- 角色显式化:通过
role字段明确区分系统指令、用户输入和模型输出,使得:- 系统提示(System Prompt) 可以独立控制,不影响对话历史。
- 对话历史管理 清晰,可以轻松截断、总结或选择性保留消息。
- 安全与合规 更容易实施,例如可以对 system 消息进行更严格的审核。
- 为扩展而生:从最初简单的
content字符串,扩展到支持 Function Calling(tool_calls)、多模态(content为数组),协议本身具有良好的向后兼容性。 - 开发者体验:结构化的 JSON 格式易于解析和生成,文档和示例丰富。
四、如何选择协议?
- 构建聊天机器人或复杂多轮对话:首选 OpenAI Chat Completions 格式,生态最成熟。
- 需要更精细的输出控制和复杂工具链:考虑 OpenAI Responses 格式,适合高级场景。
- 使用 Anthropic Claude 模型:必须使用 Anthropic Messages 格式,与 Claude 模型深度集成。
- 跨平台兼容:如果需要支持多个模型提供商,可以设计适配层,统一转换为内部格式。
五、协议对比总结
| 特性 | OpenAI Chat Completions | OpenAI Responses | Anthropic Messages |
|---|---|---|---|
| 系统指令 | messages 数组中的 system 角色 |
input 数组中的 system 角色 |
单独的 system 参数 |
| 上下文管理 | 完整的 messages 数组 |
previous_response_id 关联 |
完整的 messages 数组 |
| 工具调用 | tool_calls 字段 |
tool_calls 字段 |
tool_use 内容块 |
| 响应结构 | choices 数组 |
output 数组 |
content 内容块数组 |
| 停止原因 | finish_reason |
stop_reason |
stop_reason |
| 生态成熟度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
理解这些协议的区别与联系,是高效利用大模型能力、构建健壮应用的第一步。在接下来的文章中,我们将深入探讨协议中至关重要的角色系统和工具调用机制。
系列文章导航:
- 大模型基础协议概览:OpenAI Chat Completions、OpenAI Responses与Anthropic Messages格式解析(本文)
- 上下文角色深度解析:System、User、Assistant与Developer
- Function Calling协议与调用过程深度剖析
本文为“大模型底层通信协议深究”系列第一篇。