モデル
Agents SDK は OpenAI モデルを 2 つの形態で即利用できます。
- 推奨:
OpenAIResponsesModel
は、新しい Responses API を使用して OpenAI API を呼び出します。 OpenAIChatCompletionsModel
は、Chat Completions API を使用して OpenAI API を呼び出します。
非 OpenAI モデル
ほとんどの非 OpenAI モデルは LiteLLM インテグレーション 経由で利用できます。まず、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 モデルを利用するその他の方法
他の LLM プロバイダーを統合する方法は、あと 3 つあります(こちら に例があります)。
set_default_openai_client
AsyncOpenAI
インスタンスを LLM クライアントとしてグローバルに使用したい場合に便利です。LLM プロバイダーが OpenAI 互換の API エンドポイントを持ち、base_url
とapi_key
を設定できる場合に使用します。設定例は examples/model_providers/custom_example_global.py にあります。ModelProvider
Runner.run
レベルでカスタムモデルプロバイダーを指定できます。これにより「この run のすべてのエージェントでカスタムプロバイダーを使う」と宣言できます。設定例は examples/model_providers/custom_example_provider.py にあります。Agent.model
特定のエージェントインスタンスにモデルを指定できます。エージェントごとに異なるプロバイダーを組み合わせることが可能です。設定例は examples/model_providers/custom_example_agent.py にあります。ほとんどのモデルを簡単に利用する方法として LiteLLM インテグレーション を利用できます。
platform.openai.com
の API キーを持っていない場合は、set_tracing_disabled()
でトレーシングを無効化するか、別のトレーシングプロセッサー を設定することをお勧めします。
Note
これらの例では、Responses API をまだサポートしていない LLM プロバイダーが多いため、Chat Completions API/モデルを使用しています。LLM プロバイダーが Responses API をサポートしている場合は、Responses を使用することを推奨します。
モデルの組み合わせ
1 つのワークフロー内でエージェントごとに異なるモデルを使用したい場合があります。たとえば、振り分けには小さく高速なモデルを、複雑なタスクには大きく高性能なモデルを使用するといったケースです。Agent
を設定する際、次のいずれかの方法でモデルを選択できます。
- モデル名を直接指定する
- 任意のモデル名と、その名前を Model インスタンスへマッピングできる
ModelProvider
を指定する Model
実装を直接渡す
Note
SDK は OpenAIResponsesModel
と OpenAIChatCompletionsModel
の両形態をサポートしていますが、各ワークフローで 1 つのモデル形態に統一することを推奨します。2 つの形態はサポートする機能とツールが異なるためです。混在させる場合は、使用する機能が双方で利用可能かを必ず確認してください。
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
実装を提供
エージェントで使用するモデルをさらに構成したい場合は、temperature
などのオプションパラメーターを指定できる ModelSettings
を渡せます。
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),
)
OpenAI の Responses API を使用する場合、user
や service_tier
などその他のオプションパラメーター があります。トップレベルで指定できない場合は、extra_args
で渡してください。
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,
extra_args={"service_tier": "flex", "user": "user_12345"},
),
)
他の LLM プロバイダー使用時の一般的な問題
Tracing クライアントの 401 エラー
Tracing 関連のエラーが発生する場合、トレースは OpenAI サーバーへアップロードされるため、OpenAI API キーが必要です。対応方法は次の 3 つです。
- トレーシングを完全に無効化する:
set_tracing_disabled(True)
- トレース用に OpenAI キーを設定する:
set_tracing_export_api_key(...)
この API キーはトレースのアップロードのみに使用され、platform.openai.com で取得したものが必要です。 - OpenAI 以外のトレースプロセッサーを使用する。詳細は tracing のドキュメント を参照してください。
Responses API のサポート
SDK はデフォルトで Responses API を使用しますが、ほとんどの LLM プロバイダーはまだ非対応です。その結果、404 などのエラーが発生することがあります。対処方法は次の 2 つです。
set_default_openai_api("chat_completions")
を呼び出す
OPENAI_API_KEY
とOPENAI_BASE_URL
を環境変数で設定している場合に有効です。OpenAIChatCompletionsModel
を使用する
例は こちら にあります。
structured outputs のサポート
一部のモデルプロバイダーは structured outputs をサポートしていません。その場合、次のようなエラーが発生することがあります。
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 は structured outputs、マルチモーダル入力、ホスト型の file search や web search をサポートしていますが、多くの他プロバイダーは非対応です。以下の制限に留意してください。
- 対応していないプロバイダーには未サポートの
tools
を送らない - テキストのみのモデルを呼び出す前にマルチモーダル入力を除外する
- structured JSON 出力をサポートしていないプロバイダーでは、不正な JSON が返ることがある点に注意する