很多刚入门 AI Agent 开发的朋友都会遇到一个困惑:
"我看网上的教程,有的代码里写着
role: 'tool',有的却写着type: 'tool_result'。明明都是让 AI 查天气,为什么写法差这么多?我是不是学错了?"
其实,你没学错。这是因为 OpenAI 和 Anthropic (Claude) 两家巨头制定了两种完全不同的"沟通规则"。
如果不理解底层的逻辑差异,你在构建复杂 Agent 时很容易陷入状态混乱或 Bug 频发的困境。今天,我们不讲枯燥的 JSON 结构,用三个生活故事带你彻底看懂这两者的区别,并告诉你该如何选择。
一、 核心哲学:微信群聊 vs 正式邮件
为了直观理解,我们把 大模型(LLM) 想象成你的 "助理小王",把 你的代码/外部工具 想象成 "外部数据库"。
🟢 OpenAI 模式:像是"微信群聊"
在 OpenAI 的规则里,对话就像一个微信群。群里主要有三种角色:
-
老板 (User):发号施令的人。
-
实习生 (Assistant):干活的人。
-
系统机器人 (Tool):一个专门用来贴查询结果的"马甲"。
当需要查数据时:
-
老板问:"北京天气咋样?"
-
实习生说:"我需要查一下。"(附带一个隐藏的申请单)
-
你(代码) 去查了数据库,拿到结果"晴天"。
-
关键步骤:你不能直接用老板或实习生的账号说话。你必须切换成 "系统机器人" 账号,在群里发一条消息:
系统机器人 (Tool):引用申请 结果是:晴天。
-
实习生看到这条系统消息,回答老板:"北京是晴天。"
💡 特点:引入了一個第三方角色 (tool) 来传递数据。逻辑简单粗暴,像聊天一样自然。
🔵 Anthropic (Claude) 模式:像是"正式邮件往来"
在 Claude 的规则里,世界很简单,只有两方在通信:
-
客户 (User):包括老板,以及外部世界反馈的信息。
-
顾问 (Assistant):也就是实习生。
这里没有"系统机器人"!
当需要查数据时:
-
客户问:"北京天气如何?"
-
顾问回复了一封邮件,但这封邮件是个 "包裹",里面包含:
-
文字:"我正在查询..."
-
附件 (Tool Use):一张《工具调用单》,单号 ID: 1001。
-
-
你(代码) 看到调用单,去查数据库,拿到结果"晴天"。
-
关键步骤:既然没有第三人,谁把结果告诉顾问?是你(客户)。
你以用户的身份发新消息,但这消息也是个 "包裹",里面包含:
- 附件 (Tool Result):一张《工具回执单》,单号 ID: 1001,内容:晴天。
-
顾问看到回执单,对应上了自己的申请单,回答:"北京是晴天。"
💡 特点:只有两个角色。工具结果被视为 "用户提供的补充材料",通过结构化块(Block)进行严格匹配。
二、 场景实战:为什么区别很重要?
场景 1:简单问答
-
OpenAI:纯文本交换。
-
Claude:纯文本交换。
-
结论:没区别。新手感觉不到差异。
场景 2:复杂多模态(看图 + 查数据)
假设任务:"看这张衣服图片,查查同款多少钱。"
-
OpenAI 的痛点:
你需要把图片转成 Base64 字符串,小心翼翼地嵌入 JSON。如果同时还有工具调用,消息结构会变得非常臃肿,容易出错。就像在微信里既要发语音、又要发文件、还要发定位,操作割裂。
-
Claude 的优势:
Claude 的消息是一个 "万能文件夹(Content Array)" 。
你发给它的消息包里可以同时装:
-
📄 文本块:"这件多少钱?"
-
🖼️ 图片块:图片数据
-
📎 工具回执块:之前的查询结果
-
这种结构极其清晰,无论混合多少种媒体类型,都不会乱。
三、 深度对比:优劣势与选型
全屏复制
| 维度 | OpenAI 标准 (Chat Completions) | Anthropic 标准 (Messages API) |
|---|---|---|
| 角色数量 | 3个:User, Assistant, Tool | 2个:User, Assistant |
| 数据结构 | 扁平列表,纯文本为主 | 嵌套数组,支持多种内容块 (Blocks) |
| 上手难度 | ⭐⭐ (简单,像聊天) | ⭐⭐⭐ (需理解 Block 概念) |
| 生态兼容 | ⭐⭐⭐⭐⭐ (行业通用标准) | ⭐⭐⭐ (主要在 Claude 生态) |
| 复杂任务 | 一般 (多步工具易混乱) | 优秀 (结构严谨,支持思维链) |
| 多模态 | 较弱 (处理繁琐) | 极强 (原生支持混合媒体) |
✅ 选 OpenAI,如果:
-
你是纯新手:想最快跑通第一个 Demo,不想被复杂结构劝退。
-
主要做文字聊天:不涉及复杂的图片或长文档处理。
-
需要跨模型兼容:希望代码能无缝切换到 Qwen、GLM 等其他国产模型。
-
理由:它是行业的"普通话",教程最多,报错最容易搜到答案。
✅ 选 Anthropic (Claude),如果:
-
要做高级 Agent:需要让 AI 看图、读 PDF、执行复杂工作流。
-
追求逻辑严密性:发现 OpenAI 模型经常"胡言乱语",想要更听话、结构更稳定的输出。
-
需要观察思考过程:Claude 原生支持在消息中插入
thinking块,方便调试 Agent 的逻辑。 -
理由:它是未来的趋势,虽然起步稍难,但上限更高,适合构建企业级应用。
四、 总结与建议
如果把开发 Agent 比作学开车:
-
OpenAI 标准 就像是 自动挡轿车。上手快,油门踩就走,市面上车最多,修车店遍地都是。建议 90% 的新人从这里开始。
-
Anthropic 标准 就像是 手动挡赛车。你需要懂离合、换挡(理解 Content Blocks),但一旦掌握,它在复杂赛道(复杂任务)上的操控性和极限性能更高。
💡 终极建议:
不要硬编码!建议在项目初期就引入适配器模式(Adapter Pattern)。封装一个统一的 ChatModel 接口,底层分别实现 OpenAIAdapter 和 AnthropicAdapter。这样,无论你未来想切换模型,还是想结合两者的优势,都能游刃有余。