This is a pretty minor improvement to the docs: `model_settings` parameter is only mentioned on the agent doc page, but first-time visitors may want to know it’s also available on the models page.
8.2 KiB
モデル
Agents SDK は、OpenAI モデルを次の 2 つの形式でサポートしています。
- 推奨: 新しい Responses API を使用して OpenAI API を呼び出す [
OpenAIResponsesModel][agents.models.openai_responses.OpenAIResponsesModel]。 - Chat Completions API を使用して OpenAI API を呼び出す [
OpenAIChatCompletionsModel][agents.models.openai_chatcompletions.OpenAIChatCompletionsModel]。
モデルの組み合わせ
1 つのワークフロー内で、各エージェントに異なるモデルを使用したい場合があります。たとえば、トリアージには小さくて高速なモデルを使用し、複雑なタスクにはより大きくて高機能なモデルを使用することができます。[Agent][agents.Agent] を設定する際に、次の方法で特定のモデルを選択できます。
- OpenAI モデルの名前を渡す。
- モデル名とその名前をモデルインスタンスにマッピングできる [
ModelProvider][agents.models.interface.ModelProvider] を渡す。 - 直接 [
Model][agents.models.interface.Model] 実装を提供する。
!!!note
SDK は [`OpenAIResponsesModel`][agents.models.openai_responses.OpenAIResponsesModel] と [`OpenAIChatCompletionsModel`][agents.models.openai_chatcompletions.OpenAIChatCompletionsModel] の両方の形状をサポートしていますが、各ワークフローに対して単一のモデル形状を使用することをお勧めします。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][agents.models.interface.Model] 実装を提供します。
エージェントに使用するモデルをさらに設定したい場合は、temperature などのオプションのモデル設定パラメーターを提供する [ModelSettings][agents.models.interface.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),
)
他の LLM プロバイダーの使用
他の LLM プロバイダーを 3 つの方法で使用できます(例はこちら)。
- [
set_default_openai_client][agents.set_default_openai_client] は、AsyncOpenAIのインスタンスを LLM クライアントとしてグローバルに使用したい場合に便利です。LLM プロバイダーが OpenAI 互換の API エンドポイントを持っている場合に、base_urlとapi_keyを設定できます。examples/model_providers/custom_example_global.py に設定可能な例があります。 - [
ModelProvider][agents.models.interface.ModelProvider] はRunner.runレベルで使用します。これにより、「この実行のすべてのエージェントにカスタムモデルプロバイダーを使用する」と指定できます。examples/model_providers/custom_example_provider.py に設定可能な例があります。 - [
Agent.model][agents.agent.Agent.model] では、特定のエージェントインスタンスにモデルを指定できます。これにより、異なるエージェントに対して異なるプロバイダーを組み合わせて使用することができます。examples/model_providers/custom_example_agent.py に設定可能な例があります。
platform.openai.com からの API キーがない場合は、set_tracing_disabled() を使用してトレーシングを無効にするか、異なるトレーシングプロセッサーを設定することをお勧めします。
!!! note
これらの例では、Chat Completions API/モデルを使用しています。なぜなら、ほとんどの LLM プロバイダーはまだ Responses API をサポートしていないからです。LLM プロバイダーがそれをサポートしている場合は、Responses を使用することをお勧めします。
他の LLM プロバイダーを使用する際の一般的な問題
トレーシングクライアントエラー 401
トレーシングに関連するエラーが発生した場合、これはトレースが OpenAI サーバーにアップロードされ、OpenAI API キーを持っていないためです。これを解決するには、次の 3 つのオプションがあります。
- トレーシングを完全に無効にする: [
set_tracing_disabled(True)][agents.set_tracing_disabled]。 - トレーシング用の OpenAI キーを設定する: [
set_tracing_export_api_key(...)][agents.set_tracing_export_api_key]。この API キーはトレースのアップロードにのみ使用され、platform.openai.com からのものでなければなりません。 - 非 OpenAI トレースプロセッサーを使用する。トレーシングドキュメントを参照してください。
Responses API サポート
SDK はデフォルトで Responses API を使用しますが、ほとんどの他の LLM プロバイダーはまだサポートしていません。その結果、404 エラーや類似の問題が発生することがあります。これを解決するには、次の 2 つのオプションがあります。
- [
set_default_openai_api("chat_completions")][agents.set_default_openai_api] を呼び出します。これは、環境変数を介してOPENAI_API_KEYとOPENAI_BASE_URLを設定している場合に機能します。 - [
OpenAIChatCompletionsModel][agents.models.openai_chatcompletions.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 のために頻繁に壊れることになります。