模型
Agents SDK 提供开箱即用的 OpenAI 模型支持,包含两种类型:
- 推荐使用:
OpenAIResponsesModel
,通过新的 Responses API 调用 OpenAI 接口。 OpenAIChatCompletionsModel
,通过 Chat Completions API 调用 OpenAI 接口。
非 OpenAI 模型
您可以通过 LiteLLM 集成 使用大多数其他非 OpenAI 模型。首先安装 litellm 依赖组:
然后使用 litellm/
前缀调用任意 支持的模型:
claude_agent = Agent(model="litellm/anthropic/claude-3-5-sonnet-20240620", ...)
gemini_agent = Agent(model="litellm/gemini/gemini-2.5-flash-preview-04-17", ...)
使用非 OpenAI 模型的其他方式
你可以通过以下 3 种方式集成其他 LLM 提供商(代码示例参见此处):
set_default_openai_client
适用于你想全局使用AsyncOpenAI
实例作为 LLM 客户端的情况。这适用于 LLM 提供商具备 OpenAI 兼容 API 端点,且你可以设置base_url
和api_key
的场景。可配置示例见 examples/model_providers/custom_example_global.py。ModelProvider
作用于Runner.run
层级。这允许你声明"在此次运行中为所有 agents 使用自定义模型提供商"。可配置示例见 examples/model_providers/custom_example_provider.py。Agent.model
允许你为特定 Agent 实例指定模型。这使你能为不同 agents 混合搭配不同提供商。可配置示例见 examples/model_providers/custom_example_agent.py。使用大多数可用模型的简便方式是通过 LiteLLM 集成。
若你没有来自 platform.openai.com
的 API 密钥,我们建议通过 set_tracing_disabled()
禁用追踪,或设置不同的追踪处理器。
Note
在这些示例中,我们使用 Chat Completions API/模型,因为大多数 LLM 提供商尚未支持 Responses API。如果你的 LLM 提供商支持 Responses,我们推荐使用它。
模型混合搭配
在单个工作流中,您可能希望为每个 agent 使用不同的模型。例如,可以使用更小、更快的模型进行初步筛选,同时使用更大、能力更强的模型处理复杂任务。配置 Agent
时,可以通过以下方式选择特定模型:
- 直接传递模型名称
- 传递任意模型名称 + 能将该名称映射到 Model 实例的
ModelProvider
- 直接提供
Model
实现
Note
虽然我们的 SDK 同时支持 OpenAIResponsesModel
和 OpenAIChatCompletionsModel
两种形态,但我们建议每个工作流使用单一模型形态,因为这两种形态支持的功能和工具集不同。如果工作流需要混合模型形态,请确保您使用的所有功能在两种形态上都可用。
from agents import Agent, Runner, AsyncOpenAI, OpenAIChatCompletionsModel
import asyncio
spanish_agent = Agent(
name="Spanish agent",
instructions="You only speak Spanish.",
model="o3-mini", # (1)!
)
english_agent = Agent(
name="English agent",
instructions="You only speak English",
model=OpenAIChatCompletionsModel( # (2)!
model="gpt-4o",
openai_client=AsyncOpenAI()
),
)
triage_agent = Agent(
name="Triage agent",
instructions="Handoff to the appropriate agent based on the language of the request.",
handoffs=[spanish_agent, english_agent],
model="gpt-3.5-turbo",
)
async def main():
result = await Runner.run(triage_agent, input="Hola, ¿cómo estás?")
print(result.final_output)
- 直接设置 OpenAI 模型名称
- 提供
Model
实现
如需进一步配置 agent 使用的模型,可以传递 ModelSettings
,它提供可选的模型配置参数如 temperature。
from agents import Agent, ModelSettings
english_agent = Agent(
name="English agent",
instructions="You only speak English",
model="gpt-4o",
model_settings=ModelSettings(temperature=0.1),
)
使用其他 LLM 提供商时的常见问题
追踪客户端错误 401
如果遇到与追踪相关的错误,这是因为追踪数据会上传至 OpenAI 服务器,而您尚未配置 OpenAI API 密钥。可通过以下三种方式解决:
- 完全禁用追踪功能:
set_tracing_disabled(True)
- 为追踪配置 OpenAI 密钥:
set_tracing_export_api_key(...)
。该密钥仅用于上传追踪数据,且必须来自 platform.openai.com - 使用非 OpenAI 的追踪处理器。详见追踪文档
Responses API 支持问题
SDK 默认使用 Responses API,但多数其他 LLM 提供商尚未支持该接口。您可能会遇到 404 等错误。解决方案有两种:
- 调用
set_default_openai_api("chat_completions")
。此方案适用于通过环境变量设置OPENAI_API_KEY
和OPENAI_BASE_URL
的情况 - 使用
OpenAIChatCompletionsModel
。相关代码示例参见此处
结构化输出支持
部分模型提供商不支持结构化输出,这可能导致如下错误:
BadRequestError: Error code: 400 - {'error': {'message': "'response_format.type' : value is not one of the allowed values ['text','json_object']", 'type': 'invalid_request_error'}}
这是某些模型提供商的局限性——它们支持 JSON 输出,但不允许指定输出使用的 json_schema
。我们正在修复此问题,但建议优先选择支持 JSON 模式输出的提供商,否则应用常会因格式错误的 JSON 而中断。
跨提供商混合使用模型
需注意不同模型提供商之间的功能差异,否则可能遇到错误。例如 OpenAI 支持结构化输出、多模态输入以及托管文件搜索和网页搜索,但许多其他提供商不具备这些功能。需注意以下限制:
- 不要向不支持的提供商发送
tools
参数 - 调用纯文本模型前需过滤多模态输入
- 注意不支持结构化 JSON 输出的提供商偶尔会产生无效 JSON