learn-frameworks · 04

三大 SDK 横向对比:怎么选

三家厂商的 SDK 设计哲学不同,适合的场景也不同。这一篇做系统对比,帮你建立选型判断。

API 设计对比

对话接口

# OpenAI Agents SDK
from agents import Agent, Runner

agent = Agent(name="助手", instructions="你是一个助手", model="gpt-4o-mini")
result = Runner.run_sync(agent, "你好")
print(result.final_output)

# Google Gemini SDK
from google import genai
client = genai.Client(api_key="...")
response = client.models.generate_content(model="gemini-2.0-flash", contents="你好")
print(response.text)

# Anthropic Claude SDK
import anthropic
client = anthropic.Anthropic(api_key="...")
msg = client.messages.create(
    model="claude-opus-4-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "你好"}]
)
print(msg.content[0].text)

观察:

  • OpenAI Agents SDK 是高层抽象:有 Agent 对象概念,Runner 管理执行循环
  • Gemini SDK 是中层抽象:客户端直接调用,但支持自动 Function Calling
  • Anthropic SDK 是低层控制:完整暴露 Messages API,Tool Use 需要手动循环

系统提示

# OpenAI
agent = Agent(instructions="系统提示内容", ...)

# Gemini
config = types.GenerateContentConfig(system_instruction="系统提示内容")
client.models.generate_content(..., config=config)

# Anthropic
client.messages.create(system="系统提示内容", ...)

三家都把系统提示和对话历史分开,这是共识。

Tool Calling 对比

这是最关键的差异。

OpenAI Agents SDK

from agents import function_tool

@function_tool
def get_weather(city: str) -> str:
    """获取城市天气"""
    return f"{city}: 晴天 25°C"

agent = Agent(tools=[get_weather], ...)
result = Runner.run_sync(agent, "北京天气")
# Runner 自动处理工具调用循环,无需手动干预

特点:装饰器注册,自动循环,用户不感知工具调用过程。

Google Gemini SDK

# 方式一:手动定义 schema + 手动循环
tools = types.Tool(function_declarations=[
    types.FunctionDeclaration(name="get_weather", description="...", parameters=...)
])
response = client.models.generate_content(config=types.GenerateContentConfig(tools=[tools]))
# 检查 response.candidates[0].content.parts[0].function_call
# 手动执行,手动回传 function_response

# 方式二:自动 Function Calling(新版)
def get_weather(city: str) -> str:
    """获取城市天气"""  # docstring 自动变成工具描述
    return f"{city}: 晴天"

response = client.models.generate_content(
    tools=[get_weather],  # 直接传函数
    config=types.GenerateContentConfig(
        automatic_function_calling=types.AutomaticFunctionCallingConfig(disable=False)
    )
)

特点:两种模式,自动模式方便,手动模式控制粒度更细。

Anthropic Claude SDK

tools = [{
    "name": "get_weather",
    "description": "获取城市天气",
    "input_schema": {
        "type": "object",
        "properties": {"city": {"type": "string", "description": "城市名"}},
        "required": ["city"]
    }
}]

# 必须手动写循环
while True:
    response = client.messages.create(tools=tools, messages=messages)
    if response.stop_reason == "tool_use":
        # 手动执行工具,构造 tool_result,追加到 messages
        ...
    else:
        return response.content[0].text

特点:完全手动,完整控制,没有自动循环。

Tool Calling 对比汇总

维度 OpenAI Gemini Anthropic
工具注册方式 @function_tool 装饰器 手动 schema 或传函数 手动 JSON schema
循环控制 全自动(Runner) 可自动可手动 完全手动
调试难度 较难(黑盒) 中等 最容易(完全透明)
适合场景 快速开发 灵活中间层 生产/精细控制

多 Agent 支持

维度 OpenAI Gemini Anthropic
原生多 Agent Handoff(原生支持) 需要自己实现 需要自己实现
Agent 间通信 自动传递对话历史 手动管理 手动管理
适合模式 任务分派、专家路由 自定义编排 自定义编排

OpenAI 的 handoffs 是目前三家中唯一原生支持多 Agent 的 SDK 级能力。Gemini 和 Anthropic 需要自己实现路由和上下文传递(或者配合 LangGraph)。

