知识目录 / 大模型协议

大模型基础协议格式解析

系统介绍大语言模型通信中的三种主流协议格式——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 格式请求示例:

json
{
  "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 格式请求示例:

json
{
  "model": "gpt-4",
  "input": [
    {"role": "user", "content": "解释量子计算"}
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "search_web",
        "description": "搜索网页"
      }
    }
  ]
}

响应示例:

json
{
  "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 格式请求示例:

json
{
  "model": "claude-3-opus-20240229",
  "max_tokens": 1024,
  "system": "你是一个 helpful 的助手。",
  "messages": [
    {"role": "user", "content": "你好,请介绍一下自己。"}
  ]
}

Anthropic 响应示例:

json
{
  "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_turnmax_tokenstool_use),OpenAI 使用 finish_reason

三、重点:OpenAI Chat Completions 格式的设计哲学

OpenAI 的 Chat Completions API 能够成为事实标准,源于其优秀的设计:

  1. 对话优先(Conversation-First):将交互自然地建模为消息序列,完美契合人类对话模式。
  2. 角色显式化:通过 role 字段明确区分系统指令、用户输入和模型输出,使得:
    • 系统提示(System Prompt) 可以独立控制,不影响对话历史。
    • 对话历史管理 清晰,可以轻松截断、总结或选择性保留消息。
    • 安全与合规 更容易实施,例如可以对 system 消息进行更严格的审核。
  3. 为扩展而生:从最初简单的 content 字符串,扩展到支持 Function Calling(tool_calls)、多模态(content 为数组),协议本身具有良好的向后兼容性。
  4. 开发者体验:结构化的 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
生态成熟度 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐

理解这些协议的区别与联系,是高效利用大模型能力、构建健壮应用的第一步。在接下来的文章中,我们将深入探讨协议中至关重要的角色系统工具调用机制


系列文章导航:

  1. 大模型基础协议概览:OpenAI Chat Completions、OpenAI Responses与Anthropic Messages格式解析(本文)
  2. 上下文角色深度解析:System、User、Assistant与Developer
  3. Function Calling协议与调用过程深度剖析

本文为“大模型底层通信协议深究”系列第一篇。