モデル
Agents SDK には、OpenAI モデルのサポートが 2 種類用意されています。
- 推奨: 新しい Responses API を使って OpenAI API を呼び出す
OpenAIResponsesModel
- Chat Completions API を使って OpenAI API を呼び出す
OpenAIChatCompletionsModel
OpenAI モデル
Agent
を初期化する際にモデルを指定しない場合は、デフォルトのモデルが使用されます。現在のデフォルトは gpt-4.1
で、エージェント ワークフローの予測可能性と低レイテンシのバランスに優れています。
gpt-5
などの他のモデルに切り替えたい場合は、次のセクションの手順に従ってください。
デフォルトの OpenAI モデル
カスタムモデルを設定していないすべての エージェント で特定のモデルを一貫して使用したい場合は、エージェント を実行する前に OPENAI_DEFAULT_MODEL
環境変数を設定してください。
GPT-5 モデル
この方法で GPT-5 のいずれかの推論モデル(gpt-5
、gpt-5-mini
、または gpt-5-nano
)を使用すると、SDK は既定で適切な ModelSettings
を適用します。具体的には、reasoning.effort
と verbosity
の両方を "low"
に設定します。これらの設定を自分で構築したい場合は、agents.models.get_default_model_settings("gpt-5")
を呼び出してください。
より低レイテンシや特定の要件がある場合は、別のモデルや設定を選択できます。デフォルトモデルの推論負荷を調整するには、独自の ModelSettings
を渡します。
from openai.types.shared import Reasoning
from agents import Agent, ModelSettings
my_agent = Agent(
name="My Agent",
instructions="You're a helpful agent.",
model_settings=ModelSettings(reasoning=Reasoning(effort="minimal"), verbosity="low")
# If OPENAI_DEFAULT_MODEL=gpt-5 is set, passing only model_settings works.
# It's also fine to pass a GPT-5 model name explicitly:
# model="gpt-5",
)
特に低レイテンシを重視する場合、gpt-5-mini
または gpt-5-nano
モデルにおいて reasoning.effort="minimal"
を使用すると、デフォルト設定よりも高速に応答が返ることがよくあります。ただし、Responses API の一部の組み込みツール(ファイル検索 や画像生成など)は "minimal"
の推論負荷をサポートしていないため、この Agents SDK のデフォルトは "low"
になっています。
非 GPT-5 モデル
カスタムの model_settings
を指定せずに GPT-5 以外のモデル名を渡した場合、SDK はどのモデルでも互換性のある汎用的な ModelSettings
にフォールバックします。
非 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 つあります(code examples はこちら)。
set_default_openai_client
は、LLM クライアントとしてAsyncOpenAI
のインスタンスをグローバルに使用したい場合に便利です。これは LLM プロバイダーが OpenAI 互換の API エンドポイントを持ち、base_url
とapi_key
を設定できる場合に使用します。設定可能な例は examples/model_providers/custom_example_global.py を参照してください。ModelProvider
はRunner.run
レベルで指定します。これにより、「この実行のすべての エージェント にカスタムモデルプロバイダーを使う」と指定できます。設定可能な例は examples/model_providers/custom_example_provider.py を参照してください。Agent.model
では、特定の Agent インスタンスでモデルを指定できます。これにより、エージェント ごとに異なるプロバイダーを組み合わせて使用できます。設定可能な例は examples/model_providers/custom_example_agent.py を参照してください。利用可能なモデルの多くを簡単に使うには、LiteLLM 連携 が便利です。
platform.openai.com
の API キーがない場合は、set_tracing_disabled()
でトレーシング を無効化するか、別のトレーシング プロセッサー を設定することを推奨します。
Note
これらの例では、Responses API をまだサポートしていない LLM プロバイダーが多数あるため、Chat Completions API/モデルを使用しています。お使いの LLM プロバイダーが Responses をサポートしている場合は、Responses の使用を推奨します。
モデルの組み合わせ
1 つのワークフロー内で、エージェント ごとに異なるモデルを使いたい場合があります。例えば、振り分けには小型で高速なモデルを使い、複雑なタスクには大型で高性能なモデルを使う、といった使い分けです。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="gpt-5-mini", # (1)!
)
english_agent = Agent(
name="English agent",
instructions="You only speak English",
model=OpenAIChatCompletionsModel( # (2)!
model="gpt-5-nano",
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-5",
)
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-4.1",
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-4.1",
model_settings=ModelSettings(
temperature=0.1,
extra_args={"service_tier": "flex", "user": "user_12345"},
),
)
他社製 LLM プロバイダー利用時の一般的な問題
トレーシング クライアントのエラー 401
トレーシング 関連のエラーが発生する場合、トレースは OpenAI の サーバー にアップロードされる一方で、OpenAI の API キーがないことが原因です。解決策は次の 3 つです。
- トレーシング を完全に無効化する:
set_tracing_disabled(True)
- トレーシング 用の OpenAI キーを設定する:
set_tracing_export_api_key(...)
。この API キーはトレースのアップロードのみに使用され、platform.openai.com のものが必要です。 - 非 OpenAI のトレース プロセッサーを使用する。トレーシングのドキュメント を参照してください。
Responses API のサポート
SDK はデフォルトで Responses API を使用しますが、他社製 LLM プロバイダーの多くはまだ未対応です。その結果、404 などの問題が発生する場合があります。解決するには次のいずれかを行ってください。
set_default_openai_api("chat_completions")
を呼び出します。これは環境変数でOPENAI_API_KEY
とOPENAI_BASE_URL
を設定している場合に機能します。OpenAIChatCompletionsModel
を使用します。code examples はこちらにあります。
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 schema 出力をサポートするプロバイダーに依存することを推奨します。そうしないと、JSON が不正(malformed)であることが多く、アプリが頻繁に壊れてしまいます。
プロバイダーをまたぐモデルの混在
モデルプロバイダー間の機能差異に注意しないと、エラーに遭遇する可能性があります。例えば、OpenAI は structured outputs、マルチモーダル入力、ホスト型の ファイル検索 および Web 検索 をサポートしますが、他の多くのプロバイダーはこれらの機能をサポートしていません。次の制約に注意してください。
- サポートされていない
tools
を理解しないプロバイダーに送信しない - テキスト専用のモデルを呼び出す前に、マルチモーダル入力をフィルタリングする
- structured JSON 出力をサポートしないプロバイダーは、無効な JSON を生成することがある点に注意する