diff --git a/docs/ja/agents.md b/docs/ja/agents.md index 62dfe0460..d4434a472 100644 --- a/docs/ja/agents.md +++ b/docs/ja/agents.md @@ -4,15 +4,15 @@ search: --- # エージェント -エージェントはアプリの中核となる基本構成要素です。エージェントは、 instructions と tools で構成された大規模言語モデル LLM です。 +エージェントはアプリの中核となる基本コンポーネントです。エージェントは、instructions と tools で構成された大規模言語モデル( LLM )です。 ## 基本設定 エージェントで最も一般的に設定するプロパティは次のとおりです。 -- `name`: エージェントを識別するための必須の文字列です。 -- `instructions`: developer message(開発者メッセージ)または system prompt とも呼ばれます。 -- `model`: 使用する LLM と、temperature、top_p などのモデルチューニング用の任意の `model_settings`。 +- `name`: エージェントを識別する必須の文字列です。 +- `instructions`: developer message または system prompt としても知られています。 +- `model`: 使用する LLM と、temperature、top_p などのモデル調整パラメーターを設定する任意の `model_settings`。 - `tools`: エージェントがタスクを達成するために使用できるツールです。 ```python @@ -33,7 +33,7 @@ agent = Agent( ## コンテキスト -エージェントは `context` 型に対して汎用的です。コンテキストは依存性注入のためのツールで、あなたが作成して `Runner.run()` に渡すオブジェクトです。これはすべてのエージェント、ツール、ハンドオフなどに渡され、エージェントの実行における依存関係や状態をまとめて保持します。コンテキストには任意の Python オブジェクトを指定できます。 +エージェントはその `context` 型に対してジェネリックです。コンテキストは依存性注入ツールで、あなたが作成して `Runner.run()` に渡すオブジェクトです。これはすべてのエージェント、ツール、ハンドオフなどに渡され、エージェント実行のための依存関係と状態をまとめて保持します。コンテキストには任意の Python オブジェクトを指定できます。 ```python @dataclass @@ -52,7 +52,7 @@ agent = Agent[UserContext]( ## 出力タイプ -既定では、エージェントはプレーンテキスト(つまり `str`)を出力します。特定の型の出力をエージェントに生成させたい場合は、`output_type` パラメーターを使用できます。一般的には [Pydantic](https://docs.pydantic.dev/) オブジェクトを使用しますが、Pydantic の [TypeAdapter](https://docs.pydantic.dev/latest/api/type_adapter/) でラップできるあらゆる型(dataclasses、lists、TypedDict など)をサポートします。 +デフォルトでは、エージェントはプレーンテキスト(つまり `str`)出力を生成します。特定のタイプの出力をエージェントに生成させたい場合は、`output_type` パラメーターを使用します。一般的な選択肢は [Pydantic](https://docs.pydantic.dev/) オブジェクトを使うことですが、Pydantic の [TypeAdapter](https://docs.pydantic.dev/latest/api/type_adapter/) でラップ可能な任意の型(dataclasses、lists、TypedDict など)をサポートします。 ```python from pydantic import BaseModel @@ -73,11 +73,11 @@ agent = Agent( !!! note - `output_type` を渡すと、モデルは通常のプレーンテキスト応答ではなく、 [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) を使用します。 + `output_type` を渡すと、モデルは通常のプレーンテキスト応答ではなく [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) を使用するよう指示されます。 ## ハンドオフ -ハンドオフは、エージェントが委譲できるサブエージェントです。ハンドオフのリストを指定すると、必要に応じてエージェントがそれらに委譲できます。これは、単一のタスクに特化して優れた能力を発揮するモジュール型のエージェントをオーケストレーションできる強力なパターンです。詳細は [ハンドオフ](handoffs.md) のドキュメントを参照してください。 +ハンドオフは、エージェントが委譲できるサブエージェントです。ハンドオフのリストを提供すると、エージェントは関連があればそれらに委譲できます。これは、単一のタスクに特化して優れたモジュール型のエージェントをオーケストレーションできる強力なパターンです。詳しくは [handoffs](handoffs.md) ドキュメントをご覧ください。 ```python from agents import Agent @@ -98,7 +98,7 @@ triage_agent = Agent( ## 動的 instructions -多くの場合、エージェント作成時に instructions を指定できますが、関数を介して動的に instructions を提供することも可能です。関数はエージェントとコンテキストを受け取り、プロンプトを返す必要があります。通常の関数と `async` 関数のどちらも使用できます。 +多くの場合、エージェントを作成するときに instructions を指定しますが、関数を介して動的な instructions を提供することもできます。関数はエージェントとコンテキストを受け取り、プロンプトを返す必要があります。通常の関数と `async` 関数の両方が利用できます。 ```python def dynamic_instructions( @@ -115,15 +115,15 @@ agent = Agent[UserContext]( ## ライフサイクルイベント(フック) -ときには、エージェントのライフサイクルを観測したいことがあります。たとえば、イベントをログに記録したり、特定のイベント発生時にデータを事前取得したりできます。`hooks` プロパティでエージェントのライフサイクルにフックできます。[`AgentHooks`][agents.lifecycle.AgentHooks] クラスをサブクラス化し、必要なメソッドをオーバーライドしてください。 +エージェントのライフサイクルを監視したい場合があります。たとえば、イベントをログに記録したり、特定のイベント発生時にデータを事前取得したりできます。`hooks` プロパティを使ってエージェントのライフサイクルにフックできます。[`AgentHooks`][agents.lifecycle.AgentHooks] クラスをサブクラス化し、関心のあるメソッドをオーバーライドします。 ## ガードレール -ガードレールにより、エージェントの実行と並行してユーザー入力に対するチェック/バリデーションを行い、さらにエージェントの出力が生成された後にもチェックを実施できます。たとえば、ユーザーの入力やエージェントの出力の関連性をスクリーニングできます。詳細は [ガードレール](guardrails.md) のドキュメントを参照してください。 +ガードレールにより、エージェントの実行と並行してユーザー入力に対するチェック/検証を実行し、エージェントの出力が生成された後にも同様の処理を行えます。たとえば、ユーザーの入力とエージェントの出力について関連性をスクリーニングできます。詳しくは [guardrails](guardrails.md) ドキュメントをご覧ください。 -## エージェントのクローン/コピー +## エージェントの複製/コピー -エージェントの `clone()` メソッドを使用すると、エージェントを複製し、任意のプロパティを変更できます。 +エージェントで `clone()` メソッドを使用すると、エージェントを複製し、必要に応じて任意のプロパティを変更できます。 ```python pirate_agent = Agent( @@ -140,12 +140,12 @@ robot_agent = pirate_agent.clone( ## ツール使用の強制 -ツールのリストを指定しても、必ずしも LLM がツールを使用するとは限りません。[`ModelSettings.tool_choice`][agents.model_settings.ModelSettings.tool_choice] を設定してツール使用を強制できます。有効な値は次のとおりです。 +ツールのリストを提供しても、LLM が必ずしもツールを使用するとは限りません。[`ModelSettings.tool_choice`][agents.model_settings.ModelSettings.tool_choice] を設定することで、ツール使用を強制できます。有効な値は次のとおりです。 -1. `auto`: ツールを使用するかどうかを LLM に委ねます。 -2. `required`: LLM にツールの使用を必須にします(どのツールを使うかは賢く判断します)。 -3. `none`: LLM にツールを使用しないことを要求します。 -4. 具体的な文字列(例: `my_tool`)を設定し、その特定のツールを LLM に使用させます。 +1. `auto`: ツールを使用するかどうかを LLM に任せます。 +2. `required`: LLM にツールの使用を要求します(ただし、どのツールを使うかはインテリジェントに判断します)。 +3. `none`: LLM にツールを使用しないことを要求します。 +4. 特定の文字列(例: `my_tool`)を設定し、その特定のツールを使用することを LLM に要求します。 ```python from agents import Agent, Runner, function_tool, ModelSettings @@ -163,11 +163,11 @@ agent = Agent( ) ``` -## ツール使用の動作 +## ツール使用時の挙動 -`Agent` 構成の `tool_use_behavior` パラメーターは、ツールの出力の扱い方を制御します。 -- `"run_llm_again"`: 既定。ツールを実行し、その結果を LLM が処理して最終応答を生成します。 -- `"stop_on_first_tool"`: 最初のツール呼び出しの出力を、追加の LLM 処理なしでそのまま最終応答として使用します。 +`Agent` の設定にある `tool_use_behavior` パラメーターは、ツールの出力をどのように扱うかを制御します。 +- `"run_llm_again"`: デフォルト。ツールを実行し、その結果を LLM が処理して最終的な応答を生成します。 +- `"stop_on_first_tool"`: 最初のツール呼び出しの出力を、以降の LLM 処理なしで最終応答として使用します。 ```python from agents import Agent, Runner, function_tool, ModelSettings @@ -207,7 +207,7 @@ agent = Agent( tool_use_behavior=StopAtTools(stop_at_tool_names=["get_weather"]) ) ``` -- `ToolsToFinalOutputFunction`: ツール結果を処理し、停止するか LLM を続行するかを判断するカスタム関数です。 +- `ToolsToFinalOutputFunction`: ツール結果を処理し、停止するか LLM を続行するかを判断するカスタム関数です。 ```python from agents import Agent, Runner, function_tool, FunctionToolResult, RunContextWrapper @@ -245,4 +245,4 @@ agent = Agent( !!! note - 無限ループを防ぐため、フレームワークはツール呼び出し後に `tool_choice` を自動的に "auto" にリセットします。この動作は [`agent.reset_tool_choice`][agents.agent.Agent.reset_tool_choice] で設定可能です。無限ループは、ツール結果が LLM に送られ、`tool_choice` により LLM が再びツール呼び出しを生成し続けてしまうことに起因します。 \ No newline at end of file + 無限ループを防ぐため、フレームワークはツール呼び出し後に自動的に `tool_choice` を "auto" にリセットします。この挙動は [`agent.reset_tool_choice`][agents.agent.Agent.reset_tool_choice] で設定可能です。無限ループは、ツール結果が LLM に送られ、`tool_choice` により LLM が再度ツールを呼び出し、延々と続くことが原因です。 \ No newline at end of file diff --git a/docs/ja/config.md b/docs/ja/config.md index 867e5aa11..2c2c6ab50 100644 --- a/docs/ja/config.md +++ b/docs/ja/config.md @@ -6,7 +6,7 @@ search: ## API キーとクライアント -デフォルトでは、SDK はインポートされるとすぐに、LLM リクエストと トレーシング のために `OPENAI_API_KEY` 環境変数を探します。アプリの起動前にその環境変数を設定できない場合は、[set_default_openai_key()][agents.set_default_openai_key] 関数を使用してキーを設定できます。 +既定では、SDK はインポートされるとすぐに、LLM リクエストおよびトレーシング用の `OPENAI_API_KEY` 環境変数を探します。アプリの開始前にその環境変数を設定できない場合は、[set_default_openai_key()][agents.set_default_openai_key] 関数でキーを設定できます。 ```python from agents import set_default_openai_key @@ -14,7 +14,7 @@ from agents import set_default_openai_key set_default_openai_key("sk-...") ``` -また、使用する OpenAI クライアントを構成することもできます。デフォルトでは、SDK は環境変数または上記で設定したデフォルトキーから API キーを使用して、`AsyncOpenAI` インスタンスを作成します。これを変更するには、[set_default_openai_client()][agents.set_default_openai_client] 関数を使用します。 +また、使用する OpenAI クライアントを設定することもできます。既定では、SDK は環境変数または上で設定した既定キーから API キーを用いて `AsyncOpenAI` インスタンスを作成します。これを変更するには、[set_default_openai_client()][agents.set_default_openai_client] 関数を使用します。 ```python from openai import AsyncOpenAI @@ -24,7 +24,7 @@ custom_client = AsyncOpenAI(base_url="...", api_key="...") set_default_openai_client(custom_client) ``` -最後に、使用する OpenAI API をカスタマイズすることもできます。デフォルトでは、OpenAI Responses API を使用します。[set_default_openai_api()][agents.set_default_openai_api] 関数を使用して上書きし、Chat Completions API を使うようにできます。 +最後に、使用する OpenAI API をカスタマイズすることもできます。既定では OpenAI Responses API を使用します。これを上書きして Chat Completions API を使うには、[set_default_openai_api()][agents.set_default_openai_api] 関数を使用します。 ```python from agents import set_default_openai_api @@ -34,7 +34,7 @@ set_default_openai_api("chat_completions") ## トレーシング -トレーシング はデフォルトで有効です。デフォルトでは、上記の OpenAI API キー(つまり、環境変数または設定したデフォルトキー)を使用します。トレーシング に使用する API キーを個別に設定するには、[`set_tracing_export_api_key`][agents.set_tracing_export_api_key] 関数を使用します。 +トレーシングは既定で有効です。既定では上記の OpenAI API キー(つまり、環境変数または設定した既定キー)を使用します。トレーシングに使用する API キーを個別に設定するには、[`set_tracing_export_api_key`][agents.set_tracing_export_api_key] 関数を使用します。 ```python from agents import set_tracing_export_api_key @@ -42,7 +42,7 @@ from agents import set_tracing_export_api_key set_tracing_export_api_key("sk-...") ``` -[`set_tracing_disabled()`][agents.set_tracing_disabled] 関数を使用して、トレーシング を完全に無効化することもできます。 +[`set_tracing_disabled()`][agents.set_tracing_disabled] 関数を使用すると、トレーシングを完全に無効化できます。 ```python from agents import set_tracing_disabled @@ -50,11 +50,11 @@ from agents import set_tracing_disabled set_tracing_disabled(True) ``` -## デバッグロギング +## デバッグログ -SDK にはハンドラーが設定されていない 2 つの Python ロガーがあります。デフォルトでは、これは警告とエラーが `stdout` に送られ、その他のログは抑制されることを意味します。 +SDK にはハンドラーが設定されていない Python ロガーが 2 つあります。既定では、警告とエラーは `stdout` に送られ、それ以外のログは抑制されます。 -詳細なロギングを有効にするには、[`enable_verbose_stdout_logging()`][agents.enable_verbose_stdout_logging] 関数を使用します。 +詳細なログを有効にするには、[`enable_verbose_stdout_logging()`][agents.enable_verbose_stdout_logging] 関数を使用します。 ```python from agents import enable_verbose_stdout_logging @@ -62,7 +62,7 @@ from agents import enable_verbose_stdout_logging enable_verbose_stdout_logging() ``` -また、ハンドラー、フィルター、フォーマッターなどを追加してログをカスタマイズできます。詳しくは [Python logging ガイド](https://docs.python.org/3/howto/logging.html)をご覧ください。 +また、ハンドラー、フィルター、フォーマッターなどを追加してログをカスタマイズできます。詳細は [Python logging ガイド](https://docs.python.org/3/howto/logging.html)をご覧ください。 ```python import logging @@ -83,7 +83,7 @@ logger.addHandler(logging.StreamHandler()) ### ログ内の機微情報 -特定のログには機微なデータ(例: ユーザー データ)が含まれる場合があります。これらのデータがログに出力されないようにするには、次の環境変数を設定してください。 +一部のログには機微情報(例: ユーザー データ)が含まれる場合があります。これらのデータが記録されないようにするには、次の環境変数を設定します。 LLM の入力と出力のロギングを無効化するには: @@ -91,7 +91,7 @@ LLM の入力と出力のロギングを無効化するには: export OPENAI_AGENTS_DONT_LOG_MODEL_DATA=1 ``` -ツールの入力と出力のロギングを無効化するには: +ツールの入出力のロギングを無効化するには: ```bash export OPENAI_AGENTS_DONT_LOG_TOOL_DATA=1 diff --git a/docs/ja/context.md b/docs/ja/context.md index f05d790ce..43c2b6534 100644 --- a/docs/ja/context.md +++ b/docs/ja/context.md @@ -4,28 +4,28 @@ search: --- # コンテキスト管理 -コンテキストは多義的な用語です。考慮すべき主なコンテキストには次の 2 つのクラスがあります。 +コンテキストは多義的な用語です。考慮すべきコンテキストには大きく 2 つの種類があります。 -1. コードからローカルに利用できるコンテキスト: ツール関数の実行時、`on_handoff` のようなコールバック、ライフサイクルフックなどで必要となるデータや依存関係です。 -2. LLM に利用できるコンテキスト: 応答生成時に LLM が参照できるデータです。 +1. コードからローカルに利用できるコンテキスト: これは、ツール関数の実行時、`on_handoff` のようなコールバック時、ライフサイクルフックなどで必要になる可能性があるデータや依存関係です。 +2. LLM に提供されるコンテキスト: これは、応答生成時に LLM が参照できるデータです。 ## ローカルコンテキスト -これは [`RunContextWrapper`][agents.run_context.RunContextWrapper] クラスおよびその中の [`context`][agents.run_context.RunContextWrapper.context] プロパティを通じて表現されます。仕組みは次のとおりです。 +これは [`RunContextWrapper`][agents.run_context.RunContextWrapper] クラスと、その内部の [`context`][agents.run_context.RunContextWrapper.context] プロパティで表現されます。仕組みは次のとおりです。 -1. 任意の Python オブジェクトを作成します。一般的なパターンとしては dataclass や Pydantic オブジェクトを使います。 -2. そのオブジェクトを各種の実行メソッド(例: `Runner.run(..., **context=whatever**)`)に渡します。 -3. すべてのツール呼び出しやライフサイクルフックにはラッパーオブジェクト `RunContextWrapper[T]` が渡されます。ここで `T` はコンテキストオブジェクトの型で、`wrapper.context` からアクセスできます。 +1. 任意の Python オブジェクトを作成します。一般的なパターンとしては、 dataclass や Pydantic オブジェクトを使います。 +2. そのオブジェクトを各種実行メソッド(例: `Runner.run(..., **context=whatever**)`)に渡します。 +3. すべてのツール呼び出しやライフサイクルフックなどには、`RunContextWrapper[T]` というラッパーオブジェクトが渡されます。ここで `T` は、`wrapper.context` からアクセスできるコンテキストオブジェクトの型を表します。 -最も重要な点: 特定のエージェント実行におけるすべてのエージェント、ツール関数、ライフサイクルなどは、同じ型のコンテキストを使用しなければなりません。 +注意すべき **最も重要な点**: あるエージェント実行においては、そのエージェント、ツール関数、ライフサイクルなどがすべて同じ種類(_type_)のコンテキストを使用する必要があります。 -コンテキストは次のような用途に使えます。 +コンテキストは次のような用途に使用できます。 -- 実行に関するコンテキストデータ(例: ユーザー名 / uid やその他のユーザー情報) -- 依存関係(例: ロガーオブジェクト、データフェッチャーなど) +- 実行のためのコンテキストデータ(例: ユーザー名 / uid などの ユーザー に関する情報) +- 依存関係(例: logger オブジェクト、データ取得コンポーネントなど) - ヘルパー関数 -!!! danger "注意" +!!! danger "Note" コンテキストオブジェクトは LLM に送信されません。これは純粋にローカルなオブジェクトであり、読み書きやメソッド呼び出しができます。 @@ -66,17 +66,17 @@ if __name__ == "__main__": asyncio.run(main()) ``` -1. これはコンテキストオブジェクトです。ここでは dataclass を使用していますが、任意の型を使用できます。 -2. これはツールです。`RunContextWrapper[UserInfo]` を受け取ることが分かります。ツールの実装はコンテキストから読み取ります。 -3. エージェントにジェネリック型 `UserInfo` を付けて、型チェッカーがエラーを検出できるようにします(例えば、異なるコンテキスト型を取るツールを渡そうとした場合)。 -4. コンテキストは `run` 関数に渡されます。 -5. エージェントはツールを正しく呼び出して年齢を取得します。 +1. これはコンテキストオブジェクトです。ここでは dataclass を使っていますが、任意の型を使用できます。 +2. これはツールです。`RunContextWrapper[UserInfo]` を受け取ることがわかります。ツールの実装はコンテキストから読み取ります。 +3. 型チェッカーがエラーを検出できるように(例えば異なるコンテキスト型を受け取るツールを渡そうとした場合など)、エージェントにはジェネリクスの `UserInfo` を付けます。 +4. `run` 関数にコンテキストを渡します。 +5. エージェントはツールを正しく呼び出し、年齢を取得します。 ## エージェント / LLM のコンテキスト -LLM が呼び出されたとき、LLM が参照できるデータは会話履歴のものだけです。つまり、新しいデータを LLM に利用可能にしたい場合は、その履歴で利用可能になるような方法で行う必要があります。いくつかの方法があります。 +LLM が呼び出されるとき、LLM が参照できるデータは会話履歴からのものだけです。つまり、新しいデータを LLM に利用させたい場合、そのデータを履歴で参照可能になるように取り込む必要があります。これにはいくつかの方法があります。 -1. エージェントの `instructions` に追加します。これは "system prompt" または「開発者メッセージ」とも呼ばれます。system prompts は静的な文字列でも、コンテキストを受け取って文字列を出力する動的な関数でも構いません。これは常に有用な情報(例えば、ユーザー名や現在の日付)に一般的な手法です。 -2. `Runner.run` 関数を呼び出す際に `input` に追加します。これは `instructions` の手法に似ていますが、[指揮系統](https://cdn.openai.com/spec/model-spec-2024-05-08.html#follow-the-chain-of-command) においてより下位のメッセージにできます。 -3. 関数ツールを通じて公開します。これはオンデマンドのコンテキストに便利です。LLM がいつデータを必要とするかを判断し、ツールを呼び出してそのデータを取得できます。 -4. リトリーバルや Web 検索を使用します。これらは、ファイルやデータベース(リトリーバル)または Web(Web 検索)から関連データを取得できる特別なツールです。これは、関連するコンテキストデータに基づいて応答を根拠付けるのに役立ちます。 \ No newline at end of file +1. エージェントの `instructions` に追加します。これは「システムプロンプト」または「開発者メッセージ」とも呼ばれます。システムプロンプトは静的な文字列でも、コンテキストを受け取って文字列を出力する動的な関数でも構いません。常に役立つ情報(例: ユーザーの名前や現在の日付)に適した一般的な手法です。 +2. `Runner.run` を呼び出すときの `input` に追加します。これは `instructions` の手法に似ていますが、[指揮系統](https://cdn.openai.com/spec/model-spec-2024-05-08.html#follow-the-chain-of-command) の下位に配置するメッセージを持てます。 +3. 関数ツールを通じて公開します。これはオンデマンドのコンテキストに有用です。LLM が必要なときにデータ取得のためにツールを呼び出せます。 +4. リトリーバルや Web 検索を使用します。これらは、ファイルやデータベース(リトリーバル)または Web(Web 検索)から関連データを取得できる特別なツールです。これは、関連するコンテキストデータに基づいて応答を根拠付け(グラウンディング)するのに役立ちます。 \ No newline at end of file diff --git a/docs/ja/examples.md b/docs/ja/examples.md index a387fa2c3..a05d1af93 100644 --- a/docs/ja/examples.md +++ b/docs/ja/examples.md @@ -4,45 +4,46 @@ search: --- # コード例 -[repo](https://github.com/openai/openai-agents-python/tree/main/examples) の examples セクションで、SDK の多様なサンプル実装をご覧ください。これらのコード例は、さまざまなパターンや機能を示す複数のカテゴリーに整理されています。 +[リポジトリ](https://github.com/openai/openai-agents-python/tree/main/examples) のコード例セクションで、 SDK のさまざまなサンプル実装をご覧ください。コード例は、異なるパターンや機能を示す複数のカテゴリーに整理されています。 ## カテゴリー -- **[agent_patterns](https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns) :** - このカテゴリーのコード例は、一般的な エージェント の設計パターンを示します。たとえば、 +- **[agent_patterns](https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns):** + このカテゴリーの例では、次のような一般的なエージェント設計パターンを説明します - 決定的なワークフロー - - ツールとしての エージェント - - エージェント の並列実行 + - ツールとしてのエージェント + - エージェントの並列実行 -- **[basic](https://github.com/openai/openai-agents-python/tree/main/examples/basic) :** - これらのコード例は、SDK の基礎的な機能を示します。たとえば、 +- **[basic](https://github.com/openai/openai-agents-python/tree/main/examples/basic):** + これらの例では、次のような SDK の基礎的な機能を紹介します - - 動的な system prompt + - 動的な システムプロンプト - ストリーミング出力 - ライフサイクルイベント -- **[tool examples](https://github.com/openai/openai-agents-python/tree/main/examples/tools) :** - Web 検索 や ファイル検索 などの OpenAI がホストするツール の実装方法と、それらを エージェント に統合する方法を学べます。 +- **[tool examples](https://github.com/openai/openai-agents-python/tree/main/examples/tools):** + Web 検索 や ファイル検索 などの OpenAI がホストするツール の実装方法と、 + それらをエージェントに統合する方法を学べます。 -- **[model providers](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers) :** - OpenAI 以外のモデルを SDK と併用する方法を探ります。 +- **[model providers](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers):** + OpenAI 以外のモデルを SDK で使う方法を探ります。 -- **[handoffs](https://github.com/openai/openai-agents-python/tree/main/examples/handoffs) :** - エージェント のハンドオフ の実用的なコード例をご覧ください。 +- **[handoffs](https://github.com/openai/openai-agents-python/tree/main/examples/handoffs):** + エージェントの ハンドオフ の実用的なコード例をご覧ください。 -- **[mcp](https://github.com/openai/openai-agents-python/tree/main/examples/mcp) :** - MCP で エージェント を構築する方法を学べます。 +- **[mcp](https://github.com/openai/openai-agents-python/tree/main/examples/mcp):** + MCP でエージェントを構築する方法を学べます。 -- **[customer_service](https://github.com/openai/openai-agents-python/tree/main/examples/customer_service) ** と ** [research_bot](https://github.com/openai/openai-agents-python/tree/main/examples/research_bot) :** - 実用的なアプリケーションを示す、さらに作り込まれたコード例が 2 つあります +- **[customer_service](https://github.com/openai/openai-agents-python/tree/main/examples/customer_service)** と **[research_bot](https://github.com/openai/openai-agents-python/tree/main/examples/research_bot):** + 実運用のユースケースを示す、さらに作り込まれた 2 つのコード例 - - **customer_service**: 航空会社向けのカスタマーサービス システムの例。 - - **research_bot**: シンプルな ディープリサーチ のクローン。 + - **customer_service**: 航空会社向けのカスタマーサービスシステムの例。 + - **research_bot**: シンプルな ディープリサーチ クローン。 -- **[voice](https://github.com/openai/openai-agents-python/tree/main/examples/voice) :** - TTS と STT モデルを用いた音声 エージェント のコード例をご覧ください。 +- **[voice](https://github.com/openai/openai-agents-python/tree/main/examples/voice):** + TTS および STT モデルを使った音声エージェントのコード例。 -- **[realtime](https://github.com/openai/openai-agents-python/tree/main/examples/realtime) :** - SDK を使ってリアルタイム体験を構築するコード例です。 \ No newline at end of file +- **[realtime](https://github.com/openai/openai-agents-python/tree/main/examples/realtime):** + SDK を使ってリアルタイム体験を構築するコード例。 \ No newline at end of file diff --git a/docs/ja/guardrails.md b/docs/ja/guardrails.md index 432b09a93..c2e7a81f4 100644 --- a/docs/ja/guardrails.md +++ b/docs/ja/guardrails.md @@ -4,40 +4,40 @@ search: --- # ガードレール -ガードレールはエージェントと _並行して_ 実行され、ユーザー入力のチェックや検証を可能にします。たとえば、非常に賢い(そのため遅く/高価な)モデルで顧客からのリクエストを手伝うエージェントがあるとします。悪意のあるユーザーが、そのモデルに数学の宿題を手伝わせようとするのは避けたいはずです。そこで、速く/安価なモデルでガードレールを実行できます。ガードレールが悪意ある使用を検知した場合、即座にエラーを送出し、高価なモデルの実行を止め、時間とコストを節約できます。 +ガードレールはエージェントと _並行して_ 実行され、ユーザー入力のチェックや検証を可能にします。例えば、非常に賢い(そのため遅く/高価な)モデルでカスタマーリクエストを処理するエージェントを想像してください。悪意のあるユーザーがそのモデルに数学の宿題を手伝わせるよう頼むことは避けたいはずです。そこで、高速/低コストのモデルでガードレールを実行できます。ガードレールが悪意ある利用を検知したら、即座にエラーを発生させ、高価なモデルの実行を止めて時間やコストを節約できます。 -ガードレールには 2 種類あります: +ガードレールには 2 つの種類があります: 1. 入力ガードレールは最初のユーザー入力に対して実行されます -2. 出力ガードレールは最終的なエージェント出力に対して実行されます +2. 出力ガードレールは最終的なエージェントの出力に対して実行されます ## 入力ガードレール -入力ガードレールは 3 段階で実行されます: +入力ガードレールは 3 つのステップで実行されます: -1. まず、ガードレールはエージェントに渡されたものと同じ入力を受け取ります。 -2. 次に、ガードレール関数が実行され、[`GuardrailFunctionOutput`][agents.guardrail.GuardrailFunctionOutput] を生成し、それが [`InputGuardrailResult`][agents.guardrail.InputGuardrailResult] にラップされます。 -3. 最後に、[`.tripwire_triggered`][agents.guardrail.GuardrailFunctionOutput.tripwire_triggered] が true かどうかを確認します。true の場合、[`InputGuardrailTripwireTriggered`][agents.exceptions.InputGuardrailTripwireTriggered] 例外が送出され、ユーザーへの適切な応答や例外処理が可能になります。 +1. まず、ガードレールがエージェントに渡されたものと同じ入力を受け取ります。 +2. 次に、ガードレール関数が実行され、[`GuardrailFunctionOutput`][agents.guardrail.GuardrailFunctionOutput] を生成し、それが [`InputGuardrailResult`][agents.guardrail.InputGuardrailResult] に包まれます。 +3. 最後に、[`.tripwire_triggered`][agents.guardrail.GuardrailFunctionOutput.tripwire_triggered] が true かを確認します。true の場合、[`InputGuardrailTripwireTriggered`][agents.exceptions.InputGuardrailTripwireTriggered] 例外が送出され、ユーザーへの適切な応答や例外処理が可能になります。 -!!! 注意 +!!! Note - 入力ガードレールはユーザー入力に対して実行されることを想定しているため、あるエージェントのガードレールはそのエージェントが *最初* のエージェントである場合にのみ実行されます。なぜ `guardrails` プロパティがエージェント側にあり、`Runner.run` に渡さないのかと疑問に思うかもしれません。これは、ガードレールは実際のエージェントに密接に関連することが多いためです。エージェントごとに異なるガードレールを実行するので、コードを同じ場所に置くと可読性が向上します。 + 入力ガードレールはユーザー入力での実行を想定しているため、エージェントのガードレールはそのエージェントが「最初の」エージェントである場合にのみ実行されます。なぜ `guardrails` プロパティがエージェント側にあり、`Runner.run` に渡さないのかと思われるかもしれません。これは、ガードレールが実際のエージェントに密接に関連する傾向があるためです。エージェントごとに異なるガードレールを実行するので、コードを同じ場所に置くと可読性が向上します。 ## 出力ガードレール -出力ガードレールは 3 段階で実行されます: +出力ガードレールは 3 つのステップで実行されます: -1. まず、ガードレールはエージェントが生成した出力を受け取ります。 -2. 次に、ガードレール関数が実行され、[`GuardrailFunctionOutput`][agents.guardrail.GuardrailFunctionOutput] を生成し、それが [`OutputGuardrailResult`][agents.guardrail.OutputGuardrailResult] にラップされます。 -3. 最後に、[`.tripwire_triggered`][agents.guardrail.GuardrailFunctionOutput.tripwire_triggered] が true かどうかを確認します。true の場合、[`OutputGuardrailTripwireTriggered`][agents.exceptions.OutputGuardrailTripwireTriggered] 例外が送出され、ユーザーへの適切な応答や例外処理が可能になります。 +1. まず、ガードレールがエージェントによって生成された出力を受け取ります。 +2. 次に、ガードレール関数が実行され、[`GuardrailFunctionOutput`][agents.guardrail.GuardrailFunctionOutput] を生成し、それが [`OutputGuardrailResult`][agents.guardrail.OutputGuardrailResult] に包まれます。 +3. 最後に、[`.tripwire_triggered`][agents.guardrail.GuardrailFunctionOutput.tripwire_triggered] が true かを確認します。true の場合、[`OutputGuardrailTripwireTriggered`][agents.exceptions.OutputGuardrailTripwireTriggered] 例外が送出され、ユーザーへの適切な応答や例外処理が可能になります。 -!!! 注意 +!!! Note - 出力ガードレールは最終的なエージェント出力に対して実行されることを想定しているため、あるエージェントのガードレールはそのエージェントが *最後* のエージェントである場合にのみ実行されます。入力ガードレールと同様に、ガードレールは実際のエージェントに密接に関連することが多いため、コードを同じ場所に置くと可読性が向上します。 + 出力ガードレールは最終的なエージェントの出力での実行を想定しているため、エージェントのガードレールはそのエージェントが「最後の」エージェントである場合にのみ実行されます。入力ガードレールと同様に、ガードレールは実際のエージェントに密接に関連する傾向があるため、コードを同じ場所に置くと可読性が向上します。 ## トリップワイヤー -入力または出力がガードレールに不合格となった場合、ガードレールはトリップワイヤーでそれを示すことができます。トリップワイヤーが作動したガードレールを検出するとすぐに、 {Input,Output}GuardrailTripwireTriggered 例外を送出し、エージェントの実行を停止します。 +入力または出力がガードレールに失敗した場合、ガードレールはトリップワイヤーでそれを通知できます。トリップワイヤーが作動したガードレールを検知するとすぐに `{Input,Output}GuardrailTripwireTriggered` 例外を送出し、エージェント実行を停止します。 ## ガードレールの実装 @@ -94,10 +94,10 @@ async def main(): print("Math homework guardrail tripped") ``` -1. このエージェントをガードレール関数内で使用します。 -2. これが、エージェントの入力/コンテキストを受け取り、結果を返すガードレール関数です。 +1. このエージェントをガードレール関数で使用します。 +2. これはエージェントの入力/コンテキストを受け取り、結果を返すガードレール関数です。 3. ガードレール結果に追加情報を含めることができます。 -4. これがワークフローを定義する実際のエージェントです。 +4. これはワークフローを定義する実際のエージェントです。 出力ガードレールも同様です。 @@ -154,5 +154,5 @@ async def main(): 1. これは実際のエージェントの出力型です。 2. これはガードレールの出力型です。 -3. これが、エージェントの出力を受け取り、結果を返すガードレール関数です。 -4. これがワークフローを定義する実際のエージェントです。 \ No newline at end of file +3. これはエージェントの出力を受け取り、結果を返すガードレール関数です。 +4. これはワークフローを定義する実際のエージェントです。 \ No newline at end of file diff --git a/docs/ja/handoffs.md b/docs/ja/handoffs.md index 5dccc9d29..fe298c77d 100644 --- a/docs/ja/handoffs.md +++ b/docs/ja/handoffs.md @@ -2,21 +2,21 @@ search: exclude: true --- -# Handoffs +# ハンドオフ -Handoffs は、あるエージェントが別のエージェントにタスクを委任できるようにする機能です。これは、異なるエージェントがそれぞれ別個の分野を専門としている状況で特に有用です。たとえば、カスタマーサポートアプリでは、注文状況、返金、FAQ などのタスクをそれぞれ専門に扱うエージェントがいるかもしれません。 +ハンドオフは、ある エージェント が別の エージェント にタスクを委譲できる仕組みです。これは、異なる エージェント がそれぞれ異なる分野を専門としている状況で特に有用です。例えば、カスタマーサポートアプリでは、注文状況、返金、FAQ などのタスクを個別に処理する エージェント を用意できます。 -Handoffs は LLM に対してツールとして表現されます。たとえば、`Refund Agent` という名前のエージェントへの handoff がある場合、ツール名は `transfer_to_refund_agent` になります。 +ハンドオフは LLM に対してはツールとして表現されます。たとえば、`Refund Agent` という エージェント へのハンドオフがある場合、そのツール名は `transfer_to_refund_agent` になります。 -## Handoff の作成 +## ハンドオフの作成 -すべてのエージェントには [`handoffs`][agents.agent.Agent.handoffs] パラメーターがあり、これは `Agent` を直接渡すか、Handoff をカスタマイズする `Handoff` オブジェクトを受け取れます。 +すべての エージェント は [`handoffs`][agents.agent.Agent.handoffs] パラメーターを持ち、これは `Agent` を直接渡すか、ハンドオフをカスタマイズする `Handoff` オブジェクトを受け取ります。 -Agents SDK が提供する [`handoff()`][agents.handoffs.handoff] 関数を使って handoff を作成できます。この関数では、引き渡し先のエージェントに加えて、任意の上書き設定や入力フィルターを指定できます。 +Agents SDK が提供する [`handoff()`][agents.handoffs.handoff] 関数を使ってハンドオフを作成できます。この関数により、引き継ぎ先の エージェント を指定し、さらに任意で上書き設定や入力フィルターを指定できます。 ### 基本的な使い方 -次のようにシンプルな handoff を作成できます。 +シンプルなハンドオフの作成方法は次のとおりです。 ```python from agents import Agent, handoff @@ -28,19 +28,19 @@ refund_agent = Agent(name="Refund agent") triage_agent = Agent(name="Triage agent", handoffs=[billing_agent, handoff(refund_agent)]) ``` -1. エージェントを直接使う(`billing_agent` のように)ことも、`handoff()` 関数を使うこともできます。 +1. `billing_agent` のように エージェント を直接使うことも、`handoff()` 関数を使うこともできます。 -### `handoff()` 関数による Handoff のカスタマイズ +### `handoff()` 関数によるハンドオフのカスタマイズ -[`handoff()`][agents.handoffs.handoff] 関数でさまざまにカスタマイズできます。 +[`handoff()`][agents.handoffs.handoff] 関数を使うと、さまざまなカスタマイズが可能です。 -- `agent`: 引き渡し先のエージェントです。 -- `tool_name_override`: 既定では `Handoff.default_tool_name()` が使われ、`transfer_to_` に解決されます。これを上書きできます。 +- `agent`: 引き継ぎ先の エージェント です。 +- `tool_name_override`: 既定では `Handoff.default_tool_name()` 関数が使われ、`transfer_to_` に解決されます。これを上書きできます。 - `tool_description_override`: `Handoff.default_tool_description()` による既定のツール説明を上書きします。 -- `on_handoff`: handoff が呼び出されたときに実行されるコールバック関数です。handoff が呼ばれたことがわかった時点でデータ取得を開始する、などに便利です。この関数はエージェントのコンテキストを受け取り、オプションで LLM が生成した入力も受け取れます。入力データは `input_type` パラメーターで制御します。 -- `input_type`: handoff で想定される入力の型(任意)です。 -- `input_filter`: 次のエージェントが受け取る入力をフィルタリングできます。詳細は以下を参照してください。 -- `is_enabled`: handoff を有効にするかどうか。真偽値または真偽値を返す関数を指定でき、実行時に handoff を動的に有効化・無効化できます。 +- `on_handoff`: ハンドオフが呼び出されたときに実行されるコールバック関数です。ハンドオフが実行されると分かった時点でデータ取得を開始するなどに便利です。この関数はエージェントのコンテキストを受け取り、任意で LLM が生成した入力も受け取れます。入力データは `input_type` パラメーターで制御します。 +- `input_type`: ハンドオフが期待する入力の型(任意)です。 +- `input_filter`: 次の エージェント が受け取る入力をフィルタリングできます。詳細は以下を参照してください。 +- `is_enabled`: ハンドオフを有効にするかどうか。真偽値、または実行時に動的に有効・無効を切り替える真偽値を返す関数を指定できます。 ```python from agents import Agent, handoff, RunContextWrapper @@ -58,9 +58,9 @@ handoff_obj = handoff( ) ``` -## Handoff の入力 +## ハンドオフ入力 -状況によっては、handoff を呼ぶ際に LLM によるデータ提供が必要になることがあります。たとえば「エスカレーションエージェント」への handoff を想定すると、ログ用に理由を渡したくなるかもしれません。 +状況によっては、ハンドオフを呼び出す際に LLM にいくつかのデータを提供してほしい場合があります。例えば「エスカレーション エージェント」へのハンドオフを想定すると、記録のために理由を渡したくなるかもしれません。 ```python from pydantic import BaseModel @@ -84,9 +84,9 @@ handoff_obj = handoff( ## 入力フィルター -handoff が発生すると、新しいエージェントが会話を引き継ぎ、それまでの会話履歴全体を確認できる状態になります。これを変更したい場合は、[`input_filter`][agents.handoffs.Handoff.input_filter] を設定できます。入力フィルターは、既存の入力を [`HandoffInputData`][agents.handoffs.HandoffInputData] 経由で受け取り、新しい `HandoffInputData` を返す関数です。 +ハンドオフが発生すると、新しい エージェント が会話を引き継ぎ、これまでの会話履歴全体を参照できるようになります。これを変更したい場合は、[`input_filter`][agents.handoffs.Handoff.input_filter] を設定できます。入力フィルターは、[`HandoffInputData`][agents.handoffs.HandoffInputData] を介して既存の入力を受け取り、新しい `HandoffInputData` を返す関数です。 -いくつかの一般的なパターン(たとえば履歴からすべてのツール呼び出しを削除するなど)は、[`agents.extensions.handoff_filters`][] に実装済みです。 +一般的なパターン(例: 履歴からすべてのツール呼び出しを削除する)については、[`agents.extensions.handoff_filters`][] に実装済みのものがあります。 ```python from agents import Agent, handoff @@ -100,11 +100,11 @@ handoff_obj = handoff( ) ``` -1. これにより、`FAQ agent` が呼ばれたとき、履歴からすべてのツールが自動的に削除されます。 +1. これは、`FAQ agent` が呼び出されたときに履歴から自動的にすべてのツールを削除します。 ## 推奨プロンプト -LLM が handoffs を正しく理解できるように、エージェント内に handoffs に関する情報を含めることを推奨します。[`agents.extensions.handoff_prompt.RECOMMENDED_PROMPT_PREFIX`][] に推奨のプレフィックスがあり、または [`agents.extensions.handoff_prompt.prompt_with_handoff_instructions`][] を呼び出して、推奨データをプロンプトに自動追加できます。 +LLM がハンドオフを正しく理解できるようにするため、エージェント にハンドオフに関する情報を含めることを推奨します。[`agents.extensions.handoff_prompt.RECOMMENDED_PROMPT_PREFIX`][] に推奨のプレフィックスがあり、または [`agents.extensions.handoff_prompt.prompt_with_handoff_instructions`][] を呼び出して、推奨データを自動的にプロンプトへ追加できます。 ```python from agents import Agent diff --git a/docs/ja/index.md b/docs/ja/index.md index 08089a99c..9fcc06ba1 100644 --- a/docs/ja/index.md +++ b/docs/ja/index.md @@ -4,31 +4,31 @@ search: --- # OpenAI Agents SDK -[OpenAI Agents SDK](https://github.com/openai/openai-agents-python) は、抽象化を最小限に抑えた軽量で使いやすいパッケージで、エージェント型の AI アプリを構築できます。これは、以前のエージェント向け実験である [Swarm](https://github.com/openai/swarm/tree/main) を本番運用向けにアップグレードしたものです。Agents SDK は、非常に少数の基本コンポーネントを備えています。 +[OpenAI Agents SDK](https://github.com/openai/openai-agents-python) は、抽象化が非常に少ない軽量で使いやすいパッケージで、エージェント 指向の AI アプリを構築できるようにします。これは、以前のエージェント 向け実験である [Swarm](https://github.com/openai/swarm/tree/main) の本番運用可能なアップグレードです。Agents SDK には、ごく少数の基本的な構成要素があります。 -- ** エージェント **: instructions と tools を備えた LLM -- ** ハンドオフ **: 特定のタスクを他のエージェントに委譲できる仕組み -- ** ガードレール **: エージェントの入力と出力の検証を可能にする仕組み -- ** セッション **: エージェントの実行間で会話履歴を自動的に維持 +- ** エージェント **、LLM に instructions と tools を備えたもの +- ** ハンドオフ **、特定のタスクについて他のエージェント へ委譲できる仕組み +- ** ガードレール **、エージェント の入力と出力の検証を可能にするもの +- ** セッション **、エージェント 実行間で会話履歴を自動的に維持するもの -Python と組み合わせることで、これらの基本コンポーネントはツールとエージェント間の複雑な関係を表現でき、学習コストをかけずに実運用のアプリケーションを構築できます。さらに、この SDK には組み込みの ** トレーシング ** があり、エージェントフローの可視化とデバッグ、評価、そしてアプリケーション向けのモデルの微調整まで行えます。 +Python と組み合わせることで、これらの基本的な構成要素はツールとエージェント 間の複雑な関係を表現でき、急な学習曲線なしに実世界のアプリケーションを構築できます。さらに、SDK には組み込みの ** トレーシング ** が付属しており、エージェント のフローを可視化してデバッグできるほか、評価したり、アプリケーション向けにモデルをファインチューニングすることもできます。 -## Agents SDK を使用する理由 +## Agents SDK を使う理由 -この SDK は次の 2 つの設計原則に基づいています。 +SDK の設計原則は 2 つあります。 -1. 使う価値があるだけの機能を備えつつ、学習が容易になるよう基本コンポーネントは最小限にする。 -2. そのままでも優れた動作をするが、挙動を細かくカスタマイズできる。 +1. 使う価値があるだけの機能は備えつつ、学習を速くするために基本的な構成要素は少数にとどめる。 +2. そのままでも高性能に動作しつつ、挙動を細部までカスタマイズできる。 SDK の主な機能は次のとおりです。 -- エージェントループ: ツールの呼び出し、結果の LLM への送信、LLM が完了するまでのループ処理を行う組み込みのエージェントループ。 -- Python ファースト: 新しい抽象を学ぶのではなく、言語の組み込み機能でエージェントのオーケストレーションや連鎖を実現。 -- ハンドオフ: 複数のエージェント間での調整と委譲を強力にサポート。 -- ガードレール: エージェントと並行して入力の検証やチェックを実行し、失敗時は早期に中断。 -- セッション: エージェントの実行間で会話履歴を自動管理し、手動の状態管理を不要に。 -- 関数ツール: 任意の Python 関数をツール化し、自動スキーマ生成と Pydantic ベースの検証を提供。 -- トレーシング: ワークフローの可視化・デバッグ・監視に加え、OpenAI の評価、微調整、蒸留ツールを活用可能な組み込みトレーシング。 +- エージェント ループ: ツール呼び出し、結果を LLM へ送信、LLM の完了までのループを自動で処理します。 +- Python ファースト: 新しい抽象化を学ぶ必要はなく、言語の組み込み機能でエージェント をオーケストレーションし、連携・連鎖できます。 +- ハンドオフ: 複数のエージェント 間での調整と委譲を実現する強力な機能です。 +- ガードレール: エージェント と並行して入力のバリデーションやチェックを実行し、失敗時には早期に打ち切ります。 +- セッション: エージェント 実行間の会話履歴を自動管理し、手動での状態管理を不要にします。 +- 関数ツール: 任意の Python 関数をツール化し、schema の自動生成と Pydantic ベースのバリデーションを提供します。 +- トレーシング: ワークフローの可視化・デバッグ・監視が可能な組み込みのトレーシングに加え、OpenAI の評価、ファインチューニング、蒸留ツール群を活用できます。 ## インストール @@ -36,7 +36,7 @@ SDK の主な機能は次のとおりです。 pip install openai-agents ``` -## Hello World のサンプル +## Hello World の例 ```python from agents import Agent, Runner diff --git a/docs/ja/mcp.md b/docs/ja/mcp.md index 49e256e5f..06066988e 100644 --- a/docs/ja/mcp.md +++ b/docs/ja/mcp.md @@ -4,23 +4,23 @@ search: --- # Model context protocol (MCP) -[Model context protocol](https://modelcontextprotocol.io/introduction)(別名 MCP)は、LLM にツールとコンテキストを提供する方法です。MCP のドキュメントより: +[Model context protocol](https://modelcontextprotocol.io/introduction) (aka MCP) は、 LLM にツールやコンテキストを提供するための方法です。 MCP のドキュメントより: -> MCP は、アプリケーションが LLM にコンテキストを提供する方法を標準化するオープンなプロトコルです。MCP は AI アプリケーション向けの USB‑C ポートのようなものだと考えてください。USB‑C がさまざまな周辺機器やアクセサリーにデバイスを接続するための標準化された方法を提供するのと同様に、MCP は AI モデルをさまざまなデータソースやツールに接続するための標準化された方法を提供します。 +> MCP は、アプリケーションが LLM にコンテキストを提供する方法を標準化するオープンなプロトコルです。 MCP は AI アプリケーション向けの USB-C ポートのようなものだと考えてください。 USB-C がデバイスをさまざまな周辺機器やアクセサリーに接続する標準的な方法を提供するのと同様に、 MCP は AI モデルをさまざまなデータソースやツールに接続する標準的な方法を提供します。 Agents SDK は MCP をサポートしています。これにより、幅広い MCP サーバーを使用して、エージェントにツールやプロンプトを提供できます。 -## MCP サーバー +## MCP servers -現在、MCP 仕様は使用するトランスポートメカニズムに基づいて 3 種類のサーバーを定義しています: +現在、 MCP の仕様は、使用するトランスポートメカニズムに基づいて 3 種類のサーバーを定義しています: -1. **stdio** サーバーは、アプリケーションのサブプロセスとして実行されます。いわば「ローカル」で実行されます。 -2. **HTTP over SSE** サーバーはリモートで実行されます。URL を介して接続します。 -3. **Streamable HTTP** サーバーは、MCP 仕様で定義された Streamable HTTP トランスポートを使用してリモートで実行されます。 +1. **stdio** サーバーは、アプリケーションのサブプロセスとして実行されます。いわゆる「ローカル」で動作すると考えられます。 +2. **HTTP over SSE** サーバーはリモートで実行されます。 URL を介して接続します。 +3. **Streamable HTTP** サーバーは、 MCP の仕様で定義された Streamable HTTP トランスポートを使用してリモートで実行されます。 -これらのサーバーには、[`MCPServerStdio`][agents.mcp.server.MCPServerStdio]、[`MCPServerSse`][agents.mcp.server.MCPServerSse]、[`MCPServerStreamableHttp`][agents.mcp.server.MCPServerStreamableHttp] クラスを使用して接続できます。 +これらのサーバーに接続するには、[`MCPServerStdio`][agents.mcp.server.MCPServerStdio]、[`MCPServerSse`][agents.mcp.server.MCPServerSse]、[`MCPServerStreamableHttp`][agents.mcp.server.MCPServerStreamableHttp] クラスを使用できます。 -たとえば、[公式 MCP filesystem サーバー](https://www.npmjs.com/package/@modelcontextprotocol/server-filesystem)を次のように使用します。 +たとえば、[official MCP filesystem server](https://www.npmjs.com/package/@modelcontextprotocol/server-filesystem) を使用する方法は次のとおりです。 ```python from agents.run_context import RunContextWrapper @@ -39,9 +39,9 @@ async with MCPServerStdio( tools = await server.list_tools(run_context, agent) ``` -## MCP サーバーの使用 +## Using MCP servers -MCP サーバーはエージェントに追加できます。Agents SDK は、エージェントが実行されるたびに MCP サーバー上で `list_tools()` を呼び出します。これにより、LLM は MCP サーバーのツールを認識します。LLM が MCP サーバーのツールを呼び出すと、SDK はそのサーバー上で `call_tool()` を呼び出します。 +MCP サーバーはエージェントに追加できます。 Agents SDK は、エージェントが実行されるたびに MCP サーバー上で `list_tools()` を呼び出します。これにより、 LLM は MCP サーバーのツールを認識できます。 LLM が MCP サーバーのツールを呼び出すと、 SDK はそのサーバー上で `call_tool()` を呼び出します。 ```python @@ -52,13 +52,13 @@ agent=Agent( ) ``` -## ツールのフィルタリング +## Tool filtering -MCP サーバーでツールフィルターを構成することで、エージェントで利用可能なツールを絞り込めます。SDK は静的および動的の両方のツールフィルタリングをサポートします。 +MCP サーバー上でツールフィルターを構成することで、エージェントで使用可能なツールをフィルタリングできます。 SDK は静的および動的の両方のツールフィルタリングをサポートします。 -### 静的ツールフィルタリング +### Static tool filtering -シンプルな許可/ブロックリストには、静的フィルタリングを使用できます: +単純な許可/ブロックリストには、静的フィルタリングを使用できます: ```python from agents.mcp import create_static_tool_filter @@ -87,15 +87,15 @@ server = MCPServerStdio( ``` -**`allowed_tool_names` と `blocked_tool_names` の両方が設定されている場合、処理順序は次のとおりです:** -1. まず `allowed_tool_names`(許可リスト)を適用 — 指定したツールのみを残す -2. 次に `blocked_tool_names`(ブロックリスト)を適用 — 残ったツールから指定したものを除外 +**`allowed_tool_names` と `blocked_tool_names` の両方が構成されている場合、処理順序は次のとおりです:** +1. まず `allowed_tool_names`(許可リスト)を適用し、指定されたツールのみを残します +2. 次に `blocked_tool_names`(ブロックリスト)を適用し、残ったツールから指定されたツールを除外します -例えば、`allowed_tool_names=["read_file", "write_file", "delete_file"]` と `blocked_tool_names=["delete_file"]` を構成すると、`read_file` と `write_file` のツールのみが利用可能になります。 +たとえば、`allowed_tool_names=["read_file", "write_file", "delete_file"]` と `blocked_tool_names=["delete_file"]` を構成した場合、利用可能なのは `read_file` と `write_file` のツールのみになります。 -### 動的ツールフィルタリング +### Dynamic tool filtering -より複雑なフィルタリングロジックには、関数を用いた動的フィルターを使用できます: +より複雑なフィルタリングロジックには、関数による動的フィルターを使用できます: ```python from agents.mcp import ToolFilterContext @@ -137,18 +137,18 @@ server = MCPServerStdio( `ToolFilterContext` では次にアクセスできます: - `run_context`: 現在の実行コンテキスト - `agent`: ツールを要求しているエージェント -- `server_name`: MCP サーバーの名前 +- `server_name`: MCP サーバー名 -## プロンプト +## Prompts -MCP サーバーは、エージェントの指示を動的に生成するために使用できるプロンプトも提供できます。これにより、パラメーターでカスタマイズ可能な再利用可能な指示テンプレートを作成できます。 +MCP サーバーは、エージェントの instructions を動的に生成するために使用できるプロンプトも提供できます。これにより、パラメーターでカスタマイズ可能な再利用可能な instructions テンプレートを作成できます。 -### プロンプトの使用 +### Using prompts -プロンプトをサポートする MCP サーバーは、次の 2 つの主要メソッドを提供します: +プロンプトをサポートする MCP サーバーは、次の 2 つの主要なメソッドを提供します: -- `list_prompts()`: サーバーで利用可能なすべてのプロンプトを一覧表示 -- `get_prompt(name, arguments)`: 任意のパラメーター付きで特定のプロンプトを取得 +- `list_prompts()`: サーバー上で利用可能なすべてのプロンプトを一覧表示します +- `get_prompt(name, arguments)`: 任意のパラメーター付きで特定のプロンプトを取得します ```python # List available prompts @@ -171,21 +171,21 @@ agent = Agent( ) ``` -## キャッシュ +## Caching -エージェントが実行されるたびに、MCP サーバー上で `list_tools()` が呼び出されます。これは、特にサーバーがリモートサーバーの場合、レイテンシーの要因になり得ます。ツール一覧を自動的にキャッシュするには、[`MCPServerStdio`][agents.mcp.server.MCPServerStdio]、[`MCPServerSse`][agents.mcp.server.MCPServerSse]、[`MCPServerStreamableHttp`][agents.mcp.server.MCPServerStreamableHttp] に `cache_tools_list=True` を渡します。ツール一覧が変更されないことが確実な場合にのみ行ってください。 +エージェントが実行されるたびに、 MCP サーバー上で `list_tools()` が呼び出されます。特にサーバーがリモートサーバーの場合、これはレイテンシーに影響する可能性があります。ツールの一覧を自動的にキャッシュするには、[`MCPServerStdio`][agents.mcp.server.MCPServerStdio]、[`MCPServerSse`][agents.mcp.server.MCPServerSse]、[`MCPServerStreamableHttp`][agents.mcp.server.MCPServerStreamableHttp] に `cache_tools_list=True` を渡します。これは、ツール一覧が変更されないことが確実な場合にのみ行ってください。 -キャッシュを無効化したい場合は、サーバー上で `invalidate_tools_cache()` を呼び出せます。 +キャッシュを無効化したい場合は、サーバーで `invalidate_tools_cache()` を呼び出せます。 -## エンドツーエンドの code examples +## End-to-end examples -完全に動作する例は [examples/mcp](https://github.com/openai/openai-agents-python/tree/main/examples/mcp) を参照してください。 +[examples/mcp](https://github.com/openai/openai-agents-python/tree/main/examples/mcp) で、完全に動作する code examples をご覧ください。 -## トレーシング +## Tracing -[トレーシング](./tracing.md) は、次を含む MCP の操作を自動的に捕捉します: +[Tracing](./tracing.md) は、次を含む MCP の操作を自動的に捕捉します: -1. ツールを一覧表示するための MCP サーバーへの呼び出し +1. ツール一覧の取得のための MCP サーバーへの呼び出し 2. 関数呼び出しに関する MCP 関連情報 -![MCP トレーシングのスクリーンショット](../assets/images/mcp-tracing.jpg) \ No newline at end of file +![MCP Tracing Screenshot](../assets/images/mcp-tracing.jpg) \ No newline at end of file diff --git a/docs/ja/models/index.md b/docs/ja/models/index.md index 8054601a7..abfd801c9 100644 --- a/docs/ja/models/index.md +++ b/docs/ja/models/index.md @@ -4,51 +4,92 @@ search: --- # モデル -Agents SDK は、次の 2 つの形で OpenAI モデルをすぐに使える形でサポートします。 +Agents SDK には、OpenAI モデルのサポートが次の 2 つの形で標準搭載されています。 -- **推奨**: [`OpenAIResponsesModel`][agents.models.openai_responses.OpenAIResponsesModel]。新しい [Responses API](https://platform.openai.com/docs/api-reference/responses) を使って OpenAI API を呼び出します。 -- [`OpenAIChatCompletionsModel`][agents.models.openai_chatcompletions.OpenAIChatCompletionsModel]。 [Chat Completions API](https://platform.openai.com/docs/api-reference/chat) を使って OpenAI API を呼び出します。 +- **推奨**: [`OpenAIResponsesModel`][agents.models.openai_responses.OpenAIResponsesModel]。新しい [Responses API](https://platform.openai.com/docs/api-reference/responses) を使用して OpenAI API を呼び出します。 +- [`OpenAIChatCompletionsModel`][agents.models.openai_chatcompletions.OpenAIChatCompletionsModel]。 [Chat Completions API](https://platform.openai.com/docs/api-reference/chat) を使用して OpenAI API を呼び出します。 -## OpenAI 以外のモデル +## OpenAI モデル -[LiteLLM との統合](./litellm.md)を使って、ほとんどの OpenAI 以外のモデルを利用できます。まず、 litellm の依存関係グループをインストールします。 +`Agent` を初期化する際にモデルを指定しない場合は、デフォルトのモデルが使用されます。現在のデフォルトは [`gpt-4.1`](https://platform.openai.com/docs/models/gpt-4.1) で、エージェント型ワークフローの予測可能性と低レイテンシのバランスに優れています。 + +[`gpt-5`](https://platform.openai.com/docs/models/gpt-5) のような他のモデルに切り替えたい場合は、次のセクションの手順に従ってください。 + +### 既定の OpenAI モデル + +すべての エージェント でカスタムモデルを設定していない場合に特定のモデルを一貫して使いたいときは、エージェント を実行する前に環境変数 `OPENAI_DEFAULT_MODEL` を設定してください。 + +```bash +export OPENAI_DEFAULT_MODEL=gpt-5 +python3 my_awesome_agent.py +``` + +#### GPT-5 モデル + +この方法で GPT-5 の reasoning モデル([`gpt-5`](https://platform.openai.com/docs/models/gpt-5)、[`gpt-5-mini`](https://platform.openai.com/docs/models/gpt-5-mini)、または [`gpt-5-nano`](https://platform.openai.com/docs/models/gpt-5-nano))を使用する場合、SDK は既定で妥当な `ModelSettings` を適用します。具体的には、`reasoning.effort` と `verbosity` の両方を `"low"` に設定します。これらの設定を自分で構築したい場合は、`agents.models.get_default_model_settings("gpt-5")` を呼び出してください。 + +レイテンシをさらに下げたい場合や特定の要件がある場合は、別のモデルと設定を選択できます。デフォルトモデルの reasoning effort を調整するには、独自の `ModelSettings` を渡します。 + +```python +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`](https://platform.openai.com/docs/models/gpt-5-mini) または [`gpt-5-nano`](https://platform.openai.com/docs/models/gpt-5-nano) に `reasoning.effort="minimal"` を指定すると、デフォルト設定よりも高速に応答が返ることが多いです。ただし、Responses API のいくつかのビルトインツール(ファイル検索 や画像生成など)は `"minimal"` の reasoning effort をサポートしていません。そのため、この Agents SDK のデフォルトは `"low"` になっています。 + +#### 非 GPT-5 モデル + +カスタムの `model_settings` なしで GPT-5 以外のモデル名を渡した場合、SDK はあらゆるモデルに互換性のある汎用の `ModelSettings` にフォールバックします。 + +## 非 OpenAI モデル + +[LiteLLM 連携](./litellm.md) を通じて、ほとんどの非 OpenAI モデルを使用できます。まず、litellm の依存関係グループをインストールします。 ```bash pip install "openai-agents[litellm]" ``` -次に、 `litellm/` プレフィックスを付けて、[対応モデル](https://docs.litellm.ai/docs/providers) のいずれかを使います。 +次に、`litellm/` プレフィックスを付けて [対応モデル](https://docs.litellm.ai/docs/providers) を使用します。 ```python 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 モデルを使用するその他の方法 +### 非 OpenAI モデルを使用する他の方法 -他の LLM プロバイダーは、さらに 3 つの方法で統合できます(code examples は [こちら](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/))。 +他の LLM プロバイダーを、さらに 3 つの方法で統合できます(code examples は[こちら](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/))。 -1. [`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](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/custom_example_global.py) を参照してください。 -2. [`ModelProvider`][agents.models.interface.ModelProvider] は `Runner.run` レベルにあります。これにより、「この実行のすべての エージェント に対してカスタムのモデルプロバイダーを使う」と指定できます。設定可能な例は [examples/model_providers/custom_example_provider.py](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/custom_example_provider.py) を参照してください。 -3. [`Agent.model`][agents.agent.Agent.model] は、特定の Agent インスタンスでモデルを指定できます。これにより、エージェント ごとに異なるプロバイダーを組み合わせて使えます。設定可能な例は [examples/model_providers/custom_example_agent.py](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/custom_example_agent.py) を参照してください。利用可能なモデルの多くを簡単に使う方法は、[LiteLLM との統合](./litellm.md)です。 +1. [`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](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/custom_example_global.py) を参照してください。 +2. [`ModelProvider`][agents.models.interface.ModelProvider] は `Runner.run` レベルにあります。これにより、「この実行でのすべての エージェント にカスタムのモデルプロバイダーを使う」と指定できます。設定可能なサンプルは [examples/model_providers/custom_example_provider.py](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/custom_example_provider.py) を参照してください。 +3. [`Agent.model`][agents.agent.Agent.model] では、特定の Agent インスタンスでモデルを指定できます。これにより、エージェント ごとに異なるプロバイダーを組み合わせることができます。ほとんどの利用可能なモデルを簡単に使うには、[LiteLLM 連携](./litellm.md) が便利です。 -`platform.openai.com` の API キーを持っていない場合は、`set_tracing_disabled()` でトレーシングを無効化するか、[別のトレーシング プロセッサー](../tracing.md) を設定することをお勧めします。 +`platform.openai.com` の API キーがない場合は、`set_tracing_disabled()` で トレーシング を無効化するか、[別の トレーシング プロセッサー](../tracing.md) を設定することをおすすめします。 !!! note - これらの code examples では、ほとんどの LLM プロバイダーがまだ Responses API をサポートしていないため、Chat Completions API/モデルを使用しています。お使いの LLM プロバイダーが対応している場合は、Responses の使用をお勧めします。 + これらの code examples では Chat Completions API/モデルを使用しています。これは、多くの LLM プロバイダーがまだ Responses API をサポートしていないためです。プロバイダーがサポートしている場合は、Responses の使用をおすすめします。 ## モデルの組み合わせ -単一のワークフロー内で、エージェント ごとに異なるモデルを使いたい場合があります。たとえば、トリアージには小型で高速なモデルを使い、複雑なタスクにはより大きく高性能なモデルを使う、といった使い分けです。[`Agent`][agents.Agent] を設定する際、次のいずれかで特定のモデルを選べます。 +単一のワークフロー内で、エージェント ごとに異なるモデルを使用したい場合があります。たとえば、振り分けには小さく高速なモデルを使用し、複雑なタスクにはより大きく高性能なモデルを使用できます。[`Agent`][agents.Agent] を設定する際、以下のいずれかで特定のモデルを選択できます。 -1. モデル名を渡す。 +1. モデル名を直接渡す。 2. 任意のモデル名と、それを Model インスタンスにマッピングできる [`ModelProvider`][agents.models.interface.ModelProvider] を渡す。 -3. [`Model`][agents.models.interface.Model] の実装を直接指定する。 +3. [`Model`][agents.models.interface.Model] 実装を直接渡す。 !!!note - 本 SDK は [`OpenAIResponsesModel`][agents.models.openai_responses.OpenAIResponsesModel] と [`OpenAIChatCompletionsModel`][agents.models.openai_chatcompletions.OpenAIChatCompletionsModel] の両方の形をサポートしますが、それぞれがサポートする機能やツールの集合が異なるため、ワークフローごとに 1 つのモデル形に統一することをお勧めします。ワークフロー上でモデル形を混在させる必要がある場合は、使用するすべての機能が両方で利用可能であることを確認してください。 + この SDK は [`OpenAIResponsesModel`][agents.models.openai_responses.OpenAIResponsesModel] と [`OpenAIChatCompletionsModel`][agents.models.openai_chatcompletions.OpenAIChatCompletionsModel] の両方の形をサポートしていますが、両者はサポートする機能やツールのセットが異なるため、各ワークフローでは 1 種類のモデル形状のみを使用することをおすすめします。ワークフローでモデル形状を混在させる必要がある場合は、使用するすべての機能が両方で利用可能であることを確認してください。 ```python from agents import Agent, Runner, AsyncOpenAI, OpenAIChatCompletionsModel @@ -57,14 +98,14 @@ import asyncio spanish_agent = Agent( name="Spanish agent", instructions="You only speak Spanish.", - model="o3-mini", # (1)! + model="gpt-5-mini", # (1)! ) english_agent = Agent( name="English agent", instructions="You only speak English", model=OpenAIChatCompletionsModel( # (2)! - model="gpt-4o", + model="gpt-5-nano", openai_client=AsyncOpenAI() ), ) @@ -73,7 +114,7 @@ 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", + model="gpt-5", ) async def main(): @@ -82,9 +123,9 @@ async def main(): ``` 1. OpenAI モデルの名前を直接設定します。 -2. [`Model`][agents.models.interface.Model] の実装を提供します。 +2. [`Model`][agents.models.interface.Model] 実装を提供します。 -エージェント に使うモデルをさらに細かく設定したい場合は、[`ModelSettings`][agents.models.interface.ModelSettings] を渡します。これは、temperature などの任意のモデル設定パラメーターを提供します。 +エージェント で使用するモデルをさらに構成したい場合は、`temperature` などのオプションのモデル構成 パラメーター を提供する [`ModelSettings`][agents.models.interface.ModelSettings] を渡せます。 ```python from agents import Agent, ModelSettings @@ -92,12 +133,12 @@ from agents import Agent, ModelSettings english_agent = Agent( name="English agent", instructions="You only speak English", - model="gpt-4o", + model="gpt-4.1", model_settings=ModelSettings(temperature=0.1), ) ``` -また、OpenAI の Responses API を使用する際には、[ほかにもいくつかの任意パラメーター](https://platform.openai.com/docs/api-reference/responses/create)(例: `user`、`service_tier` など)があります。トップレベルで指定できない場合は、`extra_args` を使って渡せます。 +また、OpenAI の Responses API を使用する場合、[他にもいくつかの任意 パラメーター](https://platform.openai.com/docs/api-reference/responses/create)(例: `user`、`service_tier` など)があります。トップレベルで指定できない場合は、`extra_args` を使用して渡せます。 ```python from agents import Agent, ModelSettings @@ -105,7 +146,7 @@ from agents import Agent, ModelSettings english_agent = Agent( name="English agent", instructions="You only speak English", - model="gpt-4o", + model="gpt-4.1", model_settings=ModelSettings( temperature=0.1, extra_args={"service_tier": "flex", "user": "user_12345"}, @@ -113,26 +154,26 @@ english_agent = Agent( ) ``` -## 他の LLM プロバイダー利用時の一般的な問題 +## 他の LLM プロバイダー使用時の一般的な問題 -### トレーシング クライアント エラー 401 +### Tracing クライアントのエラー 401 -トレーシング に関するエラーが発生する場合、トレースは OpenAI の サーバー にアップロードされ、OpenAI の API キーをお持ちでないことが原因です。解決策は次の 3 つです。 +トレーシング に関連するエラーが発生する場合、トレースは OpenAI の サーバー にアップロードされるため、OpenAI の API キーがないことが原因です。次の 3 つの方法で解決できます。 1. トレーシング を完全に無効化する: [`set_tracing_disabled(True)`][agents.set_tracing_disabled]。 -2. トレーシング 用の OpenAI キーを設定する: [`set_tracing_export_api_key(...)`][agents.set_tracing_export_api_key]。この API キーはトレースのアップロードのみに使用され、[platform.openai.com](https://platform.openai.com/) のものが必要です。 -3. OpenAI 以外のトレース プロセッサーを使用する。[tracing ドキュメント](../tracing.md#custom-tracing-processors) を参照してください。 +2. トレーシング 用の OpenAI キーを設定する: [`set_tracing_export_api_key(...)`][agents.set_tracing_export_api_key]。この API キーはトレースのアップロードのみに使用され、[platform.openai.com](https://platform.openai.com/) のものを使用する必要があります。 +3. 非 OpenAI の trace プロセッサーを使用する。[トレーシングのドキュメント](../tracing.md#custom-tracing-processors) を参照してください。 ### Responses API のサポート -SDK は既定で Responses API を使用しますが、他の多くの LLM プロバイダーはまだ対応していません。その結果、404 などの問題が発生することがあります。解決するには次の 2 つの方法があります。 +SDK は既定で Responses API を使用しますが、他の多くの LLM プロバイダーはまだサポートしていません。その結果、404 などの問題が発生する場合があります。解決するには、次の 2 つの方法があります。 -1. [`set_default_openai_api("chat_completions")`][agents.set_default_openai_api] を呼び出します。これは環境変数で `OPENAI_API_KEY` と `OPENAI_BASE_URL` を設定している場合に機能します。 -2. [`OpenAIChatCompletionsModel`][agents.models.openai_chatcompletions.OpenAIChatCompletionsModel] を使用します。code examples は [こちら](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/) にあります。 +1. [`set_default_openai_api("chat_completions")`][agents.set_default_openai_api] を呼び出します。これは、環境変数で `OPENAI_API_KEY` と `OPENAI_BASE_URL` を設定している場合に機能します。 +2. [`OpenAIChatCompletionsModel`][agents.models.openai_chatcompletions.OpenAIChatCompletionsModel] を使用します。code examples は[こちら](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/)にあります。 ### structured outputs のサポート -一部のモデルプロバイダーは [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) をサポートしていません。これにより、次のようなエラーが発生することがあります。 +一部のモデルプロバイダーは [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) をサポートしていません。この場合、次のようなエラーが発生することがあります。 ``` @@ -140,12 +181,12 @@ BadRequestError: Error code: 400 - {'error': {'message': "'response_format.type' ``` -これは一部のモデルプロバイダーの制約で、JSON 出力はサポートしていても、出力に使用する `json_schema` を指定できません。現在この点の改善に取り組んでいますが、アプリが不正な JSON によって頻繁に壊れてしまうのを避けるため、JSON Schema 出力をサポートしているプロバイダーを使用することをお勧めします。 +これは一部のモデルプロバイダー側の不足で、JSON 出力はサポートしていても、出力に使用する `json_schema` を指定できません。現在この問題への対策に取り組んでいますが、JSON schema 出力をサポートするプロバイダーを利用することをおすすめします。そうでない場合、不正な形式の JSON によりアプリが頻繁に動作しなくなる可能性があります。 -## プロバイダー間でのモデルの混在 +## プロバイダー間でのモデル混在 -モデルプロバイダー間の機能差に注意しないと、エラーに直面する可能性があります。たとえば OpenAI は structured outputs、マルチモーダル入力、OpenAI がホストする ファイル検索 と Web 検索 をサポートしていますが、他の多くのプロバイダーはこれらの機能をサポートしていません。次の制約に注意してください。 +モデルプロバイダー間の機能差を把握しておかないと、エラーが発生する場合があります。たとえば、OpenAI は structured outputs、マルチモーダル入力、ホスト型の ファイル検索 および Web 検索 をサポートしますが、他の多くのプロバイダーはこれらをサポートしていません。以下の制約に注意してください。 -- サポートされていない `tools` を理解しないプロバイダーに送らない -- テキスト専用モデルを呼び出す前に、マルチモーダル入力を除外する -- structured JSON 出力をサポートしないプロバイダーは、無効な JSON を出力することがある点に注意する \ No newline at end of file +- サポートされていない `tools` を理解できないプロバイダーに送らないでください +- テキスト専用モデルを呼び出す前に、マルチモーダル入力を除外してください +- 構造化された JSON 出力をサポートしないプロバイダーは、時折無効な JSON を生成する場合があります \ No newline at end of file diff --git a/docs/ja/models/litellm.md b/docs/ja/models/litellm.md index 520ed92a5..fa1edd7b5 100644 --- a/docs/ja/models/litellm.md +++ b/docs/ja/models/litellm.md @@ -2,17 +2,17 @@ search: exclude: true --- -# LiteLLM 経由の任意のモデル利用 +# LiteLLM 経由で任意のモデルの利用 !!! note - LiteLLM 連携はベータです。特に小規模なモデルプロバイダーでは問題が発生する可能性があります。問題があれば [GitHub Issues](https://github.com/openai/openai-agents-python/issues) から報告してください。迅速に修正します。 + LiteLLM の統合はベータ版です。特に小規模なモデルプロバイダーで問題が発生する可能性があります。問題があれば [GitHub Issues](https://github.com/openai/openai-agents-python/issues) から報告してください。迅速に対応します。 -[LiteLLM](https://docs.litellm.ai/docs/) は、単一のインターフェースで 100+ のモデルを使用できるライブラリです。Agents SDK に LiteLLM 連携を追加し、任意の AI モデルを使用できるようにしました。 +[LiteLLM](https://docs.litellm.ai/docs/) は、単一のインターフェースで 100 以上のモデルを利用できるライブラリです。Agents SDK に LiteLLM 統合を追加し、任意の AI モデルを利用できるようにしました。 ## セットアップ -`litellm` が利用可能であることを確認してください。オプションの `litellm` 依存関係グループをインストールすることで実現できます。 +`litellm` を利用可能にする必要があります。オプションの `litellm` 依存関係グループをインストールしてください。 ```bash pip install "openai-agents[litellm]" @@ -20,15 +20,15 @@ pip install "openai-agents[litellm]" 完了したら、任意の エージェント で [`LitellmModel`][agents.extensions.models.litellm_model.LitellmModel] を使用できます。 -## 例 +## コード例 -これは完全に動作する例です。実行すると、モデル名と API キーの入力を求められます。例えば、次を入力できます。 +これは完全に動作する例です。実行すると、モデル名と API キーの入力を求められます。例えば次のように入力できます。 -- `openai/gpt-4.1` をモデルに、OpenAI の API キー -- `anthropic/claude-3-5-sonnet-20240620` をモデルに、Anthropic の API キー +- モデルに `openai/gpt-4.1`、API キーにあなたの OpenAI API キー +- モデルに `anthropic/claude-3-5-sonnet-20240620`、API キーにあなたの Anthropic API キー - など -LiteLLM でサポートされているモデルの一覧は、[litellm providers ドキュメント](https://docs.litellm.ai/docs/providers) を参照してください。 +LiteLLM でサポートされているモデルの完全な一覧は、[LiteLLM プロバイダーのドキュメント](https://docs.litellm.ai/docs/providers) を参照してください。 ```python from __future__ import annotations diff --git a/docs/ja/multi_agent.md b/docs/ja/multi_agent.md index e3c78db8b..853a686bd 100644 --- a/docs/ja/multi_agent.md +++ b/docs/ja/multi_agent.md @@ -4,38 +4,38 @@ search: --- # 複数のエージェントのオーケストレーション -オーケストレーションとは、アプリ内でのエージェントの流れを指します。どのエージェントが、どの順序で実行され、次に何をするかをどのように決めるか、ということです。エージェントをオーケストレーションする主な方法は 2 つあります。 +オーケストレーションとは、アプリにおけるエージェントの流れのことです。どのエージェントをどの順序で実行し、次に何をするかをどのように決定するか、ということです。エージェントをオーケストレーションする方法は主に 2 つあります。 -1. LLM に意思決定させる: これは LLM の知性を用いて計画・推論し、それに基づいて次に取るべき手順を決めます。 +1. LLM に意思決定させる: LLM の知能を使って計画・推論し、それに基づいて次の手順を決めます。 2. コードでオーケストレーションする: コードでエージェントの流れを決定します。 -これらのパターンは組み合わせて使えます。各アプローチには以下のようなトレードオフがあります。 +これらのパターンは組み合わせて使えます。それぞれにトレードオフがあります(下記参照)。 ## LLM によるオーケストレーション -エージェントは、指示、ツール、ハンドオフを備えた LLM です。つまり、オープンエンドなタスクが与えられた場合、LLM はタスクへの取り組み方を自律的に計画し、ツールを使って行動やデータ取得を行い、ハンドオフでサブエージェントにタスクを委譲できます。例えば、リサーチ用のエージェントには次のようなツールを備えられます。 +エージェントは、指示・ツール・ハンドオフを備えた LLM です。これは、オープンエンドなタスクが与えられたときに、LLM が自律的にタスクへの取り組み方を計画し、ツールで行動やデータ取得を行い、ハンドオフでサブエージェントにタスクを委任できることを意味します。たとえば、リサーチ用のエージェントには次のようなツールを備えられます。 -- Web 検索でオンラインから情報を見つける -- ファイル検索と取得で独自データや接続を横断して検索する +- Web 検索でオンライン情報を探す +- ファイル検索と取得でプロプライエタリデータや接続先を横断的に検索する - コンピュータ操作でコンピュータ上のアクションを実行する - コード実行でデータ分析を行う -- 計画、レポート作成などに優れた専門エージェントへのハンドオフ +- 計画立案やレポート作成などに長けた専門エージェントへのハンドオフ -このパターンはタスクがオープンエンドで、LLM の知性に頼りたい場合に有効です。ここで重要な戦術は次のとおりです。 +このパターンは、タスクがオープンエンドで LLM の知能に依存したい場合に適しています。重要な戦術は次のとおりです。 -1. 良いプロンプトに投資する。利用可能なツール、その使い方、遵守すべきパラメーターを明確にします。 -2. アプリを監視し、反復する。問題が起きる箇所を把握し、プロンプトを改善します。 -3. エージェントに内省と改善を許可する。例えばループで実行し、自己批評させる、あるいはエラーメッセージを与えて改善させます。 -4. 何でもできる汎用エージェントではなく、1 つのタスクに特化して卓越したエージェントを用意する。 -5. [evals](https://platform.openai.com/docs/guides/evals) に投資する。これによりエージェントを訓練し、タスクの遂行力を向上できます。 +1. 良いプロンプトに投資します。利用可能なツール、その使い方、遵守すべきパラメーターを明確にします。 +2. アプリを監視して反復改善します。うまくいかない箇所を見つけ、プロンプトを改善します。 +3. エージェントが内省・改善できるようにします。たとえばループで実行して自己批評させる、あるいはエラーメッセージを与えて改善させます。 +4. 何でもこなす汎用エージェントではなく、単一タスクに特化して卓越したエージェントを用意します。 +5. [evals](https://platform.openai.com/docs/guides/evals) に投資します。これにより、エージェントを鍛えてタスクの上達を図れます。 ## コードによるオーケストレーション -LLM によるオーケストレーションは強力ですが、コードによるオーケストレーションは、速度・コスト・性能の観点で、より決定的かつ予測可能にできます。一般的なパターンは次のとおりです。 +LLM によるオーケストレーションは強力ですが、コードでオーケストレーションすると、速度・コスト・性能の面でより決定的かつ予測可能になります。一般的なパターンは次のとおりです。 -- [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) を使って、コードで検査できる適切な形式のデータを生成する。例えば、エージェントにタスクをいくつかのカテゴリーに分類させ、そのカテゴリーに基づいて次のエージェントを選びます。 -- あるエージェントの出力を次のエージェントの入力に変換して複数のエージェントを連結する。ブログ記事の作成のようなタスクを、リサーチ、アウトライン作成、本文執筆、批評、改善といった一連のステップに分解できます。 -- タスクを実行するエージェントと、評価してフィードバックするエージェントを `while` ループで回し、評価者が一定の基準を満たしたと判断するまで繰り返す。 -- 複数のエージェントを並列に実行する(例: Python の基本コンポーネントである `asyncio.gather` を使用)。相互依存しない複数タスクがある場合に速度面で有効です。 +- [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) を用いて、コードで検査できる適切な形式のデータを生成します。たとえば、エージェントにタスクをいくつかのカテゴリーに分類させ、カテゴリーに応じて次のエージェントを選びます。 +- 複数のエージェントを連結し、あるエージェントの出力を次のエージェントの入力に変換します。ブログ記事の執筆のようなタスクを、リサーチ→アウトライン作成→本文執筆→批評→改善という一連の手順に分解できます。 +- タスクを実行するエージェントと、それを評価しフィードバックするエージェントを `while` ループで回し、評価者が所定の基準を満たしたと判断するまで続けます。 +- 複数のエージェントを並列に実行します。たとえば Python の基本コンポーネントである `asyncio.gather` などを用います。相互依存しない複数タスクがある場合、速度向上に有用です。 -[`examples/agent_patterns`](https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns) に複数の code examples があります。 \ No newline at end of file +`examples/agent_patterns` には多数の code examples があります。 \ No newline at end of file diff --git a/docs/ja/quickstart.md b/docs/ja/quickstart.md index 338a0cd39..5def6d914 100644 --- a/docs/ja/quickstart.md +++ b/docs/ja/quickstart.md @@ -6,7 +6,7 @@ search: ## プロジェクトと仮想環境の作成 -これは一度だけ行えば大丈夫です。 +この作業は 1 回だけで問題ありません。 ```bash mkdir my_project @@ -16,7 +16,7 @@ python -m venv .venv ### 仮想環境の有効化 -新しいターミナル セッションを開始するたびに実行します。 +新しいターミナルセッションを開始するたびに実行します。 ```bash source .venv/bin/activate @@ -30,7 +30,7 @@ pip install openai-agents # or `uv add openai-agents`, etc ### OpenAI API キーの設定 -まだお持ちでない場合は、[こちらの手順](https://platform.openai.com/docs/quickstart#create-and-export-an-api-key)に従って OpenAI API キーを作成してください。 +お持ちでない場合は、OpenAI API キーを作成するために [こちらの手順](https://platform.openai.com/docs/quickstart#create-and-export-an-api-key) に従ってください。 ```bash export OPENAI_API_KEY=sk-... @@ -38,7 +38,7 @@ export OPENAI_API_KEY=sk-... ## 最初のエージェントの作成 -エージェントは instructions、名前、任意の設定(`model_config` など)で定義されます。 +エージェントは instructions、名前、任意の設定(たとえば `model_config`)で定義します。 ```python from agents import Agent @@ -49,7 +49,7 @@ agent = Agent( ) ``` -## さらにエージェントを追加 +## さらにエージェントの追加 追加のエージェントも同様に定義できます。`handoff_descriptions` は、ハンドオフのルーティングを判断するための追加コンテキストを提供します。 @@ -69,9 +69,9 @@ math_tutor_agent = Agent( ) ``` -## ハンドオフの定義 +## handoffs の定義 -各エージェントで、タスクを進める方法を決める際に選択できる送信側ハンドオフ オプションの一覧を定義できます。 +各エージェントで、タスクを前進させる方法を決定するために選択可能な、送信側の handoff オプションの一覧を定義できます。 ```python triage_agent = Agent( @@ -81,9 +81,9 @@ triage_agent = Agent( ) ``` -## エージェント オーケストレーションの実行 +## エージェントオーケストレーションの実行 -ワークフローが実行され、トリアージ エージェントが 2 つの専門エージェント間を正しくルーティングすることを確認しましょう。 +ワークフローが実行され、トリアージエージェントが 2 つの専門エージェント間で正しくルーティングすることを確認しましょう。 ```python from agents import Runner @@ -93,9 +93,9 @@ async def main(): print(result.final_output) ``` -## ガードレールの追加 +## guardrail の追加 -入力または出力に対して実行するカスタム ガードレールを定義できます。 +入力または出力で実行するカスタム guardrail を定義できます。 ```python from agents import GuardrailFunctionOutput, Agent, Runner @@ -121,9 +121,9 @@ async def homework_guardrail(ctx, agent, input_data): ) ``` -## すべてを組み合わせる +## 全体の統合 -すべてを組み合わせ、ハンドオフと入力ガードレールを使ってワークフロー全体を実行しましょう。 +これらをすべて組み合わせて、handoffs と入力 guardrail を使ってワークフロー全体を実行しましょう。 ```python from agents import Agent, InputGuardrail, GuardrailFunctionOutput, Runner @@ -190,14 +190,14 @@ if __name__ == "__main__": asyncio.run(main()) ``` -## トレースの表示 +## トレーシングの表示 -エージェント 実行中に何が起きたかを確認するには、[ OpenAI ダッシュボードの Trace viewer ](https://platform.openai.com/traces) に移動して、エージェント 実行のトレースを表示します。 +エージェントの実行中に何が起きたかを確認するには、[OpenAI ダッシュボードの Trace viewer](https://platform.openai.com/traces) に移動して実行のトレースを表示します。 ## 次のステップ -より複雑なエージェント フローの構築方法を学びましょう。 +より複雑なエージェントフローの構築方法を学びましょう。 -- [エージェント](agents.md)の設定方法を学ぶ。 -- [エージェントの実行](running_agents.md)について学ぶ。 -- [ツール](tools.md)、[ガードレール](guardrails.md)、および[モデル](models/index.md)について学ぶ。 \ No newline at end of file +- [エージェント](agents.md) の設定方法を学ぶ。 +- [エージェントの実行](running_agents.md) について学ぶ。 +- [tools](tools.md)、[guardrails](guardrails.md)、[models](models/index.md) について学ぶ。 \ No newline at end of file diff --git a/docs/ja/realtime/guide.md b/docs/ja/realtime/guide.md index 1bc5e8c0d..e4c9a858b 100644 --- a/docs/ja/realtime/guide.md +++ b/docs/ja/realtime/guide.md @@ -4,65 +4,65 @@ search: --- # ガイド -このガイドでは、OpenAI Agents SDK の realtime 機能を使って音声対応の AI エージェントを構築する方法を詳しく説明します。 +このガイドでは、 OpenAI Agents SDK の realtime 機能を用いて音声対応の AI エージェントを構築する方法を詳しく解説します。 !!! warning "ベータ機能" -Realtime エージェントはベータ版です。実装改善に伴い、破壊的変更が発生する可能性があります。 +realtime エージェントはベータ版です。実装の改善に伴い、破壊的な変更が入る可能性があります。 ## 概要 -Realtime エージェントは会話フローを可能にし、音声とテキストの入力をリアルタイムに処理し、realtime 音声で応答します。OpenAI の Realtime API と永続接続を維持し、低レイテンシで自然な音声会話と、割り込み処理へのスムーズな対応を実現します。 +realtime エージェントは、会話フローを可能にし、音声およびテキスト入力をリアルタイムに処理して realtime 音声で応答します。 OpenAI の Realtime API との永続的な接続を維持し、低レイテンシで自然な音声会話と、割り込みを優雅に処理する機能を提供します。 ## アーキテクチャ -### 中核コンポーネント +### コアコンポーネント -realtime システムは、いくつかの重要なコンポーネントで構成されます。 +realtime システムは複数の主要コンポーネントで構成されます: -- **RealtimeAgent**: instructions、tools、ハンドオフで構成されたエージェント。 -- **RealtimeRunner**: 設定を管理します。`runner.run()` を呼び出して session を取得できます。 -- **RealtimeSession**: 1 回のインタラクション session。通常、ユーザーが会話を開始するたびに作成し、会話が終了するまで維持します。 -- **RealtimeModel**: 基盤となるモデルのインターフェース(一般的には OpenAI の WebSocket 実装) +- **RealtimeAgent**: instructions、tools、handoffs を設定したエージェント。 +- **RealtimeRunner**: 構成を管理します。`runner.run()` を呼び出してセッションを取得できます。 +- **RealtimeSession**: 1 回の対話セッション。通常は ユーザー が会話を開始するたびに作成し、会話が終了するまで維持します。 +- **RealtimeModel**: 基盤となるモデルインターフェース(通常は OpenAI の WebSocket 実装) ### セッションフロー -典型的な realtime session は次のフローに従います。 +一般的な realtime セッションは以下のフローに従います: -1. **RealtimeAgent を作成** し、instructions、tools、ハンドオフを設定します。 -2. **RealtimeRunner をセットアップ** し、エージェントと設定オプションを指定します。 -3. **セッションを開始** `await runner.run()` を使って開始し、RealtimeSession が返されます。 -4. **音声またはテキストメッセージを送信** `send_audio()` または `send_message()` で session に送信します。 -5. **イベントをリッスン** セッションを反復処理してイベントを取得します。イベントには音声出力、書き起こし、ツール呼び出し、ハンドオフ、エラーなどが含まれます。 -6. **割り込みに対応** ユーザーがエージェントの発話にかぶせて話した場合、現在の音声生成が自動的に停止します。 +1. instructions、tools、handoffs を指定して **RealtimeAgent を作成** します。 +2. エージェントと構成オプションで **RealtimeRunner をセットアップ** します。 +3. `await runner.run()` を使用して **セッションを開始** し、 RealtimeSession を受け取ります。 +4. `send_audio()` または `send_message()` を使用して **音声またはテキストメッセージを送信** します。 +5. セッションを反復処理して **イベントを受信** します。イベントには音声出力、文字起こし、ツール呼び出し、ハンドオフ、エラーが含まれます。 +6. ユーザー がエージェントに被せて話したときの **割り込みを処理** します。現在の音声生成は自動的に停止します。 -セッションは会話履歴を維持し、realtime モデルとの永続接続を管理します。 +セッションは会話履歴を保持し、realtime モデルとの永続接続を管理します。 -## エージェント設定 +## エージェント構成 -RealtimeAgent は通常の Agent クラスと同様に動作しますが、いくつか重要な違いがあります。API の詳細は [`RealtimeAgent`][agents.realtime.agent.RealtimeAgent] の API リファレンスをご覧ください。 +RealtimeAgent は通常の Agent クラスとほぼ同様に動作しますが、いくつか重要な違いがあります。完全な API 詳細は [`RealtimeAgent`][agents.realtime.agent.RealtimeAgent] の API リファレンスをご参照ください。 通常のエージェントとの主な違い: -- モデル選択はエージェントレベルではなく session レベルで設定します。 -- structured output はサポートされません(`outputType` はサポートされません)。 +- モデル選択はエージェントレベルではなく、セッションレベルで構成します。 +- structured output はサポートされません(`outputType` は非対応)。 - 音声はエージェントごとに設定できますが、最初のエージェントが話し始めた後は変更できません。 -- その他の機能(tools、ハンドオフ、instructions など)は同様に動作します。 +- その他の機能(tools、handoffs、instructions)は同様に動作します。 -## セッション設定 +## セッション構成 ### モデル設定 -セッション設定では、基盤となる realtime モデルの動作を制御できます。モデル名(`gpt-4o-realtime-preview` など)、音声の選択( alloy、echo、fable、onyx、nova、shimmer )、およびサポートするモダリティ(テキストや音声)を設定できます。音声フォーマットは入力と出力の両方で設定でき、デフォルトは PCM16 です。 +セッション構成では、基盤となる realtime モデルの動作を制御できます。モデル名(例: `gpt-4o-realtime-preview`)、ボイス選択(alloy、echo、fable、onyx、nova、shimmer)、対応モダリティ(テキストおよび/または音声)を設定できます。音声フォーマットは入力・出力それぞれに設定でき、デフォルトは PCM16 です。 ### 音声設定 -音声設定は、セッションが音声入力と出力をどのように扱うかを制御します。Whisper などのモデルを用いた入力音声の書き起こし、言語設定、ドメイン固有用語の精度向上のための書き起こしプロンプトを設定できます。ターン検出設定では、エージェントがいつ応答を開始・停止すべきかを制御でき、音声活動検出のしきい値、無音時間、検出された音声の前後のパディングのオプションがあります。 +音声設定では、セッションが音声入力と出力をどのように扱うかを制御します。 Whisper などのモデルを用いた入力音声の文字起こし、言語設定、専門用語の精度向上のための文字起こしプロンプトを設定できます。ターン検出設定では、エージェントがいつ応答を開始・終了すべきかを制御し、音声活動検出のしきい値、無音時間、検出された発話の前後のパディングなどのオプションを提供します。 ## ツールと関数 ### ツールの追加 -通常のエージェントと同様に、realtime エージェントは会話中に実行される 関数ツール をサポートします。 +通常のエージェントと同様に、realtime エージェントは会話中に実行される 関数ツール をサポートします: ```python from agents import function_tool @@ -90,7 +90,7 @@ agent = RealtimeAgent( ### ハンドオフの作成 -ハンドオフにより、会話を専門のエージェント間で引き継ぐことができます。 +ハンドオフを使うと、会話を専門のエージェント間で転送できます。 ```python from agents.realtime import realtime_handoff @@ -119,11 +119,11 @@ main_agent = RealtimeAgent( ## イベント処理 -セッションはイベントをストリーミングし、セッションオブジェクトを反復処理することでそれらをリッスンできます。イベントには、音声出力チャンク、書き起こし結果、ツール実行の開始と終了、エージェントのハンドオフ、エラーが含まれます。重要なイベントには次が含まれます。 +セッションはイベントを ストリーミング し、セッションオブジェクトを反復処理してリッスンできます。イベントには、音声出力チャンク、文字起こし結果、ツール実行の開始/終了、エージェントのハンドオフ、エラーが含まれます。特に処理すべき主要イベントは以下です: -- **audio**: エージェントの応答からの Raw 音声データ -- **audio_end**: エージェントの発話が終了 -- **audio_interrupted**: ユーザーがエージェントを割り込み +- **audio**: エージェントの応答からの raw 音声データ +- **audio_end**: エージェントの発話が完了 +- **audio_interrupted**: ユーザー によるエージェントの割り込み - **tool_start/tool_end**: ツール実行のライフサイクル - **handoff**: エージェントのハンドオフが発生 - **error**: 処理中にエラーが発生 @@ -132,9 +132,9 @@ main_agent = RealtimeAgent( ## ガードレール -realtime エージェントでサポートされるのは出力 ガードレール のみです。パフォーマンス問題を避けるため、これらのガードレールはデバウンスされ、(毎語ではなく)定期的に実行されます。デフォルトのデバウンス長は 100 文字ですが、設定可能です。 +realtime エージェントでサポートされるのは出力 ガードレール のみです。パフォーマンス問題を避けるため、これらの ガードレール はデバウンスされ、リアルタイム生成中に(毎語ではなく)定期的に実行されます。デフォルトのデバウンス長は 100 文字ですが、設定可能です。 -ガードレールは `RealtimeAgent` に直接付与するか、セッションの `run_config` を介して提供できます。両方のソースからのガードレールは同時に実行されます。 +ガードレール は `RealtimeAgent` に直接アタッチするか、セッションの `run_config` で提供できます。両方のソースからの ガードレール は併せて実行されます。 ```python from agents.guardrail import GuardrailFunctionOutput, OutputGuardrail @@ -152,17 +152,17 @@ agent = RealtimeAgent( ) ``` -ガードレールがトリガーされると、`guardrail_tripped` イベントを生成し、エージェントの現在の応答を中断できます。デバウンス動作は、安全性とリアルタイム性能要件のバランスを取るのに役立ちます。テキスト エージェントと異なり、realtime エージェントはガードレールが作動しても Exception をスローしません。 +ガードレール がトリガーされると、`guardrail_tripped` イベントを生成し、エージェントの現在の応答を中断する場合があります。デバウンスの動作により、安全性とリアルタイム性能要件のバランスが取られます。テキストエージェントと異なり、realtime エージェントは ガードレール が作動しても Exception をスローしません。 ## 音声処理 -[`session.send_audio(audio_bytes)`][agents.realtime.session.RealtimeSession.send_audio] を使って音声をセッションに送信するか、[`session.send_message()`][agents.realtime.session.RealtimeSession.send_message] を使ってテキストを送信します。 +[`session.send_audio(audio_bytes)`][agents.realtime.session.RealtimeSession.send_audio] を使用して音声をセッションに送信するか、[`session.send_message()`][agents.realtime.session.RealtimeSession.send_message] を使用してテキストを送信します。 -音声出力については、`audio` イベントをリッスンし、好みの音声ライブラリで音声データを再生してください。ユーザーがエージェントを割り込んだ際に即座に再生を停止し、キュー済みの音声をクリアするために、`audio_interrupted` イベントを必ずリッスンしてください。 +音声出力に対しては、`audio` イベントをリッスンして、任意の音声ライブラリでデータを再生します。ユーザー がエージェントを割り込んだ際に即座に再生を停止し、キュー済みの音声をクリアするため、`audio_interrupted` イベントを必ず監視してください。 ## 直接モデルアクセス -基盤となるモデルにアクセスして、カスタムリスナーの追加や高度な操作を実行できます。 +基盤となるモデルにアクセスして、カスタムリスナーを追加したり、高度な操作を実行したりできます: ```python # Add a custom listener to the model @@ -171,6 +171,6 @@ session.model.add_listener(my_custom_listener) これにより、接続を低レベルで制御する必要がある高度なユースケース向けに、[`RealtimeModel`][agents.realtime.model.RealtimeModel] インターフェースへ直接アクセスできます。 -## code examples +## 例 -完全に動作する code examples は、[examples/realtime ディレクトリ](https://github.com/openai/openai-agents-python/tree/main/examples/realtime) を参照してください。UI コンポーネントあり/なしのデモが含まれています。 \ No newline at end of file +完全な動作 code examples については、 UI コンポーネントあり/なしのデモを含む [examples/realtime ディレクトリ](https://github.com/openai/openai-agents-python/tree/main/examples/realtime) をご覧ください。 \ No newline at end of file diff --git a/docs/ja/realtime/quickstart.md b/docs/ja/realtime/quickstart.md index e852c26a6..c16ca33cb 100644 --- a/docs/ja/realtime/quickstart.md +++ b/docs/ja/realtime/quickstart.md @@ -4,20 +4,20 @@ search: --- # クイックスタート -リアルタイム エージェントは、OpenAI の Realtime API を使用して AI エージェントとの音声会話を可能にします。本ガイドでは、最初のリアルタイム音声エージェントの作成手順を説明します。 +Realtime エージェントは、OpenAI の Realtime API を使って AI エージェントとの音声会話を可能にします。このガイドでは、最初のリアルタイム音声エージェントの作成方法を説明します。 !!! warning "ベータ機能" -リアルタイム エージェントはベータです。実装の改善に伴い、互換性が壊れる変更が入る可能性があります。 +Realtime エージェントはベータ版です。実装の改善に伴い、非互換の変更が入る場合があります。 ## 前提条件 - Python 3.9 以上 -- OpenAI API key -- OpenAI Agents SDK の基本的な知識 +- OpenAI API キー +- OpenAI Agents SDK に関する基本的な理解 ## インストール -まだの場合は、OpenAI Agents SDK をインストールします: +まだの場合は、OpenAI Agents SDK をインストールしてください: ```bash pip install openai-agents @@ -25,7 +25,7 @@ pip install openai-agents ## 最初のリアルタイム エージェントの作成 -### 1. 必要なコンポーネントのインポート +### 1. 必須コンポーネントのインポート ```python import asyncio @@ -41,7 +41,7 @@ agent = RealtimeAgent( ) ``` -### 3. ランナーのセットアップ +### 3. Runner のセットアップ ```python runner = RealtimeRunner( @@ -81,7 +81,7 @@ asyncio.run(main()) ## 完全な例 -動作する完全な例はこちらです: +以下は動作する完全な例です: ```python import asyncio @@ -135,44 +135,44 @@ if __name__ == "__main__": asyncio.run(main()) ``` -## 構成オプション +## 設定オプション ### モデル設定 -- `model_name`: 利用可能なリアルタイム モデルを選択(例: `gpt-4o-realtime-preview`) -- `voice`: 音声を選択(`alloy`, `echo`, `fable`, `onyx`, `nova`, `shimmer`) -- `modalities`: テキストや音声を有効化(`["text", "audio"]`) +- `model_name`: 利用可能なリアルタイムモデルから選択 (例: `gpt-4o-realtime-preview`) +- `voice`: 音声を選択 (`alloy`, `echo`, `fable`, `onyx`, `nova`, `shimmer`) +- `modalities`: テキストや音声を有効化 (`["text", "audio"]`) ### 音声設定 -- `input_audio_format`: 入力音声の形式(`pcm16`, `g711_ulaw`, `g711_alaw`) +- `input_audio_format`: 入力音声の形式 (`pcm16`, `g711_ulaw`, `g711_alaw`) - `output_audio_format`: 出力音声の形式 - `input_audio_transcription`: 文字起こしの設定 ### ターン検出 -- `type`: 検出方法(`server_vad`, `semantic_vad`) -- `threshold`: 音声活動のしきい値(0.0–1.0) -- `silence_duration_ms`: ターン終了を検出する無音時間 +- `type`: 検出方法 (`server_vad`, `semantic_vad`) +- `threshold`: 音声活動のしきい値 (0.0–1.0) +- `silence_duration_ms`: ターン終了を検出する無音の長さ - `prefix_padding_ms`: 発話前の音声パディング ## 次のステップ -- [リアルタイム エージェントについて詳しく学ぶ](guide.md) -- 動作するコード例は [examples/realtime](https://github.com/openai/openai-agents-python/tree/main/examples/realtime) フォルダーを参照してください -- エージェントにツールを追加する -- エージェント間のハンドオフを実装する -- 安全性のためにガードレールを設定する +- [リアルタイム エージェントの詳細](guide.md) +- [examples/realtime](https://github.com/openai/openai-agents-python/tree/main/examples/realtime) フォルダーの code examples を確認 +- エージェントにツールを追加 +- エージェント間のハンドオフを実装 +- 安全のためのガードレールを設定 ## 認証 -環境に OpenAI API key が設定されていることを確認してください: +OpenAI API キーが環境に設定されていることを確認してください: ```bash export OPENAI_API_KEY="your-api-key-here" ``` -または、セッション作成時に直接渡します: +また、セッション作成時に直接渡すこともできます: ```python session = await runner.run(model_config={"api_key": "your-api-key"}) diff --git a/docs/ja/release.md b/docs/ja/release.md index 2d753e0f6..60701e734 100644 --- a/docs/ja/release.md +++ b/docs/ja/release.md @@ -2,19 +2,19 @@ search: exclude: true --- -# リリースプロセス/変更履歴 +# リリース プロセス/変更履歴 -このプロジェクトは、`0.Y.Z` という形式を用いた、やや調整したセマンティック バージョニングに従います。先頭の `0` は、 SDK が依然として急速に進化していることを示します。各コンポーネントは次のように増分します。 +本プロジェクトは、`0.Y.Z` という形式を用いる、やや修正したセマンティック バージョニングに従います。先頭の `0` は、 SDK が依然として急速に進化していることを示します。各コンポーネントは次のように増分します。 ## マイナー(`Y`)バージョン -ベータではない公開インターフェースに対する **破壊的変更** の場合、マイナーバージョン `Y` を上げます。たとえば、`0.0.x` から `0.1.x` への変更には、破壊的変更が含まれる可能性があります。 +ベータではない公開インターフェースへの **破壊的変更** に対して、マイナー バージョン `Y` を増やします。たとえば、`0.0.x` から `0.1.x` への更新には破壊的変更が含まれる可能性があります。 -破壊的変更を避けたい場合は、プロジェクトで `0.0.x` バージョンにピン留めすることをおすすめします。 +破壊的変更を避けたい場合は、プロジェクトで `0.0.x` に固定することをおすすめします。 ## パッチ(`Z`)バージョン -後方互換のある変更の場合、`Z` を増分します。 +後方互換の変更に対して `Z` を増やします。 - バグ修正 - 新機能 @@ -25,8 +25,8 @@ search: ### 0.2.0 -このバージョンでは、これまで引数として `Agent` を受け取っていたいくつかの箇所が、代わりに `AgentBase` を引数として受け取るようになりました。たとえば、 MCP サーバーにおける `list_tools()` 呼び出しです。これは純粋に型に関する変更であり、引き続き `Agent` オブジェクトを受け取ります。更新するには、`Agent` を `AgentBase` に置き換えて型エラーを解消するだけで問題ありません。 +このバージョンでは、これまで引数として `Agent` を受け取っていた一部の箇所が、代わりに `AgentBase` を引数として受け取るようになりました。たとえば、 MCP サーバーの `list_tools()` 呼び出しです。これは純粋に型定義上の変更に過ぎず、引き続き `Agent` オブジェクトを受け取ります。更新するには、`Agent` を `AgentBase` に置き換えて型エラーを解消してください。 ### 0.1.0 -このバージョンでは、[`MCPServer.list_tools()`][agents.mcp.server.MCPServer] に新しいパラメーターが 2 つ追加されました: `run_context` と `agent`。`MCPServer` を継承するクラスには、これらのパラメーターを追加する必要があります。 \ No newline at end of file +このバージョンでは、[`MCPServer.list_tools()`][agents.mcp.server.MCPServer] に新たに 2 つのパラメーター `run_context` と `agent` が追加されました。`MCPServer` を継承するすべてのクラスに、これらのパラメーターを追加する必要があります。 \ No newline at end of file diff --git a/docs/ja/repl.md b/docs/ja/repl.md index c9d4c526a..9baf0a4f7 100644 --- a/docs/ja/repl.md +++ b/docs/ja/repl.md @@ -4,7 +4,7 @@ search: --- # REPL ユーティリティ -この SDK は、ターミナル上でエージェントの挙動を素早く対話的にテストできる `run_demo_loop` を提供します。 +この SDK は、端末でエージェントの挙動を手早く対話的にテストできる `run_demo_loop` を提供します。 ```python import asyncio @@ -18,6 +18,6 @@ if __name__ == "__main__": asyncio.run(main()) ``` -`run_demo_loop` は、ループで ユーザー 入力を促し、ターン間で会話履歴を保持します。デフォルトでは、生成と同時にモデル出力を ストリーミング します。上記の例を実行すると、`run_demo_loop` が対話型チャットセッションを開始します。継続的に入力を求め、ターン間の会話履歴全体を記憶し(エージェントがこれまでの内容を把握できるように)、生成と同時に エージェント の応答をリアルタイムで自動 ストリーミング します。 +`run_demo_loop` はループでユーザー入力を促し、ターン間で会話履歴を保持します。既定では、生成と同時にモデル出力をストリーミングします。上の例を実行すると、 run_demo_loop は対話型のチャットセッションを開始します。あなたの入力を継続的に尋ね、ターン間の会話全体の履歴を記憶し(エージェントが何について話したかを把握できるようにし)、生成されると同時にエージェントの応答をリアルタイムで自動的にストリーミングします。 -このチャットセッションを終了するには、`quit` または `exit` と入力して Enter キーを押すか、キーボードショートカットの `Ctrl-D` を使用してください。 \ No newline at end of file +このチャットセッションを終了するには、`quit` または `exit` と入力して Enter を押すか、`Ctrl-D` キーボードショートカットを使用してください。 \ No newline at end of file diff --git a/docs/ja/results.md b/docs/ja/results.md index a184f0f9d..feb78b963 100644 --- a/docs/ja/results.md +++ b/docs/ja/results.md @@ -4,53 +4,53 @@ search: --- # 実行結果 -`Runner.run` メソッドを呼び出すと、次のいずれかを受け取ります: +`Runner.run` メソッドを呼び出すと、次のいずれかが得られます。 -- [`RunResult`][agents.result.RunResult](`run` または `run_sync` を呼び出した場合) -- [`RunResultStreaming`][agents.result.RunResultStreaming](`run_streamed` を呼び出した場合) +- `run` または `run_sync` を呼び出した場合は [`RunResult`][agents.result.RunResult] +- `run_streamed` を呼び出した場合は [`RunResultStreaming`][agents.result.RunResultStreaming] -これらはどちらも [`RunResultBase`][agents.result.RunResultBase] を継承しており、ほとんどの有用な情報はそこに含まれます。 +どちらも [`RunResultBase`][agents.result.RunResultBase] を継承しており、最も有用な情報はそこに含まれます。 ## 最終出力 -[`final_output`][agents.result.RunResultBase.final_output] プロパティには、最後に実行された エージェント の最終出力が含まれます。これは次のいずれかです: +[`final_output`][agents.result.RunResultBase.final_output] プロパティには、最後に実行されたエージェントの最終出力が含まれます。これは次のいずれかです。 -- 最後の エージェント に `output_type` が定義されていない場合は `str` -- エージェント に出力型が定義されている場合は `last_agent.output_type` 型のオブジェクト +- 最後のエージェントに `output_type` が定義されていない場合は `str` +- エージェントに出力タイプが定義されている場合は `last_agent.output_type` 型のオブジェクト !!! note - `final_output` の型は `Any` です。ハンドオフ のため、これを静的に型付けすることはできません。ハンドオフ が発生すると、どの エージェント でも最後になる可能性があるため、可能な出力型の集合を静的には把握できません。 + `final_output` の型は `Any` です。ハンドオフがあるため、静的型付けはできません。ハンドオフが発生すると、どのエージェントが最後になるか分からず、可能な出力タイプの集合を静的に特定できないためです。 ## 次ターンの入力 -[`result.to_input_list()`][agents.result.RunResultBase.to_input_list] を使うと、実行結果を、元の入力に実行中に生成されたアイテムを連結した input list に変換できます。これにより、1 回の エージェント 実行の出力を別の実行に渡したり、ループで実行して毎回新しい ユーザー 入力を追加したりするのが容易になります。 +[`result.to_input_list()`][agents.result.RunResultBase.to_input_list] を使うと、あなたが最初に提供したオリジナルの入力と、エージェントの実行中に生成されたアイテムを連結した入力リストに変換できます。これにより、あるエージェント実行の出力を別の実行に渡したり、ループで実行して毎回新しい ユーザー 入力を追加したりするのが便利になります。 ## 最後のエージェント -[`last_agent`][agents.result.RunResultBase.last_agent] プロパティには、最後に実行された エージェント が含まれます。アプリケーションによっては、これは次回 ユーザー が何かを入力する際に有用です。例えば、一次対応のトリアージ エージェント が言語特化の エージェント にハンドオフ する場合、最後の エージェント を保存しておき、次に ユーザー が エージェント にメッセージを送るときに再利用できます。 +[`last_agent`][agents.result.RunResultBase.last_agent] プロパティには、最後に実行されたエージェントが含まれます。アプリケーションによっては、次回 ユーザー が入力する際に有用です。たとえば、フロントラインのトリアージ エージェントが言語別の エージェントにハンドオフする場合、最後のエージェントを保存しておき、次回 ユーザー がエージェントにメッセージを送る際に再利用できます。 ## 新規アイテム -[`new_items`][agents.result.RunResultBase.new_items] プロパティには、実行中に生成された新規アイテムが含まれます。アイテムは [`RunItem`][agents.items.RunItem] です。Run item は、LLM によって生成された raw アイテムをラップします。 +[`new_items`][agents.result.RunResultBase.new_items] プロパティには、実行中に生成された新規アイテムが含まれます。アイテムは [`RunItem`][agents.items.RunItem] です。Run item は、LLM が生成した raw アイテムをラップします。 -- [`MessageOutputItem`][agents.items.MessageOutputItem]: LLM からのメッセージを示します。raw アイテムは生成されたメッセージです。 +- [`MessageOutputItem`][agents.items.MessageOutputItem]: LLM からのメッセージを表します。raw アイテムは生成されたメッセージです。 - [`HandoffCallItem`][agents.items.HandoffCallItem]: LLM がハンドオフ ツールを呼び出したことを示します。raw アイテムは LLM からのツール呼び出しアイテムです。 -- [`HandoffOutputItem`][agents.items.HandoffOutputItem]: ハンドオフ が発生したことを示します。raw アイテムはハンドオフ ツール呼び出しへのツール応答です。アイテムからソース/ターゲットの エージェント にもアクセスできます。 +- [`HandoffOutputItem`][agents.items.HandoffOutputItem]: ハンドオフが発生したことを示します。raw アイテムはハンドオフ ツール呼び出しへのツールのレスポンスです。アイテムからソース / ターゲットのエージェントにもアクセスできます。 - [`ToolCallItem`][agents.items.ToolCallItem]: LLM がツールを呼び出したことを示します。 -- [`ToolCallOutputItem`][agents.items.ToolCallOutputItem]: ツールが呼び出されたことを示します。raw アイテムはツールの応答です。アイテムからツールの出力にもアクセスできます。 +- [`ToolCallOutputItem`][agents.items.ToolCallOutputItem]: ツールが呼び出されたことを示します。raw アイテムはツールのレスポンスです。アイテムからツールの出力にもアクセスできます。 - [`ReasoningItem`][agents.items.ReasoningItem]: LLM からの推論アイテムを示します。raw アイテムは生成された推論です。 ## その他の情報 -### ガードレールの実行結果 +### ガードレール結果 -[`input_guardrail_results`][agents.result.RunResultBase.input_guardrail_results] と [`output_guardrail_results`][agents.result.RunResultBase.output_guardrail_results] プロパティには、存在する場合はガードレールの実行結果が含まれます。ガードレールの実行結果には、ログ保存や保管に有用な情報が含まれることがあるため、これらを利用可能にしています。 +[`input_guardrail_results`][agents.result.RunResultBase.input_guardrail_results] と [`output_guardrail_results`][agents.result.RunResultBase.output_guardrail_results] プロパティには、該当する場合にガードレールの結果が含まれます。ガードレールの結果には、ログや保存に役立つ情報が含まれることがあるため、利用できるようにしています。 -### raw レスポンス +### raw 応答 -[`raw_responses`][agents.result.RunResultBase.raw_responses] プロパティには、LLM によって生成された [`ModelResponse`][agents.items.ModelResponse] が含まれます。 +[`raw_responses`][agents.result.RunResultBase.raw_responses] プロパティには、LLM が生成した [`ModelResponse`][agents.items.ModelResponse] が含まれます。 ### 元の入力 -[`input`][agents.result.RunResultBase.input] プロパティには、`run` メソッドに渡した元の入力が含まれます。ほとんどの場合これは不要ですが、必要な場合に備えて利用可能です。 \ No newline at end of file +[`input`][agents.result.RunResultBase.input] プロパティには、`run` メソッドに提供した元の入力が含まれます。ほとんどの場合は不要ですが、必要に応じて利用できます。 \ No newline at end of file diff --git a/docs/ja/running_agents.md b/docs/ja/running_agents.md index 483ac7c12..7de9b07b8 100644 --- a/docs/ja/running_agents.md +++ b/docs/ja/running_agents.md @@ -4,11 +4,11 @@ search: --- # エージェントの実行 -エージェントは [`Runner`][agents.run.Runner] クラスで実行できます。オプションは 3 つあります。 +エージェントは [`Runner`][agents.run.Runner] クラスで実行できます。方法は 3 つあります。 1. [`Runner.run()`][agents.run.Runner.run]: 非同期で実行し、[`RunResult`][agents.result.RunResult] を返します。 2. [`Runner.run_sync()`][agents.run.Runner.run_sync]: 同期メソッドで、内部的には `.run()` を実行します。 -3. [`Runner.run_streamed()`][agents.run.Runner.run_streamed]: 非同期で実行し、[`RunResultStreaming`][agents.result.RunResultStreaming] を返します。LLM を ストリーミング モードで呼び出し、受信したイベントを逐次ストリーミングします。 +3. [`Runner.run_streamed()`][agents.run.Runner.run_streamed]: 非同期で実行し、[`RunResultStreaming`][agents.result.RunResultStreaming] を返します。LLM をストリーミングモードで呼び出し、受信したイベントをそのままストリーミングします。 ```python from agents import Agent, Runner @@ -23,55 +23,55 @@ async def main(): # Infinite loop's dance ``` -詳細は [results ガイド](results.md) を参照してください。 +詳しくは[結果ガイド](results.md)をご覧ください。 -## エージェントループ +## エージェントのループ -`Runner` の run メソッドを使用する際、開始するエージェントと入力を渡します。入力は文字列(ユーザー メッセージとみなされます)か、OpenAI Responses API のアイテムのリストのいずれかです。 +`Runner` の run メソッドを使うとき、開始エージェントと入力を渡します。入力は文字列(ユーザー メッセージとして扱われます)か、OpenAI Responses API のアイテムのリストのいずれかです。 -runner は次のループを実行します。 +Runner は次のループを実行します。 1. 現在のエージェントと入力で LLM を呼び出します。 2. LLM が出力を生成します。 1. LLM が `final_output` を返した場合、ループを終了して結果を返します。 - 2. LLM が ハンドオフ を行った場合、現在のエージェントと入力を更新し、ループを再実行します。 - 3. LLM が ツール呼び出し を行った場合、それらを実行して結果を追加し、ループを再実行します。 + 2. LLM がハンドオフを行った場合、現在のエージェントと入力を更新してループを再実行します。 + 3. LLM がツール呼び出しを生成した場合、それらを実行し、結果を追記してループを再実行します。 3. 渡された `max_turns` を超えた場合、[`MaxTurnsExceeded`][agents.exceptions.MaxTurnsExceeded] 例外を送出します。 !!! note - LLM の出力が「最終出力」と見なされるルールは、目的の型のテキスト出力を生成し、かつツール呼び出しがないことです。 + LLM の出力が「最終出力」とみなされるルールは、望ましい型のテキスト出力を生成し、かつツール呼び出しがないことです。 ## ストリーミング -ストリーミング を使うと、LLM の実行中に ストリーミング イベントを受け取れます。ストリームが完了すると、[`RunResultStreaming`][agents.result.RunResultStreaming] に、生成されたすべての新規出力を含む実行の完全な情報が含まれます。ストリーミング イベントは `.stream_events()` を呼び出して取得できます。詳細は [streaming ガイド](streaming.md) を参照してください。 +ストリーミングにより、LLM 実行中のストリーミングイベントも受け取れます。ストリーム完了後、[`RunResultStreaming`][agents.result.RunResultStreaming] には、生成されたすべての新規出力を含む、実行に関する完全な情報が格納されます。ストリーミングイベントは `.stream_events()` を呼び出して受け取れます。詳しくは[ストリーミングガイド](streaming.md)をご覧ください。 ## 実行設定 `run_config` パラメーターでは、エージェント実行のグローバル設定を構成できます。 -- [`model`][agents.run.RunConfig.model]: 各 Agent の `model` 設定に関係なく、使用するグローバルな LLM モデルを設定できます。 -- [`model_provider`][agents.run.RunConfig.model_provider]: モデル名を解決するモデルプロバイダーで、デフォルトは OpenAI です。 -- [`model_settings`][agents.run.RunConfig.model_settings]: エージェント固有の設定を上書きします。例えば、グローバルな `temperature` や `top_p` を設定できます。 -- [`input_guardrails`][agents.run.RunConfig.input_guardrails], [`output_guardrails`][agents.run.RunConfig.output_guardrails]: すべての実行に含める入力/出力 ガードレール のリストです。 -- [`handoff_input_filter`][agents.run.RunConfig.handoff_input_filter]: ハンドオフ に既に設定がない場合に適用されるグローバルな入力フィルターです。入力フィルターを使うと、新しいエージェントに送信される入力を編集できます。詳細は [`Handoff.input_filter`][agents.handoffs.Handoff.input_filter] のドキュメントを参照してください。 -- [`tracing_disabled`][agents.run.RunConfig.tracing_disabled]: 実行全体の [トレーシング](tracing.md) を無効にできます。 -- [`trace_include_sensitive_data`][agents.run.RunConfig.trace_include_sensitive_data]: LLM やツール呼び出しの入出力など、機微なデータをトレースに含めるかどうかを設定します。 -- [`workflow_name`][agents.run.RunConfig.workflow_name], [`trace_id`][agents.run.RunConfig.trace_id], [`group_id`][agents.run.RunConfig.group_id]: 実行のトレーシング用 workflow 名、trace ID、trace group ID を設定します。少なくとも `workflow_name` の設定を推奨します。group ID は任意で、複数の実行にまたがるトレースをリンクできます。 -- [`trace_metadata`][agents.run.RunConfig.trace_metadata]: すべてのトレースに含めるメタデータです。 +- [`model`][agents.run.RunConfig.model]: 各 Agent の `model` 設定に関わらず、使用するグローバルな LLM モデルを設定します。 +- [`model_provider`][agents.run.RunConfig.model_provider]: モデル名の解決に使うモデルプロバイダー。既定は OpenAI です。 +- [`model_settings`][agents.run.RunConfig.model_settings]: エージェント固有の設定を上書きします。たとえば、グローバルな `temperature` や `top_p` を設定できます。 +- [`input_guardrails`][agents.run.RunConfig.input_guardrails], [`output_guardrails`][agents.run.RunConfig.output_guardrails]: すべての実行に含める入力/出力のガードレール一覧。 +- [`handoff_input_filter`][agents.run.RunConfig.handoff_input_filter]: ハンドオフに適用するグローバルな入力フィルター(すでに設定がある場合は適用しません)。入力フィルターにより、新しいエージェントに送る入力を編集できます。詳細は [`Handoff.input_filter`][agents.handoffs.Handoff.input_filter] のドキュメントを参照してください。 +- [`tracing_disabled`][agents.run.RunConfig.tracing_disabled]: 実行全体の[トレーシング](tracing.md)を無効化します。 +- [`trace_include_sensitive_data`][agents.run.RunConfig.trace_include_sensitive_data]: LLM やツール呼び出しの入出力など、機微なデータをトレースに含めるかを設定します。 +- [`workflow_name`][agents.run.RunConfig.workflow_name], [`trace_id`][agents.run.RunConfig.trace_id], [`group_id`][agents.run.RunConfig.group_id]: 実行のトレーシングにおけるワークフロー名、トレース ID、トレース グループ ID を設定します。少なくとも `workflow_name` の設定を推奨します。グループ ID は任意で、複数の実行にまたがるトレースを関連付けできます。 +- [`trace_metadata`][agents.run.RunConfig.trace_metadata]: すべてのトレースに含めるメタデータ。 ## 会話/チャットスレッド -いずれかの run メソッドを呼び出すと、1 つ以上のエージェント(および 1 回以上の LLM 呼び出し)が実行される場合がありますが、チャット会話の 1 つの論理的なターンを表します。例: +任意の run メソッドを呼び出すと、1 つ以上のエージェント(および 1 回以上の LLM 呼び出し)が実行される可能性がありますが、チャット会話では単一の論理ターンを表します。例: 1. ユーザーのターン: ユーザーがテキストを入力 -2. Runner の実行: 最初のエージェントが LLM を呼び出し、ツールを実行し、2 番目のエージェントに ハンドオフ。2 番目のエージェントがさらにツールを実行し、その後出力を生成。 +2. Runner の実行: 最初のエージェントが LLM を呼び出し、ツールを実行し、2 つ目のエージェントにハンドオフし、2 つ目のエージェントがさらにツールを実行し、その後に出力を生成 -エージェントの実行が終わったら、ユーザーに何を見せるかを選べます。例えば、エージェントが生成したすべての新規アイテムを見せるか、最終出力だけを見せるかです。いずれの場合も、ユーザーが追質問をする可能性があり、その際は再度 run メソッドを呼び出します。 +エージェントの実行終了時に、ユーザーへ何を表示するかを選べます。たとえば、エージェントが生成したすべての新規アイテムを表示するか、最終出力のみを表示します。いずれにせよ、ユーザーが追質問することがあり、その場合は再び run メソッドを呼び出せます。 -### 手動の会話管理 +### 会話の手動管理 -次のターンの入力を取得するには、[`RunResultBase.to_input_list()`][agents.result.RunResultBase.to_input_list] メソッドを使用して、会話履歴を手動で管理できます。 +次のターンの入力を取得するために、[`RunResultBase.to_input_list()`][agents.result.RunResultBase.to_input_list] メソッドを使用して、会話履歴を手動で管理できます。 ```python async def main(): @@ -91,9 +91,9 @@ async def main(): # California ``` -### Sessions による自動会話管理 +### Sessions による会話の自動管理 -より簡単な方法として、[Sessions](sessions.md) を使用すると、`.to_input_list()` を手動で呼び出さずに会話履歴を自動的に処理できます。 +より簡単な方法として、[Sessions](sessions.md) を使うと、`.to_input_list()` を手動で呼び出すことなく、会話履歴を自動で扱えます。 ```python from agents import Agent, Runner, SQLiteSession @@ -116,26 +116,26 @@ async def main(): # California ``` -Sessions は自動で次を行います。 +Sessions は自動的に次を行います。 - 各実行前に会話履歴を取得 - 各実行後に新しいメッセージを保存 -- 異なるセッション ID ごとに別個の会話を維持 +- セッション ID ごとに別々の会話を維持 -詳細は [Sessions のドキュメント](sessions.md) を参照してください。 +詳細は[Sessions のドキュメント](sessions.md)をご覧ください。 -## 長時間実行エージェントと human-in-the-loop +## 長時間稼働エージェントとヒューマンインザループ -Agents SDK の [Temporal](https://temporal.io/) 連携を使用すると、human-in-the-loop タスクを含む、耐久性のある長時間実行のワークフローを実行できます。Temporal と Agents SDK が連携して長時間タスクを完了するデモは [この動画](https://www.youtube.com/watch?v=fFBZqzT4DD8) を参照し、[こちらのドキュメント](https://github.com/temporalio/sdk-python/tree/main/temporalio/contrib/openai_agents) も参照してください。 +Agents SDK の [Temporal](https://temporal.io/) 連携を使うと、ヒューマンインザループのタスクを含む、永続的で長時間稼働のワークフローを実行できます。Temporal と Agents SDK が連携して長時間タスクを完了するデモは[この動画](https://www.youtube.com/watch?v=fFBZqzT4DD8)をご覧ください。ドキュメントは[こちら](https://github.com/temporalio/sdk-python/tree/main/temporalio/contrib/openai_agents)です。 ## 例外 -SDK は特定の場合に例外を送出します。完全な一覧は [`agents.exceptions`][] にあります。概要は次のとおりです。 +SDK は特定の状況で例外を送出します。完全な一覧は [`agents.exceptions`][] にあります。概要は次のとおりです。 -- [`AgentsException`][agents.exceptions.AgentsException]: SDK 内で送出されるすべての例外の基底クラスです。他のすべての個別の例外はここから派生します。 -- [`MaxTurnsExceeded`][agents.exceptions.MaxTurnsExceeded]: エージェントの実行が `Runner.run`、`Runner.run_sync`、または `Runner.run_streamed` メソッドに渡された `max_turns` 制限を超えた場合に送出されます。指定された対話ターン数内にタスクを完了できなかったことを示します。 -- [`ModelBehaviorError`][agents.exceptions.ModelBehaviorError]: 基盤モデル(LLM)が予期しない、または無効な出力を生成した場合に発生します。例: - - 不正な JSON: 特定の `output_type` が定義されている場合に特に、ツール呼び出しや直接の出力で不正な JSON 構造を返したとき。 - - 予期しないツール関連の失敗: モデルが期待どおりにツールを使用できなかったとき -- [`UserError`][agents.exceptions.UserError]: SDK を使用してコードを書くあなた(開発者)が、SDK の使用中に誤りを犯した場合に送出されます。これは通常、誤ったコード実装、無効な設定、または SDK の API の誤用が原因です。 -- [`InputGuardrailTripwireTriggered`][agents.exceptions.InputGuardrailTripwireTriggered], [`OutputGuardrailTripwireTriggered`][agents.exceptions.OutputGuardrailTripwireTriggered]: 入力 ガードレール または出力 ガードレール の条件が満たされたときに、それぞれ送出されます。入力 ガードレール は処理前に受信メッセージを確認し、出力 ガードレール は配信前にエージェントの最終応答を確認します。 \ No newline at end of file +- [`AgentsException`][agents.exceptions.AgentsException]: SDK 内で送出されるすべての例外の基底クラスです。他の特定の例外はこれを継承します。 +- [`MaxTurnsExceeded`][agents.exceptions.MaxTurnsExceeded]: エージェントの実行が `Runner.run`, `Runner.run_sync`, `Runner.run_streamed` メソッドに渡した `max_turns` 制限を超えた場合に送出されます。指定した対話ターン数内にエージェントがタスクを完了できなかったことを示します。 +- [`ModelBehaviorError`][agents.exceptions.ModelBehaviorError]: 基盤となるモデル(LLM)が予期しない、または無効な出力を生成した場合に発生します。これには次が含まれます。 + - 不正な JSON: 特定の `output_type` が定義されている場合に特に、ツール呼び出しや直接出力で不正な JSON 構造を返す。 + - 予期しないツール関連の失敗: モデルが期待どおりにツールを使用できない場合 +- [`UserError`][agents.exceptions.UserError]: SDK を使用するコード(あなた)が誤った使用をした場合に送出されます。これは通常、不正な実装、無効な設定、または SDK の API の誤用が原因です。 +- [`InputGuardrailTripwireTriggered`][agents.exceptions.InputGuardrailTripwireTriggered], [`OutputGuardrailTripwireTriggered`][agents.exceptions.OutputGuardrailTripwireTriggered]: 入力ガードレールまたは出力ガードレールの条件が満たされた場合にそれぞれ送出されます。入力ガードレールは処理前に受信メッセージをチェックし、出力ガードレールは配信前にエージェントの最終応答をチェックします。 \ No newline at end of file diff --git a/docs/ja/sessions.md b/docs/ja/sessions.md index a402306b1..88db48ca6 100644 --- a/docs/ja/sessions.md +++ b/docs/ja/sessions.md @@ -4,9 +4,9 @@ search: --- # セッション -Agents SDK には、複数のエージェント実行( runs )にわたって会話履歴を自動的に維持する組み込みのセッション メモリがあり、ターンごとに手動で `.to_input_list()` を扱う必要がなくなります。 +Agents SDK は、複数の エージェント 実行をまたいで会話履歴を自動的に保持する組み込みのセッションメモリを提供し、ターン間で手動で `.to_input_list()` を扱う必要をなくします。 -セッションは特定のセッションの会話履歴を保存し、明示的な手動メモリ管理なしでエージェントが文脈を維持できるようにします。これは、チャット アプリケーションや、エージェントに過去のやり取りを記憶させたいマルチターンの会話を構築する際に特に有用です。 +セッションは特定のセッションの会話履歴を保存し、明示的な手動メモリ管理なしに エージェント がコンテキストを維持できるようにします。これは、エージェント に以前のやり取りを記憶させたいチャットアプリケーションやマルチターン会話を構築する際に特に有用です。 ## クイックスタート @@ -49,19 +49,19 @@ print(result.final_output) # "Approximately 39 million" ## 仕組み -セッション メモリを有効にすると: +セッションメモリが有効な場合: -1. ** 各実行の前 **: ランナーはセッションの会話履歴を自動的に取得し、入力アイテムの先頭に付加します。 -2. ** 各実行の後 **: 実行中に生成されたすべての新しいアイテム( ユーザー 入力、アシスタントの応答、ツール呼び出しなど )が自動的にセッションに保存されます。 -3. ** コンテキストの保持 **: 同じセッションでの後続の実行には完全な会話履歴が含まれ、エージェントが文脈を維持できます。 +1. **各実行の前**: ランナーはセッションの会話履歴を自動的に取得し、入力アイテムの先頭に付加します。 +2. **各実行の後**: 実行中に生成されたすべての新規アイテム(ユーザー入力、アシスタント応答、ツール呼び出しなど)が自動的にセッションへ保存されます。 +3. **コンテキストの保持**: 同じセッションでの後続の実行には、完全な会話履歴が含まれ、 エージェント はコンテキストを維持できます。 -これにより、`.to_input_list()` を手動で呼び出したり、実行間で会話状態を管理したりする必要がなくなります。 +これにより、ターン間で `.to_input_list()` を手動で呼び出し、会話状態を管理する必要がなくなります。 ## メモリ操作 ### 基本操作 -セッションは会話履歴を管理するためにいくつかの操作をサポートします: +セッションは会話履歴を管理するための複数の操作をサポートします: ```python from agents import SQLiteSession @@ -86,9 +86,9 @@ print(last_item) # {"role": "assistant", "content": "Hi there!"} await session.clear_session() ``` -### 修正における pop_item の使用 +### 修正のための pop_item の使用 -`pop_item` メソッドは、会話の最後のアイテムを取り消したり修正したりしたいときに特に便利です: +`pop_item` メソッドは、会話の最後のアイテムを取り消したり修正したりしたい場合に特に便利です: ```python from agents import Agent, Runner, SQLiteSession @@ -117,7 +117,7 @@ result = await Runner.run( print(f"Agent: {result.final_output}") ``` -## メモリ オプション +## メモリのオプション ### メモリなし(デフォルト) @@ -168,13 +168,13 @@ result2 = await Runner.run( ) ``` -### SQLAlchemy ベースのセッション +### SQLAlchemy 駆動のセッション -より高度なユースケースでは、 SQLAlchemy ベースのセッション バックエンドを使用できます。これにより、セッション ストレージに SQLAlchemy がサポートする任意のデータベース( PostgreSQL、MySQL、SQLite など )を使用できます。 +より高度なユースケースでは、SQLAlchemy 駆動のセッションバックエンドを使用できます。これにより、セッションの保存に SQLAlchemy がサポートする任意のデータベース(PostgreSQL、MySQL、SQLite など)を使用できます。 - ** 例 1: `from_url` を使用したインメモリ SQLite ** +**例 1: `from_url` とインメモリ SQLite の使用** -これは最も簡単な開始方法で、開発とテストに最適です。 +これは最も簡単な開始方法で、開発やテストに最適です。 ```python import asyncio @@ -195,9 +195,9 @@ if __name__ == "__main__": asyncio.run(main()) ``` - ** 例 2: 既存の SQLAlchemy エンジンの使用 ** +**例 2: 既存の SQLAlchemy エンジンの使用** -本番アプリケーションでは、すでに SQLAlchemy `AsyncEngine` インスタンスを持っていることが多いです。これをセッションに直接渡せます。 +本番アプリケーションでは、すでに SQLAlchemy の `AsyncEngine` インスタンスを持っている可能性が高いです。これをセッションに直接渡せます。 ```python import asyncio @@ -226,9 +226,9 @@ if __name__ == "__main__": ``` -## カスタム メモリ実装 +## カスタムメモリ実装 -[`Session`][agents.memory.session.Session] プロトコルに従うクラスを作成することで、独自のセッション メモリを実装できます: +[`Session`][agents.memory.session.Session] プロトコルに従うクラスを作成することで、独自のセッションメモリを実装できます: ```python from agents.memory import Session @@ -283,8 +283,8 @@ result = await Runner.run( ### メモリの永続化 - 一時的な会話にはインメモリ SQLite(`SQLiteSession("session_id")`)を使用します -- 永続的な会話にはファイル ベースの SQLite(`SQLiteSession("session_id", "path/to/db.sqlite")`)を使用します -- 本番システム向けにはカスタム セッション バックエンド( Redis、PostgreSQL など )の実装を検討します +- 永続的な会話にはファイルベースの SQLite(`SQLiteSession("session_id", "path/to/db.sqlite")`)を使用します +- 本番システム向けには、カスタムセッションバックエンド(Redis、PostgreSQL など)の実装を検討します ### セッション管理 @@ -310,9 +310,9 @@ result2 = await Runner.run( ) ``` -## 完全なコード例 +## 完全な例 -セッション メモリの動作を示す完全な例です: +セッションメモリが動作する完全な例です: ```python import asyncio @@ -378,5 +378,5 @@ if __name__ == "__main__": 詳細な API ドキュメントは以下を参照してください: -- [`Session`][agents.memory.Session] - プロトコル インターフェース +- [`Session`][agents.memory.Session] - プロトコルインターフェース - [`SQLiteSession`][agents.memory.SQLiteSession] - SQLite 実装 \ No newline at end of file diff --git a/docs/ja/streaming.md b/docs/ja/streaming.md index 9c96de53a..3e572e390 100644 --- a/docs/ja/streaming.md +++ b/docs/ja/streaming.md @@ -4,15 +4,15 @@ search: --- # ストリーミング -ストリーミングを使うと、進行中のエージェントの実行更新を購読できます。これはエンドユーザーに進捗や部分的な応答を表示するのに有用です。 +ストリーミングを使うと、エージェントの run の進行に伴う更新を購読できます。これは、エンドユーザーに進捗更新や部分的な応答を表示するのに役立ちます。 -ストリーミングするには、[`Runner.run_streamed()`][agents.run.Runner.run_streamed] を呼び出します。これにより [`RunResultStreaming`][agents.result.RunResultStreaming] が得られます。`result.stream_events()` を呼ぶと、以下で説明する [`StreamEvent`][agents.stream_events.StreamEvent] オブジェクトの非同期ストリームが得られます。 +ストリーミングするには、[`Runner.run_streamed()`][agents.run.Runner.run_streamed] を呼び出します。これにより [`RunResultStreaming`][agents.result.RunResultStreaming] が得られます。`result.stream_events()` を呼び出すと、以下で説明する [`StreamEvent`][agents.stream_events.StreamEvent] オブジェクトの非同期ストリームが得られます。 ## raw レスポンスイベント -[`RawResponsesStreamEvent`][agents.stream_events.RawResponsesStreamEvent] は LLM から直接渡される raw なイベントです。これらは OpenAI Responses API 形式であり、各イベントにはタイプ(`response.created`、`response.output_text.delta` など)とデータがあります。これらのイベントは、生成され次第ユーザーにレスポンスメッセージをストリーミングしたい場合に有用です。 +[`RawResponsesStreamEvent`][agents.stream_events.RawResponsesStreamEvent] は、LLM から直接渡される raw なイベントです。OpenAI Responses API 形式であり、各イベントにはタイプ(`response.created`、`response.output_text.delta` など)とデータがあります。これらのイベントは、生成され次第、応答メッセージをユーザーにストリーミングしたい場合に有用です。 -例えば、次のコードは LLM が生成したテキストをトークンごとに出力します。 +例えば、これは LLM が生成するテキストをトークンごとに出力します。 ```python import asyncio @@ -35,11 +35,11 @@ if __name__ == "__main__": asyncio.run(main()) ``` -## 実行アイテムイベントとエージェントイベント +## Run アイテムイベントとエージェントイベント -[`RunItemStreamEvent`][agents.stream_events.RunItemStreamEvent] は、より高レベルなイベントです。アイテムが完全に生成されたタイミングを通知します。これにより、各トークン単位ではなく、「メッセージが生成された」「ツールが実行された」などのレベルで進捗更新をプッシュできます。同様に、[`AgentUpdatedStreamEvent`][agents.stream_events.AgentUpdatedStreamEvent] は、現在のエージェントが変更された際(例: ハンドオフの結果として)の更新を提供します。 +[`RunItemStreamEvent`][agents.stream_events.RunItemStreamEvent] は、より高レベルのイベントです。アイテムが完全に生成されたタイミングを知らせます。これにより、各トークンではなく「メッセージが生成された」「ツールが実行された」などのレベルで進捗更新を送信できます。同様に、[`AgentUpdatedStreamEvent`][agents.stream_events.AgentUpdatedStreamEvent] は、現在のエージェントが変更されたとき(例: ハンドオフの結果)に更新を提供します。 -例えば、次のコードは raw イベントを無視して、ユーザーに更新をストリーミングします。 +例えば、これは raw イベントを無視し、ユーザーに更新をストリーミングします。 ```python import asyncio diff --git a/docs/ja/tools.md b/docs/ja/tools.md index aaefb4e8b..f3bd5935c 100644 --- a/docs/ja/tools.md +++ b/docs/ja/tools.md @@ -4,21 +4,21 @@ search: --- # ツール -ツールはエージェントに行動を取らせます。たとえばデータ取得、コード実行、外部 API 呼び出し、さらにはコンピュータ操作などです。Agents SDK にはツールが 3 つのクラスあります。 +ツールは エージェント に行動を取らせます。たとえばデータ取得、コードの実行、外部 API の呼び出し、さらにはコンピュータの使用などです。Agents SDK には 3 つのツールのクラスがあります。 -- ホスト型ツール: これらは AI モデルと同じ LLM サーバー上で実行されます。OpenAI はリトリーバル、Web 検索、コンピュータ操作をホスト型ツールとして提供します。 -- Function calling: 任意の Python 関数をツールとして使用できます。 -- ツールとしてのエージェント: エージェントをツールとして使用でき、ハンドオフせずにエージェントから他のエージェントを呼び出せます。 +- ホスト型ツール: これは LLM サーバー 上で AI モデルと並行して実行されます。OpenAI はリトリーバル、Web 検索、コンピュータ操作 をホスト型ツールとして提供します。 +- Function calling: 任意の Python 関数をツールとして使えます。 +- ツールとしての エージェント: ハンドオフ なしに エージェント から他の エージェント を呼び出せるよう、エージェント をツールとして使えます。 ## ホスト型ツール -[`OpenAIResponsesModel`][agents.models.openai_responses.OpenAIResponsesModel] を使用する際、OpenAI はいくつかの組み込みツールを提供します。 +OpenAI は [`OpenAIResponsesModel`][agents.models.openai_responses.OpenAIResponsesModel] 使用時にいくつかの組み込みツールを提供します。 -- [`WebSearchTool`][agents.tool.WebSearchTool] はエージェントに Web を検索させます。 -- [`FileSearchTool`][agents.tool.FileSearchTool] は OpenAI ベクトルストアから情報を取得できます。 -- [`ComputerTool`][agents.tool.ComputerTool] はコンピュータ操作のタスクを自動化できます。 -- [`CodeInterpreterTool`][agents.tool.CodeInterpreterTool] は LLM にサンドボックス環境でコードを実行させます。 -- [`HostedMCPTool`][agents.tool.HostedMCPTool] はリモート MCP サーバーのツールをモデルに公開します。 +- [`WebSearchTool`][agents.tool.WebSearchTool] は エージェント に Web を検索させます。 +- [`FileSearchTool`][agents.tool.FileSearchTool] は OpenAI の ベクトルストア から情報を取得します。 +- [`ComputerTool`][agents.tool.ComputerTool] は コンピュータ操作 の自動化を可能にします。 +- [`CodeInterpreterTool`][agents.tool.CodeInterpreterTool] は LLM がサンドボックス環境でコードを実行できるようにします。 +- [`HostedMCPTool`][agents.tool.HostedMCPTool] はリモートの MCP サーバー のツールをモデルに公開します。 - [`ImageGenerationTool`][agents.tool.ImageGenerationTool] はプロンプトから画像を生成します。 - [`LocalShellTool`][agents.tool.LocalShellTool] はあなたのマシン上でシェルコマンドを実行します。 @@ -43,14 +43,14 @@ async def main(): ## 関数ツール -任意の Python 関数をツールとして使用できます。Agents SDK が自動的にツールをセットアップします。 +任意の Python 関数をツールとして使用できます。Agents SDK がツールを自動的にセットアップします。 -- ツール名は Python 関数名になります(または名前を指定できます) -- ツールの説明は関数の docstring から取得されます(または説明を指定できます) -- 関数入力のスキーマは関数の引数から自動生成されます -- 各入力の説明は、無効化しない限り、関数の docstring から取得されます +- ツール名は Python 関数名になります(任意で名前を指定可能) +- ツールの説明は関数の docstring から取得します(任意で説明を指定可能) +- 関数入力のスキーマは関数の引数から自動的に作成されます +- 各入力の説明は、無効化しない限り、関数の docstring から取得します -関数シグネチャの抽出には Python の `inspect` モジュールを使用し、docstring の解析には [`griffe`](https://mkdocstrings.github.io/griffe/) を、スキーマ作成には `pydantic` を使用します。 +関数シグネチャの抽出には Python の `inspect` モジュール、docstring の解析には [`griffe`](https://mkdocstrings.github.io/griffe/)、スキーマ作成には `pydantic` を使用します。 ```python import json @@ -102,14 +102,14 @@ for tool in agent.tools: ``` -1. 関数の引数として任意の Python 型を使用でき、関数は同期・非同期いずれでも構いません。 -2. docstring が存在する場合、説明や引数の説明の取得に使用します。 -3. 関数は任意で `context` を受け取れます(最初の引数である必要があります)。ツール名、説明、どの docstring スタイルを使うかなどのオーバーライドも設定できます。 +1. 関数の引数には任意の Python 型を使え、関数は同期・非同期のどちらでも構いません。 +2. docstring があれば、説明と引数の説明を取得するために使われます。 +3. 関数は任意で `context` を受け取れます(最初の引数である必要があります)。ツール名、説明、docstring スタイルなどの上書き設定も可能です。 4. デコレートした関数をツールのリストに渡せます。 ??? note "出力を表示" - ``` + ``` fetch_weather Fetch the weather for a given location. { @@ -179,12 +179,12 @@ for tool in agent.tools: ### カスタム関数ツール -Python 関数をツールとして使いたくない場合もあります。必要に応じて直接 [`FunctionTool`][agents.tool.FunctionTool] を作成できます。その場合は次を提供する必要があります。 +Python 関数をツールとして使いたくない場合もあります。その場合は、直接 [`FunctionTool`][agents.tool.FunctionTool] を作成できます。次を指定する必要があります。 - `name` - `description` -- 引数の JSON スキーマである `params_json_schema` -- [`ToolContext`][agents.tool_context.ToolContext] と引数(JSON 文字列)を受け取り、ツール出力を文字列で返す非同期関数 `on_invoke_tool` +- `params_json_schema`(引数の JSON スキーマ) +- `on_invoke_tool`([`ToolContext`][agents.tool_context.ToolContext] と引数の JSON 文字列を受け取り、ツールの出力を文字列で返す非同期関数) ```python from typing import Any @@ -219,16 +219,16 @@ tool = FunctionTool( ### 引数と docstring の自動解析 -前述のとおり、ツールのスキーマを抽出するために関数シグネチャを自動解析し、ツールおよび個々の引数の説明を抽出するために docstring を解析します。注意点は次のとおりです。 +前述のとおり、ツールのスキーマ抽出のために関数シグネチャを自動解析し、ツールおよび各引数の説明を抽出するために docstring を解析します。注意点: -1. シグネチャの解析は `inspect` モジュール経由で行います。引数の型は型アノテーションを用いて解釈し、全体のスキーマを表現する Pydantic モデルを動的に構築します。Python の基本型、Pydantic モデル、TypedDicts など、ほとんどの型をサポートします。 -2. docstring の解析には `griffe` を使用します。サポートする docstring 形式は `google`、`sphinx`、`numpy` です。docstring 形式の自動検出を試みますがベストエフォートであり、`function_tool` 呼び出し時に明示的に指定できます。`use_docstring_info` を `False` に設定して docstring 解析を無効化することもできます。 +1. シグネチャ解析は `inspect` モジュールで行います。引数の型を理解するために型アノテーションを使用し、全体のスキーマを表す Pydantic モデルを動的に構築します。Python の基本型、Pydantic モデル、TypedDicts など、ほとんどの型をサポートします。 +2. docstring の解析には `griffe` を使用します。サポートされる docstring 形式は `google`、`sphinx`、`numpy` です。docstring 形式は自動検出を試みますがベストエフォートのため、`function_tool` 呼び出し時に明示的に設定できます。`use_docstring_info` を `False` に設定して docstring 解析を無効化することも可能です。 スキーマ抽出のコードは [`agents.function_schema`][] にあります。 -## ツールとしてのエージェント +## ツールとしての エージェント -一部のワークフローでは、ハンドオフするのではなく、中央のエージェントが専門特化したエージェント群をオーケストレーションしたい場合があります。エージェントをツールとしてモデリングすることで実現できます。 +一部のワークフローでは、ハンドオフ せずに中央の エージェント が専門 エージェント 群をオーケストレーションしたい場合があります。これは エージェント をツールとしてモデル化することで実現できます。 ```python from agents import Agent, Runner @@ -267,9 +267,9 @@ async def main(): print(result.final_output) ``` -### ツール化エージェントのカスタマイズ +### ツール化したエージェントのカスタマイズ -`agent.as_tool` 関数は、エージェントを手軽にツール化するためのユーティリティです。ただし、すべての構成をサポートしているわけではありません。たとえば `max_turns` は設定できません。高度なユースケースでは、ツール実装内で直接 `Runner.run` を使用してください。 +`agent.as_tool` 関数は エージェント をツールに変換するための簡便なメソッドです。ただし、すべての設定をサポートしているわけではありません。たとえば `max_turns` は設定できません。高度なユースケースでは、ツール実装の中で直接 `Runner.run` を使用してください。 ```python @function_tool @@ -288,15 +288,15 @@ async def run_my_agent() -> str: return str(result.final_output) ``` -### カスタム出力抽出 +### 出力のカスタム抽出 -場合によっては、中央のエージェントに返す前にツール化したエージェントの出力を変更したいことがあります。これは次のような場合に有用です。 +場合によっては、中央の エージェント に返す前にツール化した エージェント の出力を変更したいことがあります。たとえば次のような場合に有用です。 -- サブエージェントのチャット履歴から特定の情報(例: JSON ペイロード)を抽出する。 -- エージェントの最終回答を変換または再フォーマットする(例: Markdown をプレーンテキストや CSV に変換)。 -- エージェントのレスポンスが欠落または不正な場合に、出力を検証したりフォールバック値を提供したりする。 +- サブエージェント のチャット履歴から特定の情報(例: JSON ペイロード)を抽出する。 +- エージェント の最終回答を変換・再整形する(例: Markdown をプレーンテキストや CSV に変換する)。 +- 出力を検証し、エージェント の応答が欠落または不正な場合にフォールバック値を提供する。 -これは、`as_tool` メソッドに `custom_output_extractor` 引数を渡すことで実現できます。 +これは `as_tool` メソッドに `custom_output_extractor` 引数を渡すことで行えます。 ```python async def extract_json_payload(run_result: RunResult) -> str: @@ -315,9 +315,9 @@ json_tool = data_agent.as_tool( ) ``` -### 条件付きツール有効化 +### 条件付きのツール有効化 -実行時に `is_enabled` パラメーターを使用して、エージェントのツールを条件付きで有効化または無効化できます。これにより、コンテキスト、ユーザーの好み、実行時条件に基づいて、LLM に提供するツールを動的にフィルタリングできます。 +実行時に `is_enabled` パラメーター を使用して エージェント ツールを条件付きで有効・無効にできます。これにより、コンテキスト、ユーザー の嗜好、実行時条件に基づいて LLM に利用可能なツールを動的にフィルタリングできます。 ```python import asyncio @@ -372,24 +372,24 @@ async def main(): asyncio.run(main()) ``` -`is_enabled` パラメーターは次を受け付けます。 -- **真偽値**: `True`(常に有効)または `False`(常に無効) -- **呼び出し可能な関数**: `(context, agent)` を受け取り真偽値を返す関数 -- **非同期関数**: 複雑な条件ロジック向けの非同期関数 +`is_enabled` パラメーター は次を受け付けます: +- **ブール値**: `True`(常に有効)または `False`(常に無効) +- **呼び出し可能な関数**: `(context, agent)` を受け取り、ブール値を返す関数 +- **非同期関数**: 複雑な条件ロジック向けの async 関数 -無効化されたツールは実行時に LLM から完全に隠されます。次の用途に便利です。 -- ユーザー権限に基づく機能ゲーティング -- 環境別のツール提供(開発 vs 本番) +無効化されたツールは実行時に LLM から完全に隠されます。これは次の用途に便利です。 +- ユーザー 権限に基づく機能ゲーティング +- 環境別のツール可用性(dev と prod) - 異なるツール構成の A/B テスト -- 実行時状態に基づく動的なツールフィルタリング +- 実行時状態に基づく動的ツールフィルタリング ## 関数ツールでのエラー処理 -`@function_tool` で関数ツールを作成する際、`failure_error_function` を渡せます。これは、ツール呼び出しがクラッシュした場合に LLM へエラーレスポンスを提供する関数です。 +`@function_tool` で関数ツールを作成する際、`failure_error_function` を渡せます。これは、ツール呼び出しがクラッシュした場合に LLM へ返すエラー応答を提供する関数です。 -- 既定では(何も渡さない場合)、エラーが発生したことを LLM に伝える `default_tool_error_function` が実行されます。 -- 独自のエラー関数を渡した場合はそれが実行され、そのレスポンスが LLM に送られます。 -- 明示的に `None` を渡すと、ツール呼び出しのエラーは再送出され、あなたが処理することになります。モデルが不正な JSON を生成した場合は `ModelBehaviorError`、あなたのコードがクラッシュした場合は `UserError` などになり得ます。 +- 既定では(つまり何も渡さない場合)、エラーが発生したことを LLM に伝える `default_tool_error_function` が実行されます。 +- 独自のエラー関数を渡した場合はそれが実行され、その応答が LLM に送られます。 +- 明示的に `None` を渡した場合、あらゆるツール呼び出しエラーは再スローされるため、あなたが処理できます。モデルが不正な JSON を生成した場合は `ModelBehaviorError`、あなたのコードがクラッシュした場合は `UserError` などが該当します。 ```python from agents import function_tool, RunContextWrapper @@ -412,4 +412,4 @@ def get_user_profile(user_id: str) -> str: ``` -`FunctionTool` オブジェクトを手動で作成する場合は、`on_invoke_tool` 関数内でエラー処理を行う必要があります。 \ No newline at end of file +`FunctionTool` オブジェクトを手動で作成する場合は、`on_invoke_tool` 関数内でエラーを処理する必要があります。 \ No newline at end of file diff --git a/docs/ja/tracing.md b/docs/ja/tracing.md index adee33fc7..be9b44633 100644 --- a/docs/ja/tracing.md +++ b/docs/ja/tracing.md @@ -4,52 +4,52 @@ search: --- # トレーシング -Agents SDK には組み込みのトレーシングが含まれており、エージェント実行中のイベントを網羅的に記録します。具体的には、 LLM 生成、ツール呼び出し、ハンドオフ、ガードレール、さらには発生するカスタムイベントまで含みます。[Traces ダッシュボード](https://platform.openai.com/traces)を使うと、開発時および本番環境でワークフローをデバッグ・可視化・監視できます。 +Agents SDK には組み込みのトレーシングが含まれており、エージェント実行中に発生するイベントの包括的な記録を収集します。LLM 生成、ツール呼び出し、ハンドオフ、ガードレール、さらにはカスタムイベントまで対象です。[Traces ダッシュボード](https://platform.openai.com/traces) を使うと、開発中および本番環境でワークフローをデバッグ、可視化、監視できます。 !!!note - トレーシングはデフォルトで有効です。無効化する方法は 2 つあります。 + トレーシングはデフォルトで有効です。トレーシングを無効化する方法は 2 つあります。 - 1. 環境変数 `OPENAI_AGENTS_DISABLE_TRACING=1` を設定して、グローバルにトレーシングを無効化できます - 2. 単一の実行でトレーシングを無効化するには、[`agents.run.RunConfig.tracing_disabled`][] を `True` に設定します + 1. 環境変数 `OPENAI_AGENTS_DISABLE_TRACING=1` を設定してグローバルに無効化できます + 2. 単一の実行に対しては、[`agents.run.RunConfig.tracing_disabled`][] を `True` に設定して無効化できます -***OpenAI の API を利用し、 Zero Data Retention (ZDR) ポリシーで運用している組織では、トレーシングは利用できません。*** + ***OpenAI の API を利用し、Zero Data Retention (ZDR) ポリシーで運用している組織では、トレーシングは利用できません。*** ## トレースとスパン -- **トレース (Traces)** は「ワークフロー」の単一のエンドツーエンド操作を表します。スパンで構成されます。トレースには次のプロパティがあります。 +- **トレース** は「ワークフロー」の単一のエンドツーエンドの処理を表します。スパンで構成されます。トレースには以下のプロパティがあります。 - `workflow_name`: 論理的なワークフローまたはアプリです。例: "Code generation" や "Customer service" - - `trace_id`: トレースの一意の ID。指定しない場合は自動生成されます。形式は `trace_<32_alphanumeric>` である必要があります。 - - `group_id`: 省略可能なグループ ID。同一会話の複数トレースを関連付けるために使用します。たとえばチャットスレッドの ID などです。 + - `trace_id`: トレースの一意の ID です。指定しない場合は自動生成されます。形式は `trace_<32_alphanumeric>` である必要があります。 + - `group_id`: 省略可能なグループ ID。同じ会話からの複数のトレースを関連付けるために使用します。たとえばチャットスレッド ID を使う場合があります。 - `disabled`: True の場合、このトレースは記録されません。 - - `metadata`: トレースの任意のメタデータ。 -- **スパン (Spans)** は開始時刻と終了時刻を持つ操作を表します。スパンには次の情報があります。 - - `started_at` および `ended_at` タイムスタンプ - - 所属するトレースを示す `trace_id` - - 親スパン (ある場合) を指す `parent_id` - - スパンに関する情報である `span_data`。たとえば、`AgentSpanData` はエージェントに関する情報、`GenerationSpanData` は LLM 生成に関する情報などです。 + - `metadata`: トレースのための省略可能なメタデータ。 +- **スパン** は開始時刻と終了時刻を持つ処理を表します。スパンには以下があります。 + - `started_at` と `ended_at` のタイムスタンプ + - それが属するトレースを表す `trace_id` + - 親スパンを指す `parent_id`(存在する場合) + - スパンに関する情報である `span_data`。たとえば、`AgentSpanData` はエージェントに関する情報、`GenerationSpanData` は LLM 生成に関する情報を含みます。 -## デフォルトのトレーシング +## 既定のトレーシング -デフォルトでは、 SDK は次をトレースします。 +デフォルトで、SDK は以下をトレースします。 -- `Runner.{run, run_sync, run_streamed}()` 全体が `trace()` でラップされます -- エージェントが実行されるたびに `agent_span()` でラップされます -- LLM 生成は `generation_span()` でラップされます -- 関数ツールの呼び出しはそれぞれ `function_span()` でラップされます +- 全体の `Runner.{run, run_sync, run_streamed}()` は `trace()` でラップされます。 +- エージェントが実行されるたびに、`agent_span()` でラップされます +- LLM の生成は `generation_span()` でラップされます +- 関数ツール呼び出しはそれぞれ `function_span()` でラップされます - ガードレールは `guardrail_span()` でラップされます - ハンドオフは `handoff_span()` でラップされます -- 音声入力 (音声認識) は `transcription_span()` でラップされます -- 音声出力 (音声合成) は `speech_span()` でラップされます -- 関連する音声スパンは `speech_group_span()` の下に配置される場合があります +- 音声入力(音声認識)は `transcription_span()` でラップされます +- 音声出力(音声合成)は `speech_span()` でラップされます +- 関連する音声スパンは `speech_group_span()` の配下にネストされる場合があります -デフォルトでは、トレース名は "Agent workflow" です。`trace` を使用する場合はこの名前を設定できますし、[`RunConfig`][agents.run.RunConfig] で名前やその他のプロパティを設定することもできます。 +デフォルトでは、トレース名は "Agent workflow" です。`trace` を使用する場合はこの名前を設定できますし、[`RunConfig`][agents.run.RunConfig] で名前やその他のプロパティを構成できます。 -さらに、[カスタムトレースプロセッサー](#custom-tracing-processors)を設定して、他の宛先へトレースを送信できます (置き換えまたは追加の宛先として)。 +加えて、[カスタムトレースプロセッサー](#custom-tracing-processors) を設定して、他の宛先にトレースを送信できます(置き換え、またはセカンダリ宛先として)。 -## 上位レベルのトレース +## より高レベルのトレース -複数回の `run()` 呼び出しを単一のトレースに含めたい場合があります。その場合は、コード全体を `trace()` でラップします。 +`run()` への複数回の呼び出しを単一のトレースの一部にしたい場合があります。その場合は、コード全体を `trace()` でラップします。 ```python from agents import Agent, Runner, trace @@ -68,42 +68,43 @@ async def main(): ## トレースの作成 -[`trace()`][agents.tracing.trace] 関数を使用してトレースを作成できます。トレースは開始と終了が必要です。次の 2 つの方法があります。 +[`trace()`][agents.tracing.trace] 関数を使用してトレースを作成できます。トレースは開始と終了が必要です。方法は 2 つあります。 -1. 推奨: トレースをコンテキストマネージャーとして使用します。例: `with trace(...) as my_trace`。これにより適切なタイミングでトレースが自動的に開始・終了します。 -2. [`trace.start()`][agents.tracing.Trace.start] と [`trace.finish()`][agents.tracing.Trace.finish] を手動で呼び出すこともできます。 +1. 推奨: トレースをコンテキストマネージャーとして使用します。つまり `with trace(...) as my_trace` のようにします。これにより適切なタイミングで自動的に開始・終了されます。 +2. 手動で [`trace.start()`][agents.tracing.Trace.start] と [`trace.finish()`][agents.tracing.Trace.finish] を呼び出すこともできます。 -現在のトレースは Python の [`contextvar`](https://docs.python.org/3/library/contextvars.html) を通じて追跡されます。これにより自動的に並行処理に対応します。トレースを手動で開始/終了する場合は、現在のトレースを更新するために `start()`/`finish()` に `mark_as_current` と `reset_current` を渡す必要があります。 +現在のトレースは Python の [`contextvar`](https://docs.python.org/3/library/contextvars.html) を通じて追跡されます。これは自動的に並行実行で機能することを意味します。トレースを手動で開始/終了する場合は、現在のトレースを更新するために `start()`/`finish()` に `mark_as_current` と `reset_current` を渡す必要があります。 ## スパンの作成 -さまざまな [`*_span()`][agents.tracing.create] メソッドを使用してスパンを作成できます。一般に、スパンを手動で作成する必要はありません。カスタムスパン情報を追跡するための [`custom_span()`][agents.tracing.custom_span] 関数も利用できます。 +さまざまな [`*_span()`][agents.tracing.create] メソッドを使ってスパンを作成できます。一般に、スパンを手動で作成する必要はありません。カスタムスパン情報を追跡するために、[`custom_span()`][agents.tracing.custom_span] 関数を利用できます。 -スパンは自動的に現在のトレースの一部となり、 Python の [`contextvar`](https://docs.python.org/3/library/contextvars.html) によって追跡される最も近い現在のスパンの下にネストされます。 +スパンは自動的に現在のトレースの一部となり、Python の [`contextvar`](https://docs.python.org/3/library/contextvars.html) により追跡される、最も近い現在のスパンの配下にネストされます。 ## 機微なデータ -一部のスパンは機微なデータを含む可能性があります。 +一部のスパンは機微なデータを取得する可能性があります。 -`generation_span()` は LLM 生成の入力/出力を保存し、`function_span()` は関数呼び出しの入力/出力を保存します。これらには機微なデータが含まれる場合があるため、[`RunConfig.trace_include_sensitive_data`][agents.run.RunConfig.trace_include_sensitive_data] によってそのデータのキャプチャを無効化できます。 +`generation_span()` は LLM 生成の入力/出力を格納し、`function_span()` は関数呼び出しの入力/出力を格納します。これらには機微なデータが含まれる可能性があるため、[`RunConfig.trace_include_sensitive_data`][agents.run.RunConfig.trace_include_sensitive_data] によってそのデータの取得を無効化できます。 -同様に、音声スパンにはデフォルトで、入力および出力音声の base64 エンコードされた PCM データが含まれます。[`VoicePipelineConfig.trace_include_sensitive_audio_data`][agents.voice.pipeline_config.VoicePipelineConfig.trace_include_sensitive_audio_data] を設定することで、この音声データのキャプチャを無効化できます。 +同様に、音声スパンにはデフォルトで入力および出力音声の base64 エンコードされた PCM データが含まれます。この音声データの取得は、[`VoicePipelineConfig.trace_include_sensitive_audio_data`][agents.voice.pipeline_config.VoicePipelineConfig.trace_include_sensitive_audio_data] を設定して無効化できます。 ## カスタムトレーシングプロセッサー -トレーシングの高レベルアーキテクチャは次のとおりです。 +トレーシングの高レベルなアーキテクチャは次のとおりです。 -- 初期化時に、トレースの作成を担当するグローバルな [`TraceProvider`][agents.tracing.setup.TraceProvider] を作成します。 -- `TraceProvider` に [`BatchTraceProcessor`][agents.tracing.processors.BatchTraceProcessor] を設定し、トレース/スパンをバッチで [`BackendSpanExporter`][agents.tracing.processors.BackendSpanExporter] に送信します。これにより、スパンとトレースが OpenAI のバックエンドにバッチでエクスポートされます。 +- 初期化時に、トレースの作成を担うグローバルな [`TraceProvider`][agents.tracing.setup.TraceProvider] を作成します。 +- `TraceProvider` に [`BatchTraceProcessor`][agents.tracing.processors.BatchTraceProcessor] を設定し、これがトレース/スパンをバッチで [`BackendSpanExporter`][agents.tracing.processors.BackendSpanExporter] に送信します。エクスポーターはスパンとトレースを OpenAI バックエンドにバッチでエクスポートします。 -このデフォルト設定をカスタマイズして、別のバックエンドへ送信したり、追加のバックエンドへ送信したり、エクスポーターの動作を変更するには次の 2 つの方法があります。 +このデフォルト設定をカスタマイズして、代替または追加のバックエンドへ送信したり、エクスポーターの動作を変更するには、次の 2 つの方法があります。 -1. [`add_trace_processor()`][agents.tracing.add_trace_processor] は、トレースやスパンが準備でき次第受け取る「追加の」トレースプロセッサーを追加できます。これにより、 OpenAI のバックエンドへの送信に加えて独自の処理を実行できます。 -2. [`set_trace_processors()`][agents.tracing.set_trace_processors] は、デフォルトのプロセッサーを独自のトレースプロセッサーに「置き換え」られます。これにより、 OpenAI のバックエンドにトレースが送信されなくなります (その送信を行う `TracingProcessor` を含めない限り)。 +1. [`add_trace_processor()`][agents.tracing.add_trace_processor] は、トレースやスパンが準備できた際に受け取る、追加のトレースプロセッサーを追加できます。これにより、OpenAI のバックエンドへの送信に加えて独自の処理を行えます。 +2. [`set_trace_processors()`][agents.tracing.set_trace_processors] は、デフォルトのプロセッサーを独自のトレースプロセッサーで置き換えることができます。つまり、OpenAI バックエンドにトレースを送信したい場合は、そのための `TracingProcessor` を含める必要があります。 -## Non-OpenAI Models でのトレーシング -OpenAI の API キーを Non-OpenAI Models と一緒に使用して、トレーシングを無効化することなく OpenAI Traces ダッシュボードで無料のトレーシングを有効にできます。 +## 非 OpenAI モデルでのトレーシング + +トレーシングを無効化することなく、OpenAI Traces ダッシュボードで無料のトレーシングを有効にするために、非 OpenAI モデルでも OpenAI API キーを使用できます。 ```python import os @@ -125,9 +126,10 @@ agent = Agent( ``` ## 注意 -- 無料のトレースは OpenAI Traces ダッシュボードで確認できます。 +- 無料のトレースは OpenAI Traces ダッシュボードで閲覧できます。 + -## 外部トレーシングプロセッサーの一覧 +## 外部トレーシングプロセッサー一覧 - [Weights & Biases](https://weave-docs.wandb.ai/guides/integrations/openai_agents) - [Arize-Phoenix](https://docs.arize.com/phoenix/tracing/integrations-tracing/openai-agents-sdk) diff --git a/docs/ja/usage.md b/docs/ja/usage.md index 9dde14bc9..adc45d9da 100644 --- a/docs/ja/usage.md +++ b/docs/ja/usage.md @@ -4,13 +4,13 @@ search: --- # 使用状況 -Agents SDK は、すべての実行ごとにトークン使用状況を自動的に追跡します。実行コンテキストから参照でき、コストの監視、上限の適用、分析の記録に利用できます。 +Agents SDK は、各実行ごとにトークン使用状況を自動追跡します。実行コンテキストから参照でき、コストの監視、制限の適用、分析の記録に利用できます。 ## 追跡対象 - **requests**: 実行された LLM API 呼び出し回数 -- **input_tokens**: 送信された入力トークン合計 -- **output_tokens**: 受信した出力トークン合計 +- **input_tokens**: 送信された入力トークン総数 +- **output_tokens**: 受信した出力トークン総数 - **total_tokens**: 入力 + 出力 - **details**: - `input_tokens_details.cached_tokens` @@ -18,7 +18,7 @@ Agents SDK は、すべての実行ごとにトークン使用状況を自動的 ## 実行からの使用状況へのアクセス -`Runner.run(...)` の後、`result.context_wrapper.usage` から使用状況にアクセスできます。 +`Runner.run(...)` の後、`result.context_wrapper.usage` から使用状況にアクセスします。 ```python result = await Runner.run(agent, "What's the weather in Tokyo?") @@ -30,11 +30,11 @@ print("Output tokens:", usage.output_tokens) print("Total tokens:", usage.total_tokens) ``` -使用状況は、その実行中のすべてのモデル呼び出し(ツール呼び出しとハンドオフを含む)にわたって集計されます。 +使用状況は、実行中のすべてのモデル呼び出し(ツール呼び出しや ハンドオフ を含む)で集計されます。 -## セッションでの使用状況へのアクセス +## セッションでの使用状況 -`Session`(例: `SQLiteSession`)を使用する場合、同じ実行内の複数ターンにわたって使用状況は蓄積されます。`Runner.run(...)` の各呼び出しは、その時点までの実行の累積使用状況を返します。 +`Session`(例: `SQLiteSession`)を使用する場合、同一の実行内ではターンをまたいで使用状況が蓄積されます。`Runner.run(...)` を呼び出すたびに、その時点での実行の累積使用状況が返されます。 ```python session = SQLiteSession("my_conversation") @@ -48,7 +48,7 @@ print(second.context_wrapper.usage.total_tokens) # includes both turns ## フックでの使用状況の利用 -`RunHooks` を使用している場合、各フックに渡される `context` オブジェクトには `usage` が含まれます。これにより、重要なライフサイクルのタイミングで使用状況を記録できます。 +`RunHooks` を使用している場合、各フックに渡される `context` オブジェクトには `usage` が含まれます。これにより、ライフサイクルの主要なタイミングで使用状況を記録できます。 ```python class MyHooks(RunHooks): diff --git a/docs/ja/visualization.md b/docs/ja/visualization.md index 3565d39bb..e55102ae5 100644 --- a/docs/ja/visualization.md +++ b/docs/ja/visualization.md @@ -2,26 +2,26 @@ search: exclude: true --- -# エージェントの可視化 +# エージェント可視化 -エージェントの可視化では、 ** Graphviz ** を使用して、エージェントとその関係の構造化されたグラフィカル表現を生成できます。これは、アプリケーション内でエージェント、ツール、ハンドオフがどのように相互作用するかを理解するのに役立ちます。 +エージェント可視化では、 ** Graphviz ** を使用して、エージェントとその関係を構造化されたグラフィカル表現で生成できます。これは、アプリケーション内でエージェント、ツール、ハンドオフがどのように相互作用するかを理解するのに役立ちます。 ## インストール -省略可能な `viz` 依存関係グループをインストールします: +オプションの `viz` 依存関係グループをインストールします: ```bash pip install "openai-agents[viz]" ``` -## グラフの生成 +## グラフ生成 -`draw_graph` 関数を使用して、エージェントの可視化を生成できます。この関数は、次のような有向グラフを作成します。 +`draw_graph` 関数を使用してエージェントの可視化を生成できます。この関数は次のような有向グラフを作成します: -- ** エージェント ** は黄色のボックスで表されます。 -- ** MCP サーバー ** はグレーのボックスで表されます。 -- ** ツール ** は緑色の楕円で表されます。 -- ** ハンドオフ ** は、あるエージェントから別のエージェントへの有向エッジです。 +- ** エージェント ** は黄色のボックスで表されます。 +- ** MCP ** サーバーは灰色のボックスで表されます。 +- ** ツール ** は緑色の楕円で表されます。 +- ** ハンドオフ ** は一方のエージェントから別のエージェントへの有向エッジです。 ### 使用例 @@ -69,36 +69,37 @@ draw_graph(triage_agent) ![エージェント グラフ](../assets/images/graph.png) -これは、 ** トリアージ エージェント ** の構造と、サブエージェントやツールへの接続を視覚的に表現するグラフを生成します。 +これは、 ** トリアージ エージェント ** と、そのサブエージェントおよびツールへの接続構造を視覚的に表すグラフを生成します。 ## 可視化の理解 -生成されるグラフには次が含まれます。 +生成されるグラフには次が含まれます: -- エントリポイントを示す ** 開始ノード ** (`__start__`) -- 黄色で塗りつぶされた ** 長方形 ** で表されるエージェント -- 緑色で塗りつぶされた ** 楕円 ** で表されるツール -- グレーで塗りつぶされた ** 長方形 ** で表される MCP サーバー +- 入口点を示す ** start ノード **(`__start__`)。 +- 黄色で塗りつぶされた ** 長方形 ** として表されるエージェント。 +- 緑で塗りつぶされた ** 楕円 ** として表されるツール。 +- 灰色で塗りつぶされた ** 長方形 ** として表される MCP サーバー。 - 相互作用を示す有向エッジ: - - エージェント間のハンドオフには ** 実線の矢印 ** - - ツール呼び出しには ** 点線の矢印 ** - - MCP サーバー呼び出しには ** 破線の矢印 ** -- 実行が終了する場所を示す ** 終了ノード ** (`__end__`) + - エージェント間のハンドオフには ** 実線の矢印 **。 + - ツール呼び出しには ** 点線の矢印 **。 + - MCP サーバー呼び出しには ** 破線の矢印 **。 +- 実行の終了地点を示す ** end ノード **(`__end__`)。 -** 注意:** MCP サーバーは、`agents` パッケージの最近のバージョンで描画されます( ** v0.2.8 ** で確認済み)。可視化に MCP ボックスが表示されない場合は、最新リリースにアップグレードしてください。 +** 注意:** MCP サーバーは最近の +`agents` パッケージでレンダリングされます( **v0.2.8** で確認済み)。可視化に MCP のボックスが表示されない場合は、最新リリースにアップグレードしてください。 ## グラフのカスタマイズ ### グラフの表示 -既定では、`draw_graph` はグラフをインライン表示します。別ウィンドウに表示するには、次を記述します。 +既定では、`draw_graph` はグラフをインライン表示します。別ウィンドウに表示するには、次のように記述します: ```python draw_graph(triage_agent).view() ``` ### グラフの保存 -既定では、`draw_graph` はグラフをインライン表示します。ファイルに保存するには、ファイル名を指定します。 +既定では、`draw_graph` はグラフをインライン表示します。ファイルとして保存するには、ファイル名を指定します: ```python draw_graph(triage_agent, filename="agent_graph") diff --git a/docs/ja/voice/pipeline.md b/docs/ja/voice/pipeline.md index a6328b838..5d0b15c63 100644 --- a/docs/ja/voice/pipeline.md +++ b/docs/ja/voice/pipeline.md @@ -4,7 +4,7 @@ search: --- # パイプラインとワークフロー -[`VoicePipeline`][agents.voice.pipeline.VoicePipeline] は、エージェント型ワークフローを音声アプリに変換しやすくするクラスです。実行したいワークフローを渡すと、パイプラインが入力音声の文字起こし、音声終了の検出、適切なタイミングでのワークフロー呼び出し、そしてワークフロー出力の音声化までを処理します。 +[`VoicePipeline`][agents.voice.pipeline.VoicePipeline] は、エージェント的なワークフローを音声アプリに簡単に変換できるクラスです。実行するワークフローを渡すと、パイプラインが入力音声の文字起こし、音声終了の検出、適切なタイミングでのワークフロー呼び出し、そしてワークフロー出力を音声へ戻す処理まで面倒を見ます。 ```mermaid graph LR @@ -34,29 +34,29 @@ graph LR ## パイプラインの設定 -パイプラインを作成するとき、次の項目を設定できます。 +パイプライン作成時には、次の項目を設定できます。 -1. [`workflow`][agents.voice.workflow.VoiceWorkflowBase]: 新しい音声が文字起こしされるたびに実行されるコード +1. [`workflow`][agents.voice.workflow.VoiceWorkflowBase]。これは新しい音声が文字起こしされるたびに実行されるコードです。 2. 使用する [`speech-to-text`][agents.voice.model.STTModel] と [`text-to-speech`][agents.voice.model.TTSModel] のモデル -3. [`config`][agents.voice.pipeline_config.VoicePipelineConfig]: 次のような項目を設定できます - - モデルプロバイダー(モデル名をモデルにマッピング) +3. [`config`][agents.voice.pipeline_config.VoicePipelineConfig]。次のような設定が可能です: + - モデル名をモデルへマッピングできるモデルプロバイダー - トレーシング(トレーシングの無効化、音声ファイルのアップロード可否、ワークフロー名、トレース ID など) - TTS と STT モデルの設定(プロンプト、言語、使用するデータ型など) ## パイプラインの実行 -パイプラインは [`run()`][agents.voice.pipeline.VoicePipeline.run] メソッドで実行でき、音声入力を 2 つの形式で渡せます。 +パイプラインは [`run()`][agents.voice.pipeline.VoicePipeline.run] メソッドで実行でき、音声入力を次の 2 つの形式で渡せます。 -1. [`AudioInput`][agents.voice.input.AudioInput]: 完全な音声全体の文字起こしがあり、その結果を生成したい場合に使用します。話者が話し終えたタイミングの検出が不要なケースに有用です(例: 事前録音の音声、ユーザーが話し終えたことが明確なプッシュ・トゥ・トークのアプリなど)。 -2. [`StreamedAudioInput`][agents.voice.input.StreamedAudioInput]: ユーザーが話し終えたタイミングの検出が必要な場合に使用します。検出された音声チャンクを順次プッシュでき、パイプラインは「アクティビティ検出 (activity detection)」というプロセスにより、適切なタイミングでエージェントのワークフローを自動実行します。 +1. [`AudioInput`][agents.voice.input.AudioInput] は、完全な音声トランスクリプトがある場合に、それに対する結果だけを生成したいときに使います。発話の終了検出が不要なケース、たとえば事前録音の音声や、ユーザーが話し終えたタイミングが明確なプッシュトゥトークのアプリで有用です。 +2. [`StreamedAudioInput`][agents.voice.input.StreamedAudioInput] は、ユーザーが話し終えたタイミングの検出が必要な場合に使用します。検出された音声チャンクを順次プッシュでき、パイプラインは「アクティビティ検出」によって適切なタイミングでエージェントのワークフローを自動実行します。 ## 結果 -音声パイプライン実行の結果は [`StreamedAudioResult`][agents.voice.result.StreamedAudioResult] です。これは、発生するイベントをストリーミングできるオブジェクトです。いくつかの種類の [`VoiceStreamEvent`][agents.voice.events.VoiceStreamEvent] があり、次を含みます。 +音声パイプライン実行の結果は [`StreamedAudioResult`][agents.voice.result.StreamedAudioResult] です。これはイベントを発生順にストリーミングできるオブジェクトです。いくつかの種類の [`VoiceStreamEvent`][agents.voice.events.VoiceStreamEvent] があり、次のものを含みます。 -1. [`VoiceStreamEventAudio`][agents.voice.events.VoiceStreamEventAudio]: 音声チャンクを含みます。 -2. [`VoiceStreamEventLifecycle`][agents.voice.events.VoiceStreamEventLifecycle]: ターンの開始・終了などのライフサイクルイベントを通知します。 -3. [`VoiceStreamEventError`][agents.voice.events.VoiceStreamEventError]: エラーイベントです。 +1. [`VoiceStreamEventAudio`][agents.voice.events.VoiceStreamEventAudio]。音声チャンクを含みます。 +2. [`VoiceStreamEventLifecycle`][agents.voice.events.VoiceStreamEventLifecycle]。ターンの開始・終了などのライフサイクルイベントを通知します。 +3. [`VoiceStreamEventError`][agents.voice.events.VoiceStreamEventError]。エラーイベントです。 ```python @@ -76,4 +76,4 @@ async for event in result.stream(): ### 割り込み -Agents SDK は現在、[`StreamedAudioInput`][agents.voice.input.StreamedAudioInput] に対する組み込みの割り込みサポートを提供していません。代わりに、検出された各ターンごとにワークフローの個別の実行がトリガーされます。アプリケーション内で割り込みを処理したい場合は、[`VoiceStreamEventLifecycle`][agents.voice.events.VoiceStreamEventLifecycle] イベントを購読してください。`turn_started` は新しいターンが文字起こしされ処理が開始されたことを示し、`turn_ended` は該当ターンのすべての音声が送出された後にトリガーされます。これらのイベントを使用して、モデルがターンを開始したときに話者のマイクをミュートし、そのターンに関連する音声をすべてフラッシュした後にアンミュートすることができます。 \ No newline at end of file +Agents SDK は現在、[`StreamedAudioInput`][agents.voice.input.StreamedAudioInput] に対する組み込みの割り込み処理をサポートしていません。代わりに、検出された各ターンごとにワークフローの別個の実行をトリガーします。アプリケーション内で割り込みを扱いたい場合は、[`VoiceStreamEventLifecycle`][agents.voice.events.VoiceStreamEventLifecycle] イベントを購読してください。`turn_started` は新しいターンが文字起こしされ処理が開始されたことを示します。`turn_ended` は該当ターンの音声がすべて送出された後に発火します。これらのイベントを使い、モデルがターンを開始したときに話者のマイクをミュートし、ターンに関連する音声の送出をすべて終えた後にミュートを解除する、といった制御が可能です。 \ No newline at end of file diff --git a/docs/ja/voice/quickstart.md b/docs/ja/voice/quickstart.md index f19e62e5d..bd568bf49 100644 --- a/docs/ja/voice/quickstart.md +++ b/docs/ja/voice/quickstart.md @@ -6,7 +6,7 @@ search: ## 前提条件 -Agents SDK の基本の[クイックスタート手順](../quickstart.md)に従い、仮想環境を設定してください。次に、SDK から音声用の任意依存関係をインストールします: +Agents SDK の基本的な [クイックスタートの手順](../quickstart.md) に従い、仮想環境をセットアップしてください。次に、この SDK から任意の音声関連の依存関係をインストールします: ```bash pip install 'openai-agents[voice]' @@ -16,9 +16,9 @@ pip install 'openai-agents[voice]' 主な概念は [`VoicePipeline`][agents.voice.pipeline.VoicePipeline] で、これは 3 段階のプロセスです: -1. 音声をテキストに変換するために音声認識モデルを実行します。 +1. 音声認識モデルで音声をテキストに変換します。 2. 通常はエージェント的なワークフローであるあなたのコードを実行して、結果を生成します。 -3. 結果のテキストを音声に戻すために音声合成モデルを実行します。 +3. 音声合成モデルで結果のテキストを音声に戻します。 ```mermaid graph LR @@ -48,7 +48,7 @@ graph LR ## エージェント -まず、いくつかのエージェントを設定します。この SDK でエージェントを作成したことがあれば、見覚えがあるはずです。ここでは複数のエージェント、ハンドオフ、そしてツールを用意します。 +まずはエージェントをいくつか用意します。これは、この SDK でエージェントを作成したことがある方にはおなじみのはずです。ここでは、複数のエージェント、ハンドオフ、そしてツールを用意します。 ```python import asyncio @@ -124,7 +124,7 @@ async for event in result.stream(): ``` -## 全体の統合 +## 統合 ```python import asyncio @@ -195,4 +195,4 @@ if __name__ == "__main__": asyncio.run(main()) ``` -このサンプルを実行すると、エージェントが音声で応答します。[examples/voice/static](https://github.com/openai/openai-agents-python/tree/main/examples/voice/static) にあるデモでは、あなた自身がエージェントに話しかけられます。 \ No newline at end of file +このサンプルを実行すると、エージェントがあなたに話しかけます。自分でエージェントに話しかけられるデモは、[examples/voice/static](https://github.com/openai/openai-agents-python/tree/main/examples/voice/static) をご覧ください。 \ No newline at end of file diff --git a/docs/ja/voice/tracing.md b/docs/ja/voice/tracing.md index 7b95d8687..9bdd7cf2f 100644 --- a/docs/ja/voice/tracing.md +++ b/docs/ja/voice/tracing.md @@ -4,15 +4,15 @@ search: --- # トレーシング -[エージェントのトレーシング](../tracing.md) と同様に、音声パイプラインも自動的にトレーシングされます。 +[エージェントのトレーシング](../tracing.md) と同様に、音声パイプラインも自動でトレーシングされます。 -基本的なトレーシング情報については上記のドキュメントをご覧ください。加えて、[`VoicePipelineConfig`][agents.voice.pipeline_config.VoicePipelineConfig] を使ってパイプラインのトレーシングを設定できます。 +基本的なトレーシング情報は上記ドキュメントをご確認ください。さらに、[`VoicePipelineConfig`][agents.voice.pipeline_config.VoicePipelineConfig] によってパイプラインのトレーシングを設定できます。 -トレーシングに関する主なフィールドは次のとおりです。 +トレーシング関連の主なフィールドは次のとおりです。 -- [`tracing_disabled`][agents.voice.pipeline_config.VoicePipelineConfig.tracing_disabled]: トレーシングを無効にするかどうかを制御します。デフォルトでは有効です。 -- [`trace_include_sensitive_data`][agents.voice.pipeline_config.VoicePipelineConfig.trace_include_sensitive_data]: 音声の書き起こしのような機微情報をトレースに含めるかどうかを制御します。これは音声パイプライン専用で、ワークフロー内で行われる処理には適用されません。 -- [`trace_include_sensitive_audio_data`][agents.voice.pipeline_config.VoicePipelineConfig.trace_include_sensitive_audio_data]: 音声データをトレースに含めるかどうかを制御します。 -- [`workflow_name`][agents.voice.pipeline_config.VoicePipelineConfig.workflow_name]: トレースのワークフロー名です。 -- [`group_id`][agents.voice.pipeline_config.VoicePipelineConfig.group_id]: 複数のトレースを関連付けるための `group_id` です。 -- [`trace_metadata`][agents.voice.pipeline_config.VoicePipelineConfig.tracing_disabled]: トレースに含める追加のメタデータです。 \ No newline at end of file +- [`tracing_disabled`][agents.voice.pipeline_config.VoicePipelineConfig.tracing_disabled]: トレーシングを無効化するかどうかを制御します。デフォルトでは有効です。 +- [`trace_include_sensitive_data`][agents.voice.pipeline_config.VoicePipelineConfig.trace_include_sensitive_data]: 音声の書き起こしなど、機微なデータをトレースに含めるかどうかを制御します。これは音声パイプライン専用で、あなたの ワークフロー 内部で行われる処理には適用されません。 +- [`trace_include_sensitive_audio_data`][agents.voice.pipeline_config.VoicePipelineConfig.trace_include_sensitive_audio_data]: トレースに音声データを含めるかどうかを制御します。 +- [`workflow_name`][agents.voice.pipeline_config.VoicePipelineConfig.workflow_name]: トレース ワークフロー の名前です。 +- [`group_id`][agents.voice.pipeline_config.VoicePipelineConfig.group_id]: 複数のトレースを関連付けるためのトレースの `group_id` です。 +- [`trace_metadata`][agents.voice.pipeline_config.VoicePipelineConfig.tracing_disabled]: トレースに含める追加メタデータです。 \ No newline at end of file