流式输出

# OpenAI
async with Runner.run_streamed(agent, "...") as stream:
    async for event in stream.stream_events():
        print(event.delta, end="")

# Gemini
for chunk in client.models.generate_content_stream(model="...", contents="..."):
    print(chunk.text, end="")

# Anthropic
with client.messages.stream(model="...", messages=[...]) as stream:
    for text in stream.text_stream:
        print(text, end="")

Gemini 和 Anthropic 都支持同步流式,OpenAI Agents SDK 的流式是异步的。

多模态能力

能力 OpenAI GPT-4o Gemini 2.0 Claude 3.5+
图片输入 支持 支持 支持
音频输入 支持(Whisper) 原生支持 不支持
视频输入 不支持 支持 不支持
文档 PDF 不支持 支持 支持(Files API)
图片生成 DALL-E(独立) Imagen(独立) 不支持

Gemini 在多模态覆盖面上最广,特别是视频和音频的原生支持。

特色功能对比

功能 OpenAI Gemini Anthropic
长上下文 128K 1M token 200K
推理/思维链 o1/o3 系列 Flash Thinking Extended Thinking
代码执行 Code Interpreter 原生代码执行 工具调用模拟
向量搜索 内置 Vector Store Grounding(Google 搜索) 无(需外接)
细粒度速率 较低免费额度 较慷慨免费额度 中等

Gemini 的 1M token 上下文Google 搜索 Grounding 是独特优势;Anthropic 的 Extended Thinking 在复杂推理上有优势;OpenAI 的 Agents SDK 多 Agent 支持最完整。

定价参考(2025 年,仅供参考)

模型 输入价格 输出价格 特点
GPT-4o mini $0.15/1M $0.60/1M OpenAI 最便宜
GPT-4o $2.50/1M $10/1M OpenAI 主力
Gemini Flash $0.075/1M $0.30/1M 目前最便宜
Gemini Pro $1.25/1M $5/1M Gemini 主力
Claude Haiku $0.25/1M $1.25/1M Claude 最便宜
Claude Sonnet $3/1M $15/1M Claude 主力
Claude Opus $15/1M $75/1M 最强但最贵

定价以官网为准,经常变动。

选型建议

用 OpenAI Agents SDK,如果:

  • 需要原生多 Agent Handoff,任务分派逻辑复杂
  • 想快速搭原型,不想手写工具调用循环
  • 团队已经在用 OpenAI,生态熟悉
适合场景:客服机器人、多专家协作系统、任务规划 Agent

用 Google Gemini SDK,如果:

  • 需要处理长文档(超 100K token)
  • 需要视频/音频多模态能力
  • 想用 Google Search Grounding 接地气
  • 在 Google Cloud 生态(Vertex AI)
适合场景:文档分析、多媒体内容处理、需要实时信息的 Agent

用 Anthropic Claude SDK,如果:

  • 需要精细控制 Tool Use 每一步
  • 复杂推理任务(Extended Thinking)
  • 注重代码质量指令遵循
  • 生产环境要求高可靠性
适合场景:代码助手、分析报告、需要详细思考过程的决策系统

实际项目里怎么组合

不要被 SDK 绑定。 这三家 SDK 的 API 风格不同,但都支持通过工具调用接入外部系统。

一个常见的生产架构:

外层框架(LangGraph / 自定义)
  |
  +-- 任务A --> Claude(复杂推理)
  |
  +-- 任务B --> Gemini(长文档处理)
  |
  +-- 任务C --> GPT-4o(通用对话)

业务逻辑在框架层,模型是可替换的资源。把 LLM 调用封装成统一接口,切换模型只改配置。

最后一条建议

学习阶段:用 Anthropic SDK 最合适——它把 Tool Use 的每一步都暴露出来,你能清楚地看到”请求 → 模型决定调用工具 → 执行 → 回传结果 → 最终回复”的完整循环。其他 SDK 封装了这个过程,反而不利于理解底层机制。

理解了 Anthropic 的手动循环,再看 OpenAI 的自动 Runner,你就能明白它在背后帮你做了什么。

生产阶段:根据任务需求选模型,根据团队熟悉度选 SDK,不要教条。