当前位置: 首页 > news >正文

OpenAI vs Anthropic API 对比:响应体、请求体、消息格式与工具调用

在开发 AI 应用时,我们经常需要对接不同的大模型 API。其中 OpenAI 的 Chat Completions API 和 Anthropic 的 Messages API 是目前最流行的两种。虽然它们功能相似,但 请求/响应格式、消息角色、工具调用流程 存在显著差异。本文将从实际开发角度,为你详细对比两者,并提供可直接使用的代码示例。


一、响应体格式区别

OpenAI 响应结构

{"id": "chatcmpl-xxx","object": "chat.completion","created": 1234567890,"model": "gpt-4","choices": [{"index": 0,"message": {"role": "assistant","content": "回复内容"},"finish_reason": "stop"}],"usage": { ... }
}

Anthropic 响应结构

{"id": "msg_xxx","type": "message","role": "assistant","content": [{ "type": "text", "text": "回复内容" }],"model": "claude-3-sonnet-...","stop_reason": "end_turn","usage": { ... }
}
特性 OpenAI Anthropic
消息位置 choices[0].message 顶层 role + content
content 类型 字符串(或数组) 数组(纯文本也需数组形式)
结束原因字段 finish_reason stop_reason
判断依据 存在 "choices" → OpenAI 存在 "type": "message" → Anthropic

二、请求体格式区别

OpenAI 请求示例

{"model": "gpt-4","messages": [{ "role": "system", "content": "你是一个助手" },{ "role": "user", "content": "你好" }],"temperature": 0.7,"max_tokens": 1000
}

Anthropic 请求示例

{"model": "claude-3-sonnet-20240229","system": "你是一个助手","messages": [{ "role": "user", "content": "你好" }],"temperature": 0.7,"max_tokens": 1000   // 必填!
}
特性 OpenAI Anthropic
系统提示 messages 中,role: "system" 顶层 system 字段
消息角色 system, user, assistant, tool user, assistant
max_tokens 可选,有默认值 必填,无默认值
content 类型 字符串(可扩展为数组) 必须是数组(如 [{"type":"text","text":"..."}]
角色顺序约束 无强制交替 严格交替,且第一条必须是 user
特有参数 presence_penalty, frequency_penalty top_k
停止词字段 stop stop_sequences

三、消息角色与格式注意事项

✅ OpenAI 支持的角色

  • system:设定助手行为(可出现在任意位置,但通常放在开头)
  • user:用户输入
  • assistant:模型回复
  • tool:工具调用结果

常见错误写法

  • ❌ 使用非规范角色名(如 function_call
  • ❌ 缺少 rolecontent 字段
  • ❌ 连续两个 user 或两个 assistant(虽不强制,但影响逻辑)

✅ Anthropic 支持的角色

  • userassistant 仅限这两种。系统指令放在顶层的 system 字段。

严格约束

  • 消息不是以 user 开头 → 报错
  • 没有严格交替 → 报错
  • content 是字符串而非数组(某些模型会失败)
  • ❌ 最后一条 assistant 消息的内容以空白字符结尾 → 特殊失败场景
  • ❌ 使用旧版 \n\nHuman: 格式 → 不兼容 Messages API

四、工具调用(函数调用)完整示例

4.1 OpenAI 格式

第一次请求:定义工具,模型返回 tool_calls

{"model": "gpt-4o","messages": [{ "role": "system", "content": "You are a helpful assistant." },{ "role": "user", "content": "北京天气怎么样?" }],"tools": [{"type": "function","function": {"name": "get_weather","description": "获取指定城市的天气","parameters": {"type": "object","properties": {"city": { "type": "string", "description": "城市名称" }},"required": ["city"]}}}],"tool_choice": "auto"
}

模型返回(简化):

{"choices": [{"message": {"role": "assistant","content": null,"tool_calls": [{"id": "call_abc123","type": "function","function": {"name": "get_weather","arguments": "{\"city\":\"北京\"}"}}]}}]
}

第二次请求:回传工具执行结果

{"model": "gpt-4o","messages": [{ "role": "system", "content": "You are a helpful assistant." },{ "role": "user", "content": "北京天气怎么样?" },{"role": "assistant","content": null,"tool_calls": [{ "id": "call_abc123", "type": "function", "function": { "name": "get_weather", "arguments": "{\"city\":\"北京\"}" } }]},{"role": "tool","tool_call_id": "call_abc123","content": "{\"temperature\": \"22°C\", \"condition\": \"晴\"}"}],"tools": [ /* 同第一次定义 */ ]
}

关键点:工具结果使用 role: "tool",通过 tool_call_id 关联。


4.2 Anthropic 格式

第一次请求:定义工具,模型返回 tool_use

{"model": "claude-3-sonnet-20240229","system": "You are a helpful assistant.","messages": [{"role": "user","content": [{ "type": "text", "text": "北京天气怎么样?" }]}],"tools": [{"name": "get_weather","description": "获取指定城市的天气","input_schema": {"type": "object","properties": {"city": { "type": "string", "description": "城市名称" }},"required": ["city"]}}],"tool_choice": { "type": "auto" },"max_tokens": 1024
}

模型返回:

{"id": "msg_xyz789","type": "message","role": "assistant","content": [{ "type": "text", "text": "好的,我来查询北京的天气。" },{"type": "tool_use","id": "toolu_01AbC","name": "get_weather","input": { "city": "北京" }}],"stop_reason": "tool_use"
}

第二次请求:回传工具执行结果

{"model": "claude-3-sonnet-20240229","system": "You are a helpful assistant.","messages": [{"role": "user","content": [{ "type": "text", "text": "北京天气怎么样?" }]},{"role": "assistant","content": [{ "type": "text", "text": "好的,我来查询北京的天气。" },{"type": "tool_use","id": "toolu_01AbC","name": "get_weather","input": { "city": "北京" }}]},{"role": "user","content": [{"type": "tool_result","tool_use_id": "toolu_01AbC","content": "{\"temperature\": \"22°C\", \"condition\": \"晴\"}"}]}],"tools": [ /* 同第一次定义 */ ],"max_tokens": 1024
}

关键点

  • 工具结果放在 user 消息中,类型为 tool_result
  • 必须保留之前的 assistant 完整 content
  • 消息仍然严格交替 user/assistant(工具结果本质上是一条新的 user 消息)。

五、总结与建议

对比维度 OpenAI Anthropic
设计哲学 messages 是统一的时序容器 分离系统指令与对话历史
角色丰富度 更灵活(4种角色) 简洁(仅2种核心角色)
严格程度 宽容,不强制交替 严格,强制交替且首消息为 user
工具调用 独立 tool 角色 + tool_calls 字段 tool_use / tool_result 块嵌入 content
易错点 角色名拼错、缺少字段 内容不是数组、未交替、尾随空格
http://www.jsqmd.com/news/788201/

相关文章:

  • AI医学图像分割与XR三维重建:从CNN到Transformer的实战技术解析
  • 深度定制Linux内核:从LTS版本选择到硬件优化实践
  • Godot Script IDE插件:GDScript开发效率革命,从编辑器到轻量IDE
  • Python项目模板:从零搭建标准化开发脚手架的最佳实践
  • 2026年靠谱的全自动四边封湿巾机推荐 - mypinpai
  • 2026年铁道技师学校官方电话节假日能打通吗 - mypinpai
  • 无数据收集AI:在线学习与信号生成技术解析与实践
  • 基因组学算法在量化交易中的应用:序列比对与演化优化实战
  • CursorGothic 字体深度解析:从设计理念到全开发环境配置指南
  • 宠物手套湿巾机好用吗?硕源机械告诉你 - mypinpai
  • 分析德高瓦阳光房制作哪家专业山西推荐公司 - mypinpai
  • CONFIDERAI:为可解释规则模型注入统计可靠性的保形预测实践
  • 终极解决方案:六音音源修复版完整使用指南
  • Claw Friends UX:为AI助手构建去中心化社交网络,实现精准上下文感知
  • 阿里AgentEvolver框架解析:让AI智能体实现自我进化的三大核心机制
  • 费用合理的人力资源咨询机构 - mypinpai
  • TVA重塑智慧城市安防新范式(3)
  • 构建生产级Attio CLI工具:TypeScript实现与自动化集成指南
  • 翔鹰变速箱专业维修,品牌靠谱吗? - mypinpai
  • ARM PMU性能监控单元架构与配置详解
  • 收藏必备!AI小白程序员进阶路线图,从入门到架构师全核验指南
  • 第三部分-Dockerfile与镜像构建——14. 镜像构建优化
  • CANN驱动DCMI内存信息API
  • TVA重塑智慧城市安防新范式(4)
  • 2026年靠谱的知名的智能制造专业培训机构推荐 - mypinpai
  • NeuralBridge:AI工作流轻量级集成枢纽的设计与实战
  • 低资源语言文本简化实战:用生成式AI攻克荷兰语简化难题
  • 科发豆制品设备多少钱,性价比高吗 - mypinpai
  • 如何在Blender中完美处理3MF文件:从零开始的完整指南 [特殊字符]
  • FastAgent插件开发指南:构建标准化智能体工具生态