diff --git a/docs/ja/agents.md b/docs/ja/agents.md index 85e511984..ddd70e236 100644 --- a/docs/ja/agents.md +++ b/docs/ja/agents.md @@ -4,16 +4,16 @@ search: --- # エージェント -エージェントはアプリの中核を成す基本コンポーネントです。エージェントとは、指示とツールで構成された大規模言語モデル ( LLM ) です。 +エージェントはアプリのコアとなる構成要素です。エージェントは、大規模言語モデル ( LLM ) に instructions と tools を設定したものです。 ## 基本設定 -エージェントで最も一般的に設定するプロパティは以下のとおりです。 +エージェントで最もよく設定するプロパティは次のとおりです: -- `name`: エージェントを識別する必須の文字列です。 -- `instructions`: 開発者メッセージまたは system prompt とも呼ばれます。 -- `model`: 使用する LLM と、temperature や top_p などのモデル調整パラメーターを指定する `model_settings` (任意)。 -- `tools`: エージェントがタスクを達成するために使用できるツールです。 +- `name`: エージェントを識別する必須の文字列。 +- `instructions`: developer メッセージ、または system prompt とも呼ばれます。 +- `model`: 使用する LLM と、temperature や top_p などのチューニングパラメーターを設定する `model_settings` (任意)。 +- `tools`: エージェントがタスクを遂行するために使用できる tools。 ```python from agents import Agent, ModelSettings, function_tool @@ -33,7 +33,7 @@ agent = Agent( ## コンテキスト -エージェントは `context` 型を汎用的に扱います。コンテキストは依存性注入のためのツールで、あなたが作成して `Runner.run()` に渡すオブジェクトです。これはすべてのエージェント、ツール、ハンドオフなどに渡され、実行中の依存関係や状態をまとめて保持します。任意の Python オブジェクトをコンテキストとして渡せます。 +エージェントはその `context` 型に対してジェネリックです。コンテキストは依存性注入のためのツールで、`Runner.run()` に渡すオブジェクトです。これはすべてのエージェント、tool、handoff などに渡され、エージェント実行時の依存関係や状態をまとめて保持します。任意の 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/) でラップできる型—dataclass、list、TypedDict など—であれば何でも利用できます。 +デフォルトでは、エージェントはプレーンテキスト ( すなわち `str` ) を出力します。特定の型で出力させたい場合は `output_type` パラメーターを使用します。よく使われるのは [Pydantic](https://docs.pydantic.dev/) オブジェクトですが、Pydantic の [TypeAdapter](https://docs.pydantic.dev/latest/api/type_adapter/) でラップできる型 ― dataclass 、 list 、 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 @@ -96,9 +96,9 @@ triage_agent = Agent( ) ``` -## 動的インストラクション +## 動的 instructions -多くの場合、エージェント作成時に instructions を指定しますが、関数を介して動的に提供することも可能です。この関数はエージェントとコンテキストを受け取り、プロンプトを返す必要があります。同期関数と `async` 関数の両方が利用できます。 +多くの場合、エージェント作成時に instructions を渡せますが、関数を使って動的に生成することも可能です。その関数はエージェントとコンテキストを受け取り、プロンプトを返す必要があります。通常の関数と `async` 関数の両方に対応しています。 ```python def dynamic_instructions( @@ -115,15 +115,15 @@ agent = Agent[UserContext]( ## ライフサイクルイベント (hooks) -エージェントのライフサイクルを監視したい場合があります。たとえば、イベントをログに記録したり、特定のイベント発生時にデータをプリフェッチしたりするケースです。`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] を設定することでツール使用を強制できます。利用可能な値は以下のとおりです。 +tool のリストを指定しても、 LLM が必ずしも tool を使用するとは限りません。[`ModelSettings.tool_choice`][agents.model_settings.ModelSettings.tool_choice] を設定することで、tool 使用を強制できます。有効な値は次のとおりです: -1. `auto`: LLM がツールを使うかどうかを判断します。 -2. `required`: LLM にツール使用を必須とします (ただし使用するツールは自動選択)。 -3. `none`: LLM がツールを使用しないことを必須とします。 -4. 特定の文字列 (例: `my_tool`): LLM にそのツールの使用を必須とします。 +1. `auto` : LLM が tool を使うかどうかを判断します。 +2. `required` : LLM に tool の使用を必須とさせます ( どの tool を使うかは判断できます )。 +3. `none` : LLM に tool を使用しないことを要求します。 +4. 文字列を指定 ( 例: `my_tool` ) : 指定した tool の使用を要求します。 ```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` パラメーターは、tool の出力をどのように扱うかを制御します: +- `"run_llm_again"` : デフォルト。tool を実行し、その結果を LLM が処理して最終応答を生成します。 +- `"stop_on_first_tool"` : 最初の tool 呼び出しの出力をそのまま最終応答として使用し、以降の LLM 処理を行いません。 ```python from agents import Agent, Runner, function_tool, ModelSettings @@ -185,7 +185,7 @@ agent = Agent( ) ``` -- `StopAtTools(stop_at_tool_names=[...])`: 指定したいずれかのツールが呼び出された時点で停止し、その出力を最終応答として使用します。 +- `StopAtTools(stop_at_tool_names=[...])` : 指定した tool が呼び出された時点で停止し、その出力を最終応答として使用します。 ```python from agents import Agent, Runner, function_tool from agents.agent import StopAtTools @@ -207,7 +207,7 @@ agent = Agent( tool_use_behavior=StopAtTools(stop_at_tool_names=["get_weather"]) ) ``` -- `ToolsToFinalOutputFunction`: ツール結果を処理し、停止するか LLM 継続かを判断するカスタム関数です。 +- `ToolsToFinalOutputFunction` : tool の結果を処理し、停止するか 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` により再度ツール呼び出しが生成され…と繰り返される無限ループを防止するためです。 \ No newline at end of file + 無限ループを防ぐため、フレームワークは tool 呼び出し後に `tool_choice` を自動的に "auto" にリセットします。この挙動は [`agent.reset_tool_choice`][agents.agent.Agent.reset_tool_choice] で設定できます。無限ループは、tool の結果が LLM に渡され、`tool_choice` の指定により再び tool 呼び出しが生成される、というサイクルが続くことが原因です。 \ No newline at end of file diff --git a/docs/ja/config.md b/docs/ja/config.md index 6c9bdfef1..0059a7d2c 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 は `AsyncOpenAI` インスタンスを作成し、環境変数または上記で設定したデフォルトキーから API キーを取得します。これを変更するには、 [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 が使用されます。これを Chat Completions API に切り替えるには、[set_default_openai_api()][agents.set_default_openai_api] 関数を使用してください。 +最後に、使用する OpenAI API をカスタマイズすることも可能です。デフォルトでは、 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 にはハンドラーが設定されていない Python ロガーが 2 つ用意されています。デフォルトでは、warning と error は `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 guide](https://docs.python.org/3/howto/logging.html) を参照してください。 +ハンドラー、フィルター、フォーマッターなどを追加してログをカスタマイズすることもできます。詳細は [Python ロギングガイド](https://docs.python.org/3/howto/logging.html) を参照してください。 ```python import logging @@ -81,17 +81,17 @@ logger.setLevel(logging.WARNING) logger.addHandler(logging.StreamHandler()) ``` -### ログ内の機密データ +### ログに含まれる機密データ -一部のログには (たとえば ユーザー データ など) 機密データが含まれる場合があります。これらを記録したくない場合は、次の環境変数を設定してください。 +一部のログには機密データ(例: ユーザー データ)が含まれる場合があります。これらのデータが記録されないようにするには、次の環境変数を設定してください。 -LLM の入力と出力のロギングを無効にする: +LLM の入力と出力のログを無効化する: ```bash 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 db8f2061f..091755b89 100644 --- a/docs/ja/context.md +++ b/docs/ja/context.md @@ -4,30 +4,30 @@ 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. そのオブジェクトを各種 run メソッド(例: `Runner.run(..., **context=whatever**)`)に渡します。 -3. すべてのツール呼び出しやライフサイクルフックに、 `RunContextWrapper[T]` というラッパーオブジェクトが渡されます。ここで `T` はあなたのコンテキストオブジェクトの型で、 `wrapper.context` からアクセスできます。 +1. 任意の Python オブジェクトを作成します。一般的なパターンとしては dataclass や Pydantic オブジェクトを使用します。 +2. そのオブジェクトをさまざまな run メソッド (例: `Runner.run(..., **context=whatever**)`) に渡します。 +3. すべてのツール呼び出しやライフサイクルフックなどには `RunContextWrapper[T]` というラッパーオブジェクトが渡されます。ここで `T` はコンテキストオブジェクトの型を表し、`wrapper.context` からアクセスできます。 -最も重要なポイント: あるエージェント実行におけるすべてのエージェント、ツール関数、ライフサイクルフックは、同じ _型_ のコンテキストを使用しなければなりません。 +**最も重要** な点は、特定のエージェント実行において、エージェント、ツール関数、ライフサイクルフックなどはすべて同じコンテキストの _型_ を使用しなければならないということです。 -コンテキストは次のような用途に使えます。 +コンテキストは次のような用途で利用できます。 -- 実行用の文脈データ(例: ユーザー名 / uid など、 user に関する情報) -- 依存関係(例: ロガーオブジェクト、データフェッチャーなど) -- ヘルパー関数 +- 実行時のコンテキストデータ (例: ユーザー名 / uid やその他の user に関する情報) +- 依存関係 (例: ロガーオブジェクト、データフェッチャーなど) +- ヘルパー関数 !!! danger "Note" - コンテキストオブジェクトは **LLM に送信されません**。純粋にローカルで読み書きやメソッド呼び出しを行うためのオブジェクトです。 + コンテキストオブジェクトは **LLM に送信されません**。これは純粋にローカルなオブジェクトであり、読み書きやメソッド呼び出しが可能です。 ```python import asyncio @@ -66,17 +66,17 @@ if __name__ == "__main__": asyncio.run(main()) ``` -1. これはコンテキストオブジェクトです。ここでは dataclass を使っていますが、任意の型を利用できます。 -2. これはツールです。 `RunContextWrapper[UserInfo]` を受け取っています。ツールの実装はコンテキストから値を読み取ります。 -3. エージェントにジェネリック型 `UserInfo` を付けて、型チェッカーでエラー(たとえば異なるコンテキスト型を取るツールを渡した場合など)を検出できるようにします。 -4. `run` 関数にコンテキストを渡します。 +1. これはコンテキストオブジェクトです。ここでは dataclass を使用していますが、任意の型を使えます。 +2. これはツールです。`RunContextWrapper[UserInfo]` を受け取ることがわかります。ツールの実装はコンテキストから値を読み取ります。 +3. ジェネリック型として `UserInfo` をエージェントに指定することで、型チェッカーがエラーを検出できます (たとえば、異なるコンテキスト型を取るツールを渡そうとした場合など)。 +4. コンテキストは `run` 関数に渡されます。 5. エージェントはツールを正しく呼び出し、年齢を取得します。 ## エージェント / LLM コンテキスト -LLM が呼び出される際、 LLM が参照できるデータは会話履歴のみです。そのため、新しいデータを LLM に見せたい場合は、そのデータを会話履歴に含める形で提供しなければなりません。方法はいくつかあります。 + LLM が呼び出される際に参照できるデータは、会話履歴の内容だけです。そのため、新しいデータを LLM に渡したい場合は、そのデータを会話履歴に含める形で提供しなければなりません。これを実現する方法はいくつかあります。 -1. Agent の `instructions` に追加する。これは「 system prompt 」や「 developer message 」とも呼ばれます。 system prompt は静的な文字列でも、 context を受け取って文字列を返す動的関数でも構いません。常に有用な情報(例: ユーザーの名前や現在の日付)を渡す場合によく使われる手法です。 -2. `Runner.run` を呼び出す際の `input` に追加する。 `instructions` と似ていますが、より低い [chain of command](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` と似ていますが、[chain of command](https://cdn.openai.com/spec/model-spec-2024-05-08.html#follow-the-chain-of-command) 内でより下位のメッセージとして渡せます。 +3. 関数ツールを通じて公開する。これはオンデマンドのコンテキストに便利です ― LLM が必要だと判断したときにツールを呼び出してデータを取得できます。 +4. retrieval や Web 検索を使用する。retrieval はファイルやデータベースから関連データを取得し、Web 検索は Web から取得します。関連するコンテキストデータで応答をグラウンディングするのに役立ちます。 \ No newline at end of file diff --git a/docs/ja/examples.md b/docs/ja/examples.md index e83a76cb1..5c075e77d 100644 --- a/docs/ja/examples.md +++ b/docs/ja/examples.md @@ -4,45 +4,44 @@ search: --- # コード例 -SDK の各種サンプル実装は、[リポジトリ](https://github.com/openai/openai-agents-python/tree/main/examples) の examples セクションにまとめられています。これらのコード例は、さまざまなパターンと機能を示すカテゴリーごとに整理されています。 - +SDK の examples セクションでは、さまざまな実装サンプルを確認できます。[repo](https://github.com/openai/openai-agents-python/tree/main/examples) をご覧ください。これらの code examples は、異なるパターンと機能を示す複数の カテゴリー に整理されています。 ## カテゴリー - **[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 の基礎的な機能を紹介します。例: + ここでは、以下のような SDK の基礎的な機能を紹介します。 - 動的な system prompt - - ストリーミング出力 - - ライフサイクルイベント + - ストリーミング 出力 + - ライフサイクル イベント - **[tool examples](https://github.com/openai/openai-agents-python/tree/main/examples/tools):** - Web 検索 や ファイル検索 などの OpenAI がホストするツール の実装方法と、それらを エージェント に統合する方法を学べます。 + Web 検索 や ファイル検索 などの OpenAI がホストするツールの実装方法と、それらを エージェント に統合する方法を学べます。 - **[model providers](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers):** - OpenAI 以外のモデルを SDK と共に使用する方法を探求できます。 + OpenAI 以外のモデルを SDK と組み合わせて使用する方法を紹介します。 - **[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 を使った エージェント 構築方法を学べます。 - **[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 つの拡張されたコード例です + 実際のユースケースを示す、より大規模な 2 つの code examples - - **customer_service**: 航空会社向けのカスタマーサービス システムの例。 + - **customer_service**: 航空会社向けカスタマーサービス システムの例。 - **research_bot**: シンプルな ディープリサーチ クローン。 - **[voice](https://github.com/openai/openai-agents-python/tree/main/examples/voice):** - 当社の TTS および STT モデルを使用した音声 エージェント のコード例を参照できます。 + TTS と STT モデルを使用した音声 エージェント の例をご覧いただけます。 - **[realtime](https://github.com/openai/openai-agents-python/tree/main/examples/realtime):** - SDK を使用してリアルタイム体験を構築する方法を示すコード例です。 \ No newline at end of file + SDK を利用してリアルタイム体験を構築する方法を示す例。 \ No newline at end of file diff --git a/docs/ja/guardrails.md b/docs/ja/guardrails.md index 5439ca5b7..672682606 100644 --- a/docs/ja/guardrails.md +++ b/docs/ja/guardrails.md @@ -4,44 +4,44 @@ search: --- # ガードレール -ガードレールはエージェントと _並列_ で実行され、ユーザー入力のチェックとバリデーションを行えます。たとえば、顧客リクエストを処理するために非常に賢い(そのぶん遅く/高価な)モデルを使うエージェントがあるとします。悪意のあるユーザーに数学の宿題を手伝わせるような依頼をさせたくはありません。そのため、高速かつ低コストのモデルでガードレールを動かします。ガードレールが悪意のある利用を検出すると、即座にエラーを送出して高価なモデルの実行を停止し、時間とコストを節約できます。 +ガードレールはエージェントと _並列で_ 実行され、ユーザー入力のチェックと検証を行えます。たとえば、非常に賢い(そのため遅く/高価な)モデルを使ってカスタマーリクエストを処理するエージェントがあるとします。悪意のあるユーザーにそのモデルを使って数学の宿題を手伝わせたくはありません。そのため、速くて安価なモデルでガードレールを実行できます。ガードレールが悪意のある使用を検知すると、すぐにエラーを送出し、高価なモデルの実行を止めて時間とコストを節約できます。 -ガードレールには 2 種類あります。 +ガードレールには 2 種類あります: -1. Input ガードレール:最初のユーザー入力に対して実行されます -2. Output ガードレール:最終的なエージェント出力に対して実行されます +1. 入力ガードレール: 初期のユーザー入力に対して実行されます +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` を生成し、それが `InputGuardrailResult` でラップされます。 +3. 最後に `.tripwire_triggered` が true かどうかを確認します。true の場合、`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] 例外を送出し、ユーザーへの応答や例外処理を行います。 +2. 次に、ガードレール関数が実行され `GuardrailFunctionOutput` を生成し、それが `OutputGuardrailResult` でラップされます。 +3. 最後に `.tripwire_triggered` が true かどうかを確認します。true の場合、`OutputGuardrailTripwireTriggered` 例外が送出され、ユーザーへの応答や例外処理を適切に行えます。 !!! Note - 出力ガードレールは最終的なエージェント出力に対して動作することを想定しているため、エージェントが *最後* のエージェントである場合にのみ実行されます。入力ガードレールと同様に、ガードレールは実際のエージェントに強く関連しているため、コードを同じ場所に置くほうが読みやすくなります。 + 出力ガードレールは最終的なエージェント出力に対して実行されることを想定しているため、エージェントが *最後の* エージェントである場合にのみ実行されます。入力ガードレールと同様に、ガードレールは実際のエージェントに密接に関連しているため、コードを同じ場所に置くことで可読性が向上します。 -## トリップワイヤー +## トリップワイヤ -入力または出力がガードレールを通過できなかった場合、ガードレールはトリップワイヤーでその事実を示します。トリップワイヤーを発動したガードレールが検出され次第、`{Input,Output}GuardrailTripwireTriggered` 例外を直ちに送出し、エージェントの実行を停止します。 +入力または出力がガードレールを通過できなかった場合、ガードレールはトリップワイヤでこれを通知できます。トリップワイヤが発動したガードレールを検知すると、ただちに `{Input,Output}GuardrailTripwireTriggered` 例外を送出し、エージェントの実行を停止します。 ## ガードレールの実装 -入力を受け取り、[`GuardrailFunctionOutput`][agents.guardrail.GuardrailFunctionOutput] を返す関数を用意する必要があります。この例では、内部でエージェントを実行してこれを行います。 +入力を受け取り、`GuardrailFunctionOutput` を返す関数を用意する必要があります。以下の例では、内部でエージェントを実行してこれを行います。 ```python from pydantic import BaseModel @@ -94,10 +94,10 @@ async def main(): print("Math homework guardrail tripped") ``` -1. ガードレール関数内で使用するエージェントです。 +1. このエージェントをガードレール関数内で使用します。 2. これはエージェントの入力/コンテキストを受け取り、結果を返すガードレール関数です。 -3. ガードレール結果に追加情報を含めることもできます。 -4. 実際のワークフローを定義するエージェントです。 +3. ガードレール結果に追加情報を含めることができます。 +4. これがワークフローを定義する実際のエージェントです。 出力ガードレールも同様です。 @@ -155,4 +155,4 @@ async def main(): 1. これは実際のエージェントの出力型です。 2. これはガードレールの出力型です。 3. これはエージェントの出力を受け取り、結果を返すガードレール関数です。 -4. 実際のワークフローを定義するエージェントです。 \ No newline at end of file +4. これがワークフローを定義する実際のエージェントです。 \ No newline at end of file diff --git a/docs/ja/handoffs.md b/docs/ja/handoffs.md index 72cdb8c3d..e83f56fc9 100644 --- a/docs/ja/handoffs.md +++ b/docs/ja/handoffs.md @@ -4,15 +4,15 @@ search: --- # ハンドオフ -ハンドオフを使用すると、ある エージェント がタスクを別の エージェント に委任できます。これは、異なる エージェント がそれぞれ異なる分野を専門とするシナリオで特に便利です。たとえば、カスタマーサポート アプリには、注文状況、返金、 FAQ などのタスクをそれぞれ処理する エージェント が存在するかもしれません。 +ハンドオフを使用すると、ある エージェント がタスクを別の エージェント に委任できます。これは、異なる エージェント がそれぞれ特定の分野を専門とするシナリオで特に有用です。たとえば、カスタマーサポートアプリでは、注文状況、返金、 FAQ など各タスクを担当する エージェント を用意することがあります。 -ハンドオフは LLM に対してはツールとして表現されます。そのため、`Refund Agent` という エージェント へのハンドオフがある場合、ツール名は `transfer_to_refund_agent` となります。 +ハンドオフは LLM から見るとツールとして表現されます。そのため、`Refund Agent` へのハンドオフがある場合、ツール名は `transfer_to_refund_agent` になります。 ## ハンドオフの作成 -すべての エージェント には [`handoffs`][agents.agent.Agent.handoffs] パラメーターがあります。ここには `Agent` を直接指定することも、ハンドオフをカスタマイズする `Handoff` オブジェクトを指定することもできます。 +すべての エージェント には [`handoffs`][agents.agent.Agent.handoffs] パラメーターがあり、 `Agent` を直接渡すか、ハンドオフをカスタマイズする `Handoff` オブジェクトを渡すことができます。 -Agents SDK が提供する [`handoff()`][agents.handoffs.handoff] 関数を使用してハンドオフを作成できます。この関数では、ハンドオフ先の エージェント を指定できるほか、オーバーライドや入力フィルターも設定できます。 +Agents SDK が提供する [`handoff()`][agents.handoffs.handoff] 関数を使ってハンドオフを作成できます。この関数では、ハンドオフ先の エージェント を指定し、さらにオーバーライドや入力フィルターを任意で設定できます。 ### 基本的な使い方 @@ -28,18 +28,18 @@ 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()`][agents.handoffs.handoff] 関数では、以下の項目をカスタマイズできます。 +[`handoff()`][agents.handoffs.handoff] 関数を使うと、さまざまなカスタマイズが可能です。 -- `agent`: ハンドオフ先となる エージェント です。 -- `tool_name_override`: 既定では `Handoff.default_tool_name()` 関数が使用され、`transfer_to_` に解決されます。これを上書きできます。 -- `tool_description_override`: `Handoff.default_tool_description()` の既定のツール説明を上書きします。 -- `on_handoff`: ハンドオフが呼び出されたときに実行されるコールバック関数です。ハンドオフが呼び出されたことが分かった時点でデータフェッチを開始するなどに便利です。この関数は エージェント コンテキストを受け取り、オプションで LLM が生成した入力も受け取れます。入力データは `input_type` パラメーターで制御します。 -- `input_type`: ハンドオフが受け取る入力の型です (オプション)。 -- `input_filter`: 次の エージェント が受け取る入力をフィルタリングします。詳細は下記を参照してください。 +- `agent` : ハンドオフ先となる エージェント です。 +- `tool_name_override` : 既定では `Handoff.default_tool_name()` が使用され、`transfer_to_` となります。これを上書きできます。 +- `tool_description_override` : `Handoff.default_tool_description()` で生成されるデフォルトのツール説明を上書きします。 +- `on_handoff` : ハンドオフが呼び出された際に実行されるコールバック関数です。ハンドオフが行われた瞬間にデータ取得を開始するなどの用途に便利です。この関数は エージェント のコンテキストを受け取り、オプションで LLM が生成した入力も受け取れます。入力データの有無は `input_type` パラメーターで制御します。 +- `input_type` : ハンドオフが受け取る入力の型(任意)。 +- `input_filter` : 次の エージェント が受け取る入力をフィルタリングできます。詳細は後述します。 ```python from agents import Agent, handoff, RunContextWrapper @@ -59,7 +59,7 @@ handoff_obj = handoff( ## ハンドオフ入力 -状況によっては、ハンドオフを呼び出す際に LLM に何らかのデータを渡してほしいことがあります。たとえば “Escalation agent” にハンドオフする場合、ログ用に理由 (reason) を受け取りたいなどが考えられます。 +状況によっては、ハンドオフを呼び出す際に LLM からデータを受け取りたいことがあります。たとえば「Escalation agent」へのハンドオフでは、ログ用に理由を渡してもらいたいかもしれません。 ```python from pydantic import BaseModel @@ -83,9 +83,9 @@ handoff_obj = 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 @@ -99,11 +99,11 @@ handoff_obj = handoff( ) ``` -1. これにより、`FAQ agent` が呼び出された際に履歴からすべてのツールが自動的に削除されます。 +1. `FAQ agent` が呼び出されると、履歴からすべてのツールが自動的に削除されます。 ## 推奨プロンプト -LLM がハンドオフを正しく理解できるよう、エージェント にハンドオフに関する情報を含めることを推奨します。[`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 1ff82de4a..d678a92e3 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 アプリを構築できる SDK です。これは、以前にエージェント 用に実験的に提供していた [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 -- **ハンドオフ**、特定のタスクを他の エージェント に委任できる仕組み -- **ガードレール**、エージェント への入力を検証する機能 -- **セッション**、エージェント の実行をまたいで会話履歴を自動的に保持 +- **Agents**: instructions と tools を備えた LLM +- **Handoffs**: 特定のタスクを他のエージェントに委任できる機能 +- **Guardrails**: エージェントへの入力を検証する仕組み +- **Sessions**: エージェント実行間で会話履歴を自動管理する機能 -Python と組み合わせることで、これらの基本コンポーネントはツールと エージェント の複雑な関係を表現するのに十分強力であり、急な学習曲線なしに実用的なアプリケーションを構築できます。さらに SDK には組み込みの **トレーシング** が付属しており、エージェント フローを可視化してデバッグしたり、評価やモデルのファインチューニングに利用したりできます。 +Python と組み合わせることで、これらの基本コンポーネントはツールとエージェント間の複雑な関係を表現でき、急な学習コストなく実用的なアプリケーションを構築できます。さらに、SDK には組み込みの **トレーシング** が付属しており、エージェント フローの可視化・デバッグ・評価、さらにはモデルのファインチューニングまで行えます。 -## Agents SDK を使う理由 +## Agents SDK を利用する理由 -SDK には 2 つの設計原則があります: +SDK には次の 2 つの設計原則があります。 -1. 使う価値があるだけの機能を備えつつ、学習が速いように基本コンポーネントを最小限にすること -2. デフォルトで快適に動作しつつ、挙動を細部までカスタマイズできること +1. 使う価値のある十分な機能を備えつつ、学習が早いように基本コンポーネントを最小限にする。 +2. デフォルトで快適に動作しつつ、挙動を細かくカスタマイズできる。 -SDK の主な機能は次のとおりです: +主な機能は以下のとおりです。 -- エージェントループ: ツールの呼び出し、結果を LLM へ渡す処理、LLM が完了するまでのループを内蔵 -- Python ファースト: 新しい抽象を学ばずに、Python の言語機能だけで エージェント をオーケストレーション・連鎖 -- ハンドオフ: 複数の エージェント 間でタスクを調整・委任する強力な機能 -- ガードレール: エージェント と並行して入力検証を実行し、チェックに失敗した場合は早期に停止 -- セッション: エージェント の実行をまたいで会話履歴を自動管理し、手動の状態管理を不要に -- 関数ツール: 任意の Python 関数をツール化し、自動スキーマ生成と Pydantic によるバリデーションを提供 -- トレーシング: フローを可視化・デバッグ・モニタリングでき、OpenAI の評価・ファインチューニング・蒸留ツールを活用可能 +- Agent loop: tools の呼び出し、LLM への結果送信、LLM が完了するまでのループ処理を担う組み込みエージェント ループ。 +- Python ファースト: 新しい抽象化を学ばずに、言語そのものの機能でエージェントを編成・連結可能。 +- Handoffs: 複数エージェント間で調整・委任を行う強力な機能。 +- Guardrails: エージェントと並行して入力検証を実行し、失敗時には早期に処理を打ち切り。 +- Sessions: エージェント実行間の会話履歴を自動管理し、手動での状態管理を不要に。 +- 関数ツール: 任意の Python 関数をツール化し、自動スキーマ生成と 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 4d7a84283..1a12f1029 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)(別名 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 サーバーを利用して エージェント にツールやプロンプトを提供できます。 +Agents SDK は MCP をサポートしています。これにより、幅広い MCP サーバーを利用してエージェントにツールやプロンプトを提供できます。 ## MCP サーバー -現在、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) を使用する場合は次のようになります。 +以下は、[公式 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 サーバーの利用 +## MCP サーバーの使用 -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 @@ -54,11 +54,11 @@ agent=Agent( ## ツールフィルタリング -MCP サーバーでツールフィルターを設定することで、エージェント が利用できるツールを絞り込めます。SDK は静的フィルタリングと動的フィルタリングの両方をサポートしています。 +MCP サーバーにツールフィルターを設定して、エージェントが利用できるツールを制限できます。SDK は静的および動的フィルタリングの両方をサポートしています。 ### 静的ツールフィルタリング -シンプルな許可/ブロックリストの場合は、静的フィルタリングを使用します。 +単純な許可/ブロックリストの場合は静的フィルタリングを使用します。 ```python from agents.mcp import create_static_tool_filter @@ -88,14 +88,14 @@ server = MCPServerStdio( ``` **`allowed_tool_names` と `blocked_tool_names` の両方を設定した場合の処理順序は次のとおりです。** -1. まず `allowed_tool_names`(許可リスト)を適用し、指定したツールのみを残します。 -2. 次に `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` だけになります。 ### 動的ツールフィルタリング -より複雑なフィルタリングロジックが必要な場合は、関数を使った動的フィルターを利用します。 +より複雑なフィルタリングロジックが必要な場合は、関数を用いた動的フィルターを使用できます。 ```python from agents.mcp import ToolFilterContext @@ -134,21 +134,21 @@ server = MCPServerStdio( ) ``` -`ToolFilterContext` では以下にアクセスできます。 +`ToolFilterContext` では次の情報にアクセスできます。 - `run_context`: 現在の実行コンテキスト -- `agent`: ツールを要求している エージェント +- `agent`: ツールを要求しているエージェント - `server_name`: MCP サーバー名 ## プロンプト MCP サーバーは、エージェントの instructions を動的に生成するためのプロンプトも提供できます。これにより、パラメーターでカスタマイズ可能な再利用可能な instruction テンプレートを作成できます。 -### プロンプトの利用 +### プロンプトの使用 プロンプトをサポートする MCP サーバーは、次の 2 つの主要メソッドを提供します。 -- `list_prompts()`: サーバー上で利用可能なすべてのプロンプトを列挙します -- `get_prompt(name, arguments)`: オプションのパラメーター付きで特定のプロンプトを取得します +- `list_prompts()`: サーバー上で利用可能なすべてのプロンプトを一覧表示 +- `get_prompt(name, arguments)`: 任意のパラメーターを付与して特定のプロンプトを取得 ```python # List available prompts @@ -173,19 +173,19 @@ agent = Agent( ## キャッシュ -エージェント が実行されるたびに、MCP サーバーへ `list_tools()` を呼び出します。サーバーがリモートの場合、これはレイテンシーの原因になります。ツール一覧を自動的にキャッシュするには、[`MCPServerStdio`][agents.mcp.server.MCPServerStdio]、[`MCPServerSse`][agents.mcp.server.MCPServerSse]、[`MCPServerStreamableHttp`][agents.mcp.server.MCPServerStreamableHttp] に `cache_tools_list=True` を渡します。ツールリストが変わらないと確信できる場合のみ設定してください。 +エージェントが実行されるたびに、`list_tools()` が MCP サーバーに呼び出されます。特にリモートサーバーの場合、これはレイテンシーの原因になります。ツール一覧を自動的にキャッシュするには、[`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()` を呼び出します。 ## エンドツーエンドのコード例 -完全に動作するコード例は [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) で完全な動作例をご覧いただけます。 ## トレーシング -[トレーシング](./tracing.md) では MCP に関する操作が自動的に捕捉されます。対象は次のとおりです。 +[トレーシング](./tracing.md) では、次の MCP 操作が自動的にキャプチャされます。 -1. MCP サーバーへのツール一覧取得呼び出し +1. ツール一覧取得のための MCP サーバーへの呼び出し 2. 関数呼び出しに関する MCP 関連情報 ![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 42a09455c..9346eabfb 100644 --- a/docs/ja/models/index.md +++ b/docs/ja/models/index.md @@ -4,54 +4,54 @@ search: --- # モデル -Agents SDK には、OpenAI モデルをすぐに利用できる 2 種類のサポートが用意されています。 +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) を通じて利用できます。まず、litellm の依存関係グループをインストールします。 +[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 つあります(コード例は[こちら](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/))。 +他の LLM プロバイダーを統合する方法は、さらに 3 つあります([こちら](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/) にコード例があります)。 1. [`set_default_openai_client`][agents.set_default_openai_client] - `AsyncOpenAI` インスタンスを LLM クライアントとして全体で利用したい場合に便利です。OpenAI 互換の API エンドポイントを持つ LLM プロバイダーを使うケースで、`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) を参照してください。 + `AsyncOpenAI` のインスタンスをグローバルに LLM クライアントとして使用したい場合に便利です。OpenAI 互換のエンドポイントを持つプロバイダーで `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) を参照してください。 + `Runner.run` レベルで設定します。これにより、「この 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] - 特定のエージェントインスタンスにモデルを指定できます。これにより、エージェントごとに異なるプロバイダーを組み合わせることができます。設定例は [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) が便利です。 + 特定の `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) が便利です。 -`platform.openai.com` の API キーを持っていない場合は、`set_tracing_disabled()` でトレーシングを無効化するか、[別のトレーシングプロセッサー](../tracing.md) を設定することを推奨します。 +`platform.openai.com` の API キーを持たない場合は、`set_tracing_disabled()` でトレーシングを無効化するか、[別のトレーシングプロセッサー](../tracing.md) を設定することを推奨します。 !!! note - これらの例では Chat Completions API/モデルを使用しています。多くの LLM プロバイダーがまだ Responses API をサポートしていないためです。もし利用する LLM プロバイダーが Responses API をサポートしている場合は、Responses の使用を推奨します。 + これらの例では Chat Completions API/モデルを使用しています。多くの LLM プロバイダーがまだ Responses API をサポートしていないためです。もしお使いの LLM プロバイダーが Responses API をサポートしている場合は、Responses の利用を推奨します。 -## モデルの組み合わせ +## モデルを組み合わせて使用する -1 つのワークフロー内で、エージェントごとに異なるモデルを使いたい場合があります。たとえば、振り分けには小さく高速なモデルを使い、複雑なタスクにはより大きく高性能なモデルを使うといったケースです。[`Agent`][agents.Agent] を設定する際、以下のいずれかでモデルを選択できます。 +1 つのワークフロー内で、エージェントごとに異なるモデルを使いたい場合があります。たとえば、仕分けには小さく高速なモデルを、複雑なタスクには大きく高性能なモデルを使うイメージです。[`Agent`][agents.Agent] を設定する際、以下のいずれかでモデルを指定できます。 -1. モデル名を直接渡す -2. 任意のモデル名と、それを Model インスタンスへマッピングできる [`ModelProvider`][agents.models.interface.ModelProvider] を渡す -3. [`Model`][agents.models.interface.Model] 実装を直接渡す +1. モデル名を直接渡す。 +2. 任意のモデル名 + その名前をモデルインスタンスにマッピングできる [`ModelProvider`][agents.models.interface.ModelProvider] を渡す。 +3. [`Model`][agents.models.interface.Model] 実装を直接渡す。 !!!note - SDK は [`OpenAIResponsesModel`][agents.models.openai_responses.OpenAIResponsesModel] と [`OpenAIChatCompletionsModel`][agents.models.openai_chatcompletions.OpenAIChatCompletionsModel] の両方の形状をサポートしていますが、ワークフローごとに 1 つのモデル形状を使用することを推奨します。2 つの形状は対応機能や tools が異なるためです。もし混在させる必要がある場合は、使用する機能が両形状で利用可能か確認してください。 + SDK は [`OpenAIResponsesModel`][agents.models.openai_responses.OpenAIResponsesModel] と [`OpenAIChatCompletionsModel`][agents.models.openai_chatcompletions.OpenAIChatCompletionsModel] の両方をサポートしていますが、ワークフローごとに 1 つのモデル形状に統一することを推奨します。両モデルは利用できる機能やツールが異なるためです。モデル形状を混在させる必要がある場合は、使用したい機能が両形状でサポートされていることを確認してください。 ```python from agents import Agent, Runner, AsyncOpenAI, OpenAIChatCompletionsModel @@ -84,10 +84,10 @@ async def main(): print(result.final_output) ``` -1. OpenAI モデル名を直接設定しています。 +1. OpenAI モデル名を直接指定しています。 2. [`Model`][agents.models.interface.Model] 実装を提供しています。 -エージェントが使用するモデルをさらに詳細に設定したい場合は、`temperature` などのオプションを指定できる [`ModelSettings`][agents.models.interface.ModelSettings] を渡せます。 +エージェントで使用するモデルをさらに細かく設定したい場合は、`temperature` などを指定できる [`ModelSettings`][agents.models.interface.ModelSettings] を渡してください。 ```python from agents import Agent, ModelSettings @@ -100,7 +100,7 @@ english_agent = Agent( ) ``` -また、OpenAI の Responses API を使用する場合、`user` や `service_tier` など[追加のオプションパラメーター](https://platform.openai.com/docs/api-reference/responses/create)があります。トップレベルに用意されていない場合は、`extra_args` を使って渡すことも可能です。 +また、OpenAI の Responses API を使う場合は、`user` や `service_tier` などの[その他のオプション](https://platform.openai.com/docs/api-reference/responses/create)も利用できます。トップレベルで指定できない場合は、`extra_args` で渡してください。 ```python from agents import Agent, ModelSettings @@ -116,24 +116,24 @@ english_agent = Agent( ) ``` -## 他の LLM プロバイダー使用時の一般的な問題 +## 他の LLM プロバイダーを使用する際の一般的な問題 -### Tracing クライアントのエラー 401 +### トレーシングクライアントでの 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) を参照してください。 +3. OpenAI 以外のトレーシングプロセッサーを使用する。詳しくは [tracing ドキュメント](../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] を使用する。コード例は[こちら](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] を使用する。コード例は[こちら](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/)にあります。 ### structured outputs のサポート @@ -145,12 +145,12 @@ BadRequestError: Error code: 400 - {'error': {'message': "'response_format.type' ``` -これは一部のモデルプロバイダーの制限によるものです。JSON 出力自体はサポートしていても、出力に使用する `json_schema` を指定できません。当社では修正に取り組んでいますが、JSON スキーマ出力をサポートするプロバイダーを利用することを推奨します。そうでない場合、不正な JSON によりアプリが頻繁に壊れる可能性があります。 +これは一部プロバイダーの制限で、JSON 出力には対応していても `json_schema` を指定できないために起こります。現在修正に取り組んでいますが、JSON スキーマ出力をサポートしているプロバイダーを選ぶことを推奨します。そうしないと、不正な JSON が返りアプリが頻繁に壊れる可能性があります。 -## プロバイダーを跨いだモデルの混在 +## プロバイダーをまたいだモデルの混在 -モデルプロバイダー間の機能差を理解しておかないと、エラーに遭遇することがあります。たとえば、OpenAI は structured outputs、マルチモーダル入力、OpenAI がホストするファイル検索や Web 検索をサポートしていますが、多くの他プロバイダーは未対応です。以下の制限に注意してください。 +モデルプロバイダーごとの機能差に注意しないと、エラーに遭遇する可能性があります。たとえば、OpenAI は structured outputs、マルチモーダル入力、ホスト型 file search や web search をサポートしていますが、多くの他プロバイダーはこれらをサポートしていません。以下の制限事項にご注意ください。 -- 対応していないプロバイダーに `tools` を送らない -- テキスト専用モデルを呼び出す前にマルチモーダル入力をフィルターする -- structured JSON 出力をサポートしないプロバイダーでは、無効な JSON が返ることがある点に注意する \ No newline at end of file +- サポートしていない `tools` を理解しないプロバイダーに送らない +- テキストのみのモデルを呼び出す前にマルチモーダル入力を除外する +- structured JSON 出力をサポートしていないプロバイダーでは、無効な JSON が返ることがあります \ No newline at end of file diff --git a/docs/ja/models/litellm.md b/docs/ja/models/litellm.md index 83ec06ffc..f2a892e15 100644 --- a/docs/ja/models/litellm.md +++ b/docs/ja/models/litellm.md @@ -2,33 +2,33 @@ 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/) は、1 つのインターフェースで 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]" ``` -インストールが完了すると、任意のエージェントで [`LitellmModel`][agents.extensions.models.litellm_model.LitellmModel] を使用できます。 +準備ができたら、任意のエージェントで [`LitellmModel`][agents.extensions.models.litellm_model.LitellmModel] を使用できます。 ## 例 -これは完全に動作するコード例です。実行すると、モデル名と API キーの入力を求められます。例えば次のように入力できます。 +以下は動作する完全な例です。実行すると、モデル名と API キーの入力を求められます。たとえば次のように入力できます。 -- モデルに `openai/gpt-4.1`、API キーに OpenAI の API キー -- モデルに `anthropic/claude-3-5-sonnet-20240620`、API キーに Anthropic の API キー -- など +- `openai/gpt-4.1` をモデルとして指定し、OpenAI API キーを入力 +- `anthropic/claude-3-5-sonnet-20240620` をモデルとして指定し、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 e59cc8fc6..2167ab880 100644 --- a/docs/ja/multi_agent.md +++ b/docs/ja/multi_agent.md @@ -2,40 +2,40 @@ search: exclude: true --- -# 多数のエージェントのオーケストレーション +# 複数エージェントのオーケストレーション -オーケストレーションとは、アプリ内でのエージェントの流れを指します。どのエージェントが実行されるのか、どの順番で動くのか、次に何をすべきかをどのように決定するのか、ということです。エージェントをオーケストレーションする方法は主に 2 つあります: +オーケストレーションとは、アプリ内でエージェントがどのように流れるかを指します。どのエージェントを実行するか、どの順序で実行するか、次に何を行うかをどのように決定するかということです。エージェントをオーケストレーションする方法は主に 2 つあります。 -1. LLM に意思決定を任せる: LLM の知能を活用して計画・推論し、次に取るべきステップを決定します。 -2. コードによるオーケストレーション: コードでエージェントの流れを決定します。 +1. LLM に意思決定を任せる方法: LLM の知能を使って計画し、推論し、それに基づいて次のステップを決定します。 +2. コードでオーケストレーションする方法: コードによってエージェントのフローを決定します。 -これらのパターンは組み合わせて利用できます。それぞれにメリットとデメリットがあるため、以下で説明します。 +これらのパターンを組み合わせることもできます。それぞれにトレードオフがあり、以下で説明します。 ## LLM によるオーケストレーション -エージェントとは、 instructions ・ tools ・ハンドオフを備えた LLM です。つまり、オープンエンドなタスクが与えられた場合、 LLM は自律的にタスクの進め方を計画し、 tools を使って行動してデータを取得し、ハンドオフを使ってサブエージェントにタスクを委任できます。たとえば、リサーチ用エージェントには次のような tools を備えられます: +エージェントとは、instructions、tools、ハンドオフを備えた LLM です。つまり、オープンエンドなタスクが与えられたとき、LLM はタスクに取り組む方法を自律的に計画し、ツールを使ってアクションを実行してデータを取得し、ハンドオフを使ってサブエージェントにタスクを委任できます。たとえば、リサーチエージェントは次のようなツールを備えることができます。 -- Web 検索でオンライン情報を取得 -- ファイル検索と取得により、社内データや接続先を検索 -- コンピュータ操作で PC 上のアクションを実行 -- コード実行でデータ分析を行う -- 優れた計画立案やレポート作成などに特化したエージェントへのハンドオフ +- Web 検索でオンライン情報を取得 +- ファイル検索とリトリーバルで社内データや接続先を検索 +- コンピュータ操作でコンピュータ上のアクションを実行 +- コード実行でデータ分析を行う +- 計画立案やレポート作成などが得意な専門エージェントへのハンドオフ -このパターンはタスクがオープンエンドで、 LLM の知能に依存したい場合に非常に有効です。最も重要な戦術は次のとおりです。 +このパターンはタスクがオープンエンドで、LLM の知能に依存したい場合に最適です。ここで重要なポイントは次のとおりです。 -1. 良いプロンプトに投資する。利用できる tools、使用方法、そしてどのパラメーターの範囲で動作するかを明確にします。 -2. アプリを監視して継続的に改善する。問題が発生する箇所を把握し、プロンプトを繰り返し改善します。 -3. エージェント自身に内省させて改善させる。たとえばループで実行して自己批評させたり、エラーメッセージを与えて改善させたりします。 -4. 何でもこなす汎用エージェントではなく、特定タスクに秀でた専門エージェントを用意します。 -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 を使用して適切な形式のデータを生成し、コードで検査する。たとえば、エージェントにタスクをいくつかのカテゴリーに分類させ、そのカテゴリーに応じて次のエージェントを選択します。 -- 複数のエージェントを連鎖させ、一方の出力を次の入力に変換する。たとえばブログ記事を書くタスクを、リサーチ、アウトライン作成、本文執筆、批評、改善という一連のステップに分割できます。 -- タスクを実行するエージェントを `while` ループで回し、評価とフィードバックを行うエージェントと組み合わせ、評価者が基準を満たしたと判断するまで繰り返します。 -- `asyncio.gather` のような Python の基本コンポーネントを使って複数のエージェントを並列実行する。相互に依存しないタスクが複数ある場合、速度向上に有効です。 +- [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`](https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns) に多数のコード例があります。 \ No newline at end of file diff --git a/docs/ja/quickstart.md b/docs/ja/quickstart.md index 3a12fb811..e3c1d896c 100644 --- a/docs/ja/quickstart.md +++ b/docs/ja/quickstart.md @@ -6,7 +6,7 @@ search: ## プロジェクトと仮想環境の作成 -この作業は一度だけで大丈夫です。 +この作業は一度だけでかまいません。 ```bash mkdir my_project @@ -22,23 +22,23 @@ python -m venv .venv source .venv/bin/activate ``` -### Agents SDK のインストール +### Agents SDK のインストール ```bash pip install openai-agents # or `uv add openai-agents`, etc ``` -### OpenAI API キーを設定する +### OpenAI API キーの設定 -まだお持ちでない場合は、[こちらの手順](https://platform.openai.com/docs/quickstart#create-and-export-an-api-key) に従って OpenAI API キーを作成してください。 +まだお持ちでない場合は、[こちらの手順](https://platform.openai.com/docs/quickstart#create-and-export-an-api-key)に従って OpenAI API キーを作成してください。 ```bash export OPENAI_API_KEY=sk-... ``` -## 最初のエージェントを作成する +## 最初のエージェントの作成 -エージェントは instructions、名前、`model_config` などのオプション設定で定義します。 +エージェントは instructions、名前、そして `model_config` などのオプションの config で定義します。 ```python from agents import Agent @@ -49,9 +49,9 @@ agent = Agent( ) ``` -## エージェントをさらに追加する +## エージェントの追加 -追加のエージェントも同じ方法で定義できます。`handoff_descriptions` はハンドオフのルーティングを決定するための追加コンテキストを提供します。 +同じ方法で追加のエージェントを定義できます。`handoff_descriptions` はハンドオフ経路を判断するための追加コンテキストを提供します。 ```python from agents import Agent @@ -69,9 +69,9 @@ math_tutor_agent = Agent( ) ``` -## ハンドオフを定義する +## ハンドオフの定義 -各エージェントでは、タスクを進める際に選択できるアウトゴーイングハンドオフのオプション一覧を定義できます。 +各エージェントでは、タスクを進める方法を決定するために選択できる送信先ハンドオフオプションの一覧を定義できます。 ```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) ``` -## ガードレールを追加する +## ガードレールの追加 -入出力に対して実行するカスタムガードレールを定義できます。 +入力または出力に対して実行するカスタムガードレールを定義できます。 ```python from agents import GuardrailFunctionOutput, Agent, Runner @@ -121,9 +121,9 @@ async def homework_guardrail(ctx, agent, input_data): ) ``` -## すべてを組み合わせる +## すべてをまとめて実行 -ハンドオフと入力ガードレールを使用して、ワークフロー全体を実行してみましょう。 +ハンドオフと入力ガードレールを使用しながら、ワークフロー全体をまとめて実行してみましょう。 ```python from agents import Agent, InputGuardrail, GuardrailFunctionOutput, Runner @@ -190,14 +190,14 @@ if __name__ == "__main__": asyncio.run(main()) ``` -## トレースを確認する +## トレースの表示 -エージェント実行中に何が起きたかを確認するには、OpenAI Dashboard の [Trace viewer](https://platform.openai.com/traces) に移動してトレースをご覧ください。 +エージェント実行中に何が起こったかを確認するには、[OpenAI ダッシュボードの Trace viewer](https://platform.openai.com/traces) に移動してエージェント実行のトレースを表示します。 ## 次のステップ -より複雑なエージェントフローの構築方法を学びましょう: +より複雑なエージェントフローの構築方法を学びましょう。 -- [エージェント](agents.md) の設定方法を学ぶ。 -- [エージェントの実行](running_agents.md) について学ぶ。 -- [tools](tools.md)、[guardrails](guardrails.md)、[models](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 a1523fa3a..4360ba39e 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 エージェントはベータ版です。実装を改善する過程で互換性が失われる変更が入る可能性があります。 +!!! warning "Beta feature" +Realtime エージェントはベータ版です。実装改善に伴い、互換性が失われる可能性があります。 ## 概要 -Realtime エージェントは、音声およびテキスト入力をリアルタイムで処理し、音声で応答する会話フローを実現します。 OpenAI の Realtime API と永続的に接続を維持することで、低レイテンシで自然な音声対話が可能となり、ユーザーの割り込みにもスムーズに対応できます。 +Realtime エージェントは、音声とテキスト入力をリアルタイムで処理し、音声で応答する会話フローを実現します。OpenAI の Realtime API との永続接続を維持し、低遅延かつ自然な音声対話を可能にし、割り込みにもスムーズに対応します。 ## アーキテクチャ ### 主要コンポーネント -Realtime システムは次の主要コンポーネントで構成されています。 +Realtime システムは次の主要コンポーネントで構成されます。 -- **RealtimeAgent**: instructions、tools、handoffs を設定したエージェントです。 -- **RealtimeRunner**: 設定を管理します。 `runner.run()` を呼び出すことでセッションを取得できます。 -- **RealtimeSession**: 1 回の対話セッションを表します。通常、ユーザーが会話を開始するたびに作成し、会話が終了するまで保持します。 -- **RealtimeModel**: 基盤となるモデル インターフェース(通常は OpenAI の WebSocket 実装)です。 +- **RealtimeAgent**: instructions、tools、handoffs を設定したエージェント。 +- **RealtimeRunner**: 設定を管理します。`runner.run()` を呼び出してセッションを取得します。 +- **RealtimeSession**: 1 回の対話セッション。ユーザーが会話を開始するたびに作成し、会話が終了するまで保持します。 +- **RealtimeModel**: 基盤となるモデル インターフェース (通常は OpenAI の WebSocket 実装)。 ### セッションフロー -一般的な Realtime セッションは次の流れになります。 +典型的な realtime セッションは次の流れで進行します。 -1. **RealtimeAgent** を作成し、instructions、tools、handoffs を設定します。 -2. エージェントと設定オプションを指定して **RealtimeRunner** を準備します。 -3. `await runner.run()` を実行して **セッションを開始** します。これにより RealtimeSession が返されます。 -4. `send_audio()` または `send_message()` を使用して **音声またはテキスト メッセージを送信** します。 -5. セッションを反復処理して **イベントを受信** します。イベントには音声出力、文字起こし、ツール呼び出し、ハンドオフ、エラーなどが含まれます。 -6. ユーザーがエージェントの発話に重ねて話した場合の **割り込み処理** を行います。割り込み時には自動的に現在の音声生成が停止します。 +1. **RealtimeAgent** を instructions、tools、handoffs と共に作成する +2. エージェントと設定オプションを用いて **RealtimeRunner** を準備する +3. `await runner.run()` で **セッションを開始** し、RealtimeSession を取得する +4. `send_audio()` または `send_message()` で **音声またはテキストを送信** する +5. セッションをイテレートして **イベントを監視** する — 音声出力、文字起こし、ツール呼び出し、ハンドオフ、エラーなど +6. ユーザーが話し始めたら **割り込みを処理** し、現在の音声生成を自動で停止させる -セッションは会話履歴を保持し、Realtime モデルとの永続接続を管理します。 +セッションは会話履歴を保持し、realtime モデルとの永続接続を管理します。 ## エージェント設定 -RealtimeAgent は通常の Agent クラスとほぼ同じですが、いくつか重要な違いがあります。詳細な API は [`RealtimeAgent`][agents.realtime.agent.RealtimeAgent] を参照してください。 +RealtimeAgent は通常の Agent クラスと似ていますが、いくつかの重要な違いがあります。詳細は [`RealtimeAgent`][agents.realtime.agent.RealtimeAgent] API リファレンスをご覧ください。 -主な違い +主な違い: -- モデルの選択はエージェント レベルではなくセッション レベルで設定します。 -- structured outputs( `outputType` )はサポートされません。 -- ボイスはエージェントごとに設定できますが、最初のエージェントが発話した後に変更することはできません。 -- tools、handoffs、instructions などその他の機能は通常のエージェントと同様に動作します。 +- モデル選択はエージェントではなくセッションレベルで設定します。 +- structured outputs (`outputType`) はサポートされません。 +- 音声はエージェント単位で設定できますが、最初のエージェントが発話した後は変更できません。 +- 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)、対応モダリティ (text/audio) を指定可能です。入出力の音声フォーマットは両方とも設定でき、デフォルトは PCM16 です。 ### オーディオ設定 -オーディオ設定では音声入力および出力の扱いを制御します。Whisper などのモデルを用いた入力音声の文字起こし、言語設定、ドメイン固有語の認識精度を向上させる transcription prompts を指定できます。ターン検出では、音声活動検出のしきい値、無音時間、検出した音声の前後パディングなどを設定し、エージェントが応答を開始・終了するタイミングを制御します。 +オーディオ設定では、音声入力と出力の扱いを制御します。Whisper などのモデルで入力音声を文字起こししたり、言語を指定したり、専門用語の認識精度を高める transcription prompt を提供できます。ターン検出では、音声アクティビティ検出のしきい値、無音時間、前後のパディングなどを調整し、エージェントが発話を開始・終了すべきタイミングを制御します。 -## Tools と Functions +## ツールと関数 -### Tools の追加 +### ツールの追加 -通常のエージェントと同様に、Realtime エージェントは会話中に実行される function tools をサポートします。 +通常のエージェントと同様、realtime エージェントでも会話中に実行される function tools を利用できます。 ```python from agents import function_tool @@ -90,7 +90,7 @@ agent = RealtimeAgent( ### ハンドオフの作成 -ハンドオフを使用すると、会話を専門化されたエージェント間で転送できます。 +ハンドオフを使用すると、会話を専門化されたエージェント間で引き継げます。 ```python from agents.realtime import realtime_handoff @@ -119,40 +119,40 @@ main_agent = RealtimeAgent( ## イベント処理 -セッションはイベントをストリーム配信するため、セッション オブジェクトを反復処理してイベントを受信できます。主なイベントは次のとおりです。 +セッションはイベントをストリーミングします。セッションオブジェクトをイテレートしてイベントを受け取ります。主なイベントは以下のとおりです。 -- **audio**: エージェントの応答から生成される raw 音声データ -- **audio_end**: エージェントの発話が終了したことを示します -- **audio_interrupted**: ユーザーがエージェントの発話を割り込んだことを示します -- **tool_start/tool_end**: ツール実行のライフサイクル -- **handoff**: エージェントのハンドオフが発生したことを示します -- **error**: 処理中にエラーが発生しました +- **audio**: エージェントの応答としての raw 音声データ +- **audio_end**: エージェントの発話が終了 +- **audio_interrupted**: ユーザーがエージェントを割り込み +- **tool_start/tool_end**: ツール実行の開始・終了 +- **handoff**: エージェント間のハンドオフ発生 +- **error**: 処理中にエラー発生 -すべてのイベントの詳細は [`RealtimeSessionEvent`][agents.realtime.events.RealtimeSessionEvent] を参照してください。 +詳細は [`RealtimeSessionEvent`][agents.realtime.events.RealtimeSessionEvent] を参照してください。 ## ガードレール -Realtime エージェントでは出力ガードレールのみがサポートされています。パフォーマンスへの影響を避けるため、ガードレールはデバウンスされて定期的に(毎単語ではなく)実行されます。デフォルトのデバウンス長は 100 文字ですが、変更可能です。 +Realtime エージェントでは出力ガードレールのみがサポートされています。パフォーマンス低下を防ぐため、ガードレールはデバウンスされ、一定間隔 (デフォルトは 100 文字) ごとに評価されます。 -ガードレールがトリップすると `guardrail_tripped` イベントが生成され、エージェントの現在の応答を中断できます。デバウンスにより安全性とリアルタイム性能のバランスを取っています。テキスト エージェントと異なり、Realtime エージェントではガードレール トリップ時に Exception は送出されません。 +ガードレールが発動すると `guardrail_tripped` イベントが生成され、エージェントの現在の返答を中断する場合があります。デバウンスにより、安全性とリアルタイム性能のバランスを取っています。テキストエージェントと異なり、ガードレール発動時に 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 session.model.add_listener(my_custom_listener) ``` -これにより、高度なユースケースで接続を低レベルで制御するための [`RealtimeModel`][agents.realtime.model.RealtimeModel] インターフェースに直接アクセスできます。 +これにより、低レベルで接続を制御したい高度なユースケース向けに [`RealtimeModel`][agents.realtime.model.RealtimeModel] インターフェースを直接利用できます。 -## 例 +## コード例 -実際に動作するサンプルは、 UI あり / なし のデモを含む [examples/realtime ディレクトリ](https://github.com/openai/openai-agents-python/tree/main/examples/realtime) を参照してください。 \ No newline at end of file +完全な動作例は、[examples/realtime ディレクトリ](https://github.com/openai/openai-agents-python/tree/main/examples/realtime) を参照してください。UI あり・なしのデモが含まれています。 \ No newline at end of file diff --git a/docs/ja/realtime/quickstart.md b/docs/ja/realtime/quickstart.md index 9ededfaec..490dd41d0 100644 --- a/docs/ja/realtime/quickstart.md +++ b/docs/ja/realtime/quickstart.md @@ -4,35 +4,36 @@ search: --- # クイックスタート -リアルタイム エージェントを使用すると、OpenAI の Realtime API を介して AI エージェントと音声で対話できます。このガイドでは、最初のリアルタイム音声エージェントを作成する手順を説明します。 +OpenAI の Realtime API を使用すると、リアルタイム エージェントを通じて AI エージェントとの音声会話が可能になります。 +本ガイドでは、初めてのリアルタイム音声 エージェントを作成する手順を説明します。 !!! warning "ベータ機能" -リアルタイム エージェントは現在ベータ版です。実装の改善に伴い、破壊的な変更が行われる可能性があります。 +リアルタイム エージェントは現在ベータ版です。実装の改善に伴い破壊的変更が発生する可能性がありますのでご注意ください。 -## 必要条件 +## 前提条件 -- Python 3.9 以上 -- OpenAI API キー -- OpenAI Agents SDK の基本的な知識 +- Python 3.9 以上 +- OpenAI API キー +- OpenAI Agents SDK の基本的な操作経験 ## インストール -まだインストールしていない場合は、OpenAI Agents SDK をインストールしてください: +まだインストールしていない場合は、OpenAI Agents SDK をインストールします: ```bash pip install openai-agents ``` -## 初めてのリアルタイム エージェントの作成 +## 最初のリアルタイム エージェントの作成 -### 1. 必須コンポーネントのインポート +### 1. 必要なコンポーネントをインポートする ```python import asyncio from agents.realtime import RealtimeAgent, RealtimeRunner ``` -### 2. リアルタイム エージェントの作成 +### 2. リアルタイム エージェントを作成する ```python agent = RealtimeAgent( @@ -41,7 +42,7 @@ agent = RealtimeAgent( ) ``` -### 3. Runner のセットアップ +### 3. ランナーを設定する ```python runner = RealtimeRunner( @@ -56,7 +57,7 @@ runner = RealtimeRunner( ) ``` -### 4. セッションの開始 +### 4. セッションを開始する ```python async def main(): @@ -81,7 +82,7 @@ asyncio.run(main()) ## 完全なコード例 -以下は動作する完全なコード例です: +こちらが動作する完全なコード例です: ```python import asyncio @@ -139,9 +140,9 @@ if __name__ == "__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"]`) ### オーディオ設定 @@ -149,30 +150,30 @@ if __name__ == "__main__": - `output_audio_format`: 出力オーディオの形式 - `input_audio_transcription`: 文字起こしの設定 -### 発話検出 +### ターン検出 - `type`: 検出方法 (`server_vad`, `semantic_vad`) -- `threshold`: 音声活動のしきい値 (0.0-1.0) -- `silence_duration_ms`: 発話終了を検出する無音時間 -- `prefix_padding_ms`: 発話前のオーディオのパディング +- `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) フォルダーにあるコード例を確認する -- エージェントに tools を追加する -- エージェント間でハンドオフを実装する -- 安全性のためのガードレールを設定する +- [リアルタイム エージェントについて詳しく学ぶ](guide.md) +- リポジトリの [examples/realtime](https://github.com/openai/openai-agents-python/tree/main/examples/realtime) フォルダーにある動作するコード例を参照してください +- エージェントにツールを追加する +- エージェント間のハンドオフを実装する +- セーフティ用のガードレールを設定する ## 認証 -OpenAI API キーを環境変数に設定してください: +環境変数に 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 96037dd42..b0ce16ff5 100644 --- a/docs/ja/release.md +++ b/docs/ja/release.md @@ -4,29 +4,29 @@ search: --- # リリースプロセス/変更履歴 -本プロジェクトでは、`0.Y.Z` という形式を用いた、Semantic Versioning を若干変更したバージョン管理を採用しています。先頭の `0` は SDK が急速に進化中であることを示します。各コンポーネントの増分は以下のとおりです。 +本プロジェクトでは、`0.Y.Z` 形式のセマンティックバージョニングをわずかに変更して採用しています。先頭の `0` は SDK が依然として急速に進化していることを示します。各コンポーネントの増分は次のとおりです。 -## マイナー (`Y`) バージョン +## マイナー(`Y`)バージョン -`Y` は **互換性を破壊する変更** がベータでない公開インターフェースに入った場合に増加します。たとえば、`0.0.x` から `0.1.x` へのアップデートには破壊的変更が含まれる可能性があります。 +ベータでない公開インターフェースに **破壊的変更** が入った場合、`Y` を増やします。たとえば、`0.0.x` から `0.1.x` へ移行する際に破壊的変更が含まれる可能性があります。 -破壊的変更を避けたい場合は、プロジェクトで `0.0.x` にバージョン固定することを推奨します。 +破壊的変更を避けたい場合は、プロジェクトで `0.0.x` バージョンに固定することをお勧めします。 -## パッチ (`Z`) バージョン +## パッチ(`Z`)バージョン -非破壊的変更の場合は `Z` を増加させます。 +互換性を壊さない変更では `Z` を増やします。 -- バグ修正 -- 新機能 -- プライベートインターフェースの変更 -- ベータ機能の更新 +- バグ修正 +- 新機能 +- 非公開インターフェースの変更 +- ベータ機能の更新 -## 互換性を破壊する変更の履歴 +## 破壊的変更の変更履歴 ### 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] に新しいパラメーター `run_context` と `agent` が追加されました。`MCPServer` をサブクラス化しているクラスには、これらのパラメーターを追加する必要があります。 \ No newline at end of file +このバージョンでは、[`MCPServer.list_tools()`][agents.mcp.server.MCPServer] に `run_context` と `agent` の 2 つの新しいパラメーターが追加されました。`MCPServer` を継承しているクラスでは、これらのパラメーターを実装に追加する必要があります。 \ No newline at end of file diff --git a/docs/ja/repl.md b/docs/ja/repl.md index fa33d8f96..13e7cd0bd 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,4 +18,4 @@ if __name__ == "__main__": asyncio.run(main()) ``` -`run_demo_loop` はループでユーザー入力を促し、ターン間の会話履歴を保持します。デフォルトでは、生成されると同時にモデル出力をストリーミングします。ループを終了するには、 `quit` または `exit` と入力するか、 `Ctrl-D` を押してください。 \ No newline at end of file +`run_demo_loop` はループ内でユーザー入力を促し、各ターン間で会話履歴を保持します。デフォルトでは生成されたモデル出力をストリーミングします。ループを終了するには `quit` または `exit` と入力するか、`Ctrl-D` を押してください。 \ No newline at end of file diff --git a/docs/ja/results.md b/docs/ja/results.md index eae3cb94d..afd86642d 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` を呼び出した場合 +- [`RunResult`][agents.result.RunResult] — `run` あるいは `run_sync` を呼び出した場合 - [`RunResultStreaming`][agents.result.RunResultStreaming] — `run_streamed` を呼び出した場合 -どちらも [`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` +- `output_type` が定義されている場合は `last_agent.output_type` 型のオブジェクト !!! note - `final_output` は `Any` 型です。ハンドオフが発生する可能性があるため、静的に型付けすることはできません。ハンドオフが起きると、どのエージェントが最後になるか静的には分からないため、出力型の集合も不定になります。 + `final_output` の型は `Any` です。ハンドオフが発生すると、どの Agent でも最後のエージェントになり得るため、静的に型を決定できません。その結果、取り得る出力型の集合を静的に判定することができないのです。 ## 次のターンへの入力 -[`result.to_input_list()`][agents.result.RunResultBase.to_input_list] を使用すると、元の入力にエージェント実行中に生成された項目を連結した入力リストへ変換できます。これにより、一度のエージェント実行の出力を別の実行へ渡したり、ループで実行しながら毎回新しいユーザー入力を追加するのが簡単になります。 +[`result.to_input_list()`][agents.result.RunResultBase.to_input_list] を使用すると、元の入力とエージェント実行中に生成されたアイテムを結合した入力リストを作成できます。これにより、あるエージェント実行の出力を別の実行へ渡したり、ループで実行して毎回新しいユーザー入力を追加したりすることが容易になります。 ## 最後のエージェント -[`last_agent`][agents.result.RunResultBase.last_agent] プロパティには、最後に実行されたエージェントが入ります。アプリケーションによっては、ユーザーが次に入力する際にこれが役立つことがよくあります。たとえば、最初に振り分けを行うエージェントから言語別エージェントへハンドオフする場合、`last_agent` を保存しておき、ユーザーが次にメッセージを送ったときに再利用できます。 +[`last_agent`][agents.result.RunResultBase.last_agent] プロパティには、最後に実行されたエージェントが格納されます。アプリケーションによっては、次回ユーザーが入力する際にこれを利用すると便利です。たとえば、フロントラインのトリアージエージェントが言語別エージェントへハンドオフする場合、`last_agent` を保存しておけば、次回ユーザーがメッセージを送ったときに再利用できます。 -## 新しい項目 +## 新規アイテム -[`new_items`][agents.result.RunResultBase.new_items] プロパティには、実行中に生成された新規項目が格納されます。項目は [`RunItem`][agents.items.RunItem] でラップされ、LLM が生成した raw アイテムを含みます。 +[`new_items`][agents.result.RunResultBase.new_items] プロパティには、実行中に生成された新しいアイテムが含まれます。アイテムは [`RunItem`][agents.items.RunItem] であり、raw アイテムをラップしています。 -- [`MessageOutputItem`][agents.items.MessageOutputItem] — LLM からのメッセージ。raw アイテムは生成されたメッセージです。 -- [`HandoffCallItem`][agents.items.HandoffCallItem] — LLM がハンドオフ ツールを呼び出したことを示します。raw アイテムはツール呼び出しアイテムです。 -- [`HandoffOutputItem`][agents.items.HandoffOutputItem] — ハンドオフが発生したことを示します。raw アイテムはハンドオフ ツール呼び出しへの応答です。ソース/ターゲット エージェントにもアクセスできます。 +- [`MessageOutputItem`][agents.items.MessageOutputItem] — LLM からのメッセージを示します。raw アイテムは生成されたメッセージです。 +- [`HandoffCallItem`][agents.items.HandoffCallItem] — LLM がハンドオフツールを呼び出したことを示します。raw アイテムは LLM からのツール呼び出しアイテムです。 +- [`HandoffOutputItem`][agents.items.HandoffOutputItem] — ハンドオフが発生したことを示します。raw アイテムはハンドオフツール呼び出しへのツール応答です。ソース/ターゲットのエージェントにもアクセスできます。 - [`ToolCallItem`][agents.items.ToolCallItem] — LLM がツールを呼び出したことを示します。 -- [`ToolCallOutputItem`][agents.items.ToolCallOutputItem] — ツールが呼び出されたことを示します。raw アイテムはツール応答で、ツール出力にもアクセスできます。 -- [`ReasoningItem`][agents.items.ReasoningItem] — LLM の推論項目です。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 41b18724b..8a919eda1 100644 --- a/docs/ja/running_agents.md +++ b/docs/ja/running_agents.md @@ -4,11 +4,14 @@ search: --- # エージェントの実行 -エージェントは [`Runner`][agents.run.Runner] クラスを介して実行できます。方法は 3 つあります: +`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 をストリーミング モードで呼び出し、受信したイベントを逐次ストリームします。 +1. [`Runner.run()`][agents.run.Runner.run] + 非同期で実行され、`RunResult` を返します。 +2. [`Runner.run_sync()`][agents.run.Runner.run_sync] + 同期メソッドで、内部的には `.run()` を呼び出します。 +3. [`Runner.run_streamed()`][agents.run.Runner.run_streamed] + 非同期で実行され、`RunResultStreaming` を返します。LLM をストリーミングモードで呼び出し、受信したイベントをそのまま ストリーミング します。 ```python from agents import Agent, Runner @@ -23,54 +26,55 @@ async def main(): # Infinite loop's dance ``` -詳細は [結果ガイド](results.md) をご覧ください。 +詳細は [結果ガイド](results.md) を参照してください。 ## エージェントループ -`Runner` の run メソッドを使用するときは、開始エージェントと入力を渡します。入力は文字列(ユーザー メッセージと見なされます)または入力アイテムのリストで、これは OpenAI Responses API のアイテムです。 +`Runner` の `run` メソッドを使用するときは、開始 エージェント と入力を渡します。入力は文字列(ユーザーメッセージと見なされます)か、OpenAI Responses API のアイテムのリストのいずれかです。 -その後、Runner は以下のループを実行します: +ランナーは次のループを実行します: -1. 現在のエージェントと入力を使って LLM を呼び出します。 +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 実行中にストリーミング イベントを受け取れます。ストリーム完了後、[`RunResultStreaming`][agents.result.RunResultStreaming] には実行に関する完全な情報(生成されたすべての新しい出力を含む)が格納されます。ストリーミング イベントは `.stream_events()` で取得できます。詳しくは [ストリーミング ガイド](streaming.md) を参照してください。 +ストリーミング を使うと、LLM 実行中にストリーミングイベントを受け取れます。ストリームが完了すると、[`RunResultStreaming`][agents.result.RunResultStreaming] に実行の完全な情報(生成されたすべての新しい出力を含む)が格納されます。`.stream_events()` を呼び出してイベントを取得できます。詳しくは [ストリーミングガイド](streaming.md) をご覧ください。 -## 実行設定 +## Run config `run_config` パラメーターでは、エージェント実行のグローバル設定を行えます: -- [`model`][agents.run.RunConfig.model]: 各エージェントの `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]: すべてのトレースに含めるメタデータ。 +- [`model`][agents.run.RunConfig.model]: 各 エージェント の `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` を設定することを推奨します。`group_id` は複数の実行にわたるトレースをリンクするための任意フィールドです。 +- [`trace_metadata`][agents.run.RunConfig.trace_metadata]: すべてのトレースに含めるメタデータ。 ## 会話/チャットスレッド -いずれの run メソッドを呼び出しても、1 回で 1 つ以上のエージェント(=複数の LLM 呼び出し)が実行されますが、チャット会話上は単一の論理ターンとして扱われます。例: +いずれかの run メソッドを呼び出すと、1 つ以上の エージェント が実行され(つまり 1 回以上の LLM 呼び出しが発生し)、チャット会話上の 1 つの論理ターンを表します。例: -1. ユーザー ターン: ユーザーがテキストを入力 -2. Runner 実行: 最初のエージェントが LLM を呼び出しツールを実行、次に別のエージェントへハンドオフし、さらにツールを実行して最終出力を生成 +1. ユーザーターン: ユーザーがテキストを入力 +2. Runner 実行: 最初の エージェント が LLM を呼び出し、ツールを実行し、別の エージェント にハンドオフ。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(): @@ -90,9 +94,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 @@ -117,24 +121,24 @@ async def main(): Sessions は自動で以下を行います: -- 各実行前に会話履歴を取得 -- 各実行後に新規メッセージを保存 -- 異なる session ID ごとに個別の会話を保持 +- 各実行前に会話履歴を取得 +- 各実行後に新しいメッセージを保存 +- 異なる session ID ごとに個別の会話を維持 詳細は [Sessions のドキュメント](sessions.md) を参照してください。 -## 長時間実行エージェント & ヒューマンインザループ +## 長時間実行エージェント & 人間介在 -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) をご覧ください。 +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 の誤用や無効な設定など、利用者の実装ミスによって発生します。 -- [`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 形式が不正: ツール呼び出しや直接出力で JSON が壊れている場合(特に `output_type` が指定されているとき)。 + - 予期しないツール関連エラー: モデルがツールを想定どおりに使用しなかった場合。 +- [`UserError`][agents.exceptions.UserError]: SDK を使用する際に、あなた(SDK を利用する開発者)が誤った実装や不正な設定を行った場合に送出されます。 +- [`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 b74ce2179..efa6b1ef8 100644 --- a/docs/ja/sessions.md +++ b/docs/ja/sessions.md @@ -4,9 +4,9 @@ search: --- # セッション -Agents SDK は、組み込みのセッションメモリーを提供し、複数回のエージェント実行にわたって会話履歴を自動的に保持します。これにより、ターン間で `.to_input_list()` を手動で扱う必要がなくなります。 +Agents SDK は組み込みのセッションメモリーを提供しており、複数回のエージェント実行にわたって会話履歴を自動的に保持します。そのため、ターンごとに `.to_input_list()` を手動で扱う必要がありません。 -セッションは特定のセッションに対する会話履歴を保存し、明示的なメモリー管理を行わなくてもエージェントがコンテキストを保持できるようにします。これはチャットアプリケーションやマルチターンの会話で、エージェントに過去のやり取りを覚えさせたい場合に特に有用です。 +セッションは特定のセッションに対して会話履歴を保存し、エージェントが明示的なメモリー管理なしでコンテキストを維持できるようにします。これはチャットアプリケーションやマルチターン会話で、エージェントに以前のやり取りを覚えさせたい場合に特に便利です。 ## クイックスタート @@ -47,21 +47,21 @@ result = Runner.run_sync( print(result.final_output) # "Approximately 39 million" ``` -## 仕組み +## 動作概要 セッションメモリーが有効な場合: -1. **各実行前**: Runner がセッションの会話履歴を自動的に取得し、入力アイテムの先頭に追加します。 -2. **各実行後**: 実行中に生成された新しいアイテム(ユーザー入力、アシスタント応答、ツール呼び出しなど)はすべて自動的にセッションに保存されます。 -3. **コンテキスト保持**: 同じセッションでの後続の実行には完全な会話履歴が含まれるため、エージェントはコンテキストを維持できます。 +1. **各実行前**: ランナーがそのセッションの会話履歴を自動で取得し、入力アイテムの先頭に追加します。 +2. **各実行後**: 実行中に生成された新しいアイテム (ユーザー入力、アシスタントのレスポンス、ツール呼び出しなど) が自動でセッションに保存されます。 +3. **コンテキストの保持**: 同じセッションで後続の実行を行うたびに、完全な会話履歴が含まれるため、エージェントはコンテキストを維持できます。 -これにより、`.to_input_list()` を手動で呼び出したり、実行間で会話状態を管理したりする必要がなくなります。 +これにより、`.to_input_list()` を手動で呼び出して会話状態を管理する必要がなくなります。 ## メモリー操作 ### 基本操作 -Sessions では会話履歴を管理するための操作がいくつか用意されています: +セッションは会話履歴を管理するための複数の操作をサポートしています: ```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 @@ -119,7 +119,7 @@ print(f"Agent: {result.final_output}") ## メモリーオプション -### メモリなし(デフォルト) +### メモリーなし(デフォルト) ```python # Default behavior - no session memory @@ -170,7 +170,7 @@ result2 = await Runner.run( ## カスタムメモリー実装 -独自のセッションメモリーを実装する場合は、[`Session`][agents.memory.session.Session] プロトコルに従うクラスを作成してください。 +[`Session`][agents.memory.session.Session] プロトコルに従うクラスを作成することで、独自のセッションメモリーを実装できます: ```python from agents.memory import Session @@ -216,17 +216,17 @@ result = await Runner.run( ### セッション ID の命名 -会話を整理しやすい意味のあるセッション ID を使用しましょう: +会話を整理しやすい意味のあるセッション ID を使用してください: -- ユーザーベース: `"user_12345"` -- スレッドベース: `"thread_abc123"` -- コンテキストベース: `"support_ticket_456"` +- ユーザー単位: `"user_12345"` +- スレッド単位: `"thread_abc123"` +- コンテキスト単位: `"support_ticket_456"` ### メモリー永続化 -- 一時的な会話にはインメモリー SQLite (`SQLiteSession("session_id")`) を使用 -- 永続的な会話にはファイルベース SQLite (`SQLiteSession("session_id", "path/to/db.sqlite")`) を使用 -- 本番環境では独自のセッションバックエンド(Redis、PostgreSQL など)の実装を検討 +- 一時的な会話にはインメモリー SQLite (`SQLiteSession("session_id")`) を使用します +- 永続的な会話にはファイルベース SQLite (`SQLiteSession("session_id", "path/to/db.sqlite")`) を使用します +- 本番環境ではカスタムセッションバックエンド (Redis、PostgreSQL など) の実装を検討してください ### セッション管理 @@ -252,9 +252,9 @@ result2 = await Runner.run( ) ``` -## 完全な例 +## 完全なコード例 -以下はセッションメモリーが動作する完全な例です: +以下はセッションメモリーが動作する完全なコード例です: ```python import asyncio @@ -318,7 +318,7 @@ if __name__ == "__main__": ## API リファレンス -詳細な API ドキュメントは次を参照してください: +詳細な API ドキュメントは以下を参照してください: -- [`Session`][agents.memory.Session] - プロトコルインターフェース -- [`SQLiteSession`][agents.memory.SQLiteSession] - SQLite 実装 \ No newline at end of file +- [`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 1925695b1..fdff7ce31 100644 --- a/docs/ja/streaming.md +++ b/docs/ja/streaming.md @@ -4,15 +4,15 @@ search: --- # ストリーミング -ストリーミングを使用すると、エージェントの実行状況を逐次購読できます。これにより、エンドユーザーへ進捗状況や部分的な応答をリアルタイムで表示できます。 +ストリーミングを使用すると、エージェントの実行が進行するにつれて発生する更新を購読できます。これにより、エンドユーザーに進捗状況や途中の応答を表示する際に役立ちます。 -ストリーミングを行うには、[`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 response events +## raw レスポンスイベント -[`RawResponsesStreamEvent`][agents.stream_events.RawResponsesStreamEvent] は、 LLM から直接渡される raw イベントです。これは OpenAI Responses API 形式であり、各イベントには `response.created` や `response.output_text.delta` などの type と data が含まれます。生成されたメッセージをすぐにユーザーへストリーミングしたい場合に便利です。 +[`RawResponsesStreamEvent`][agents.stream_events.RawResponsesStreamEvent] は、 LLM から直接渡される raw イベントです。これらは OpenAI Responses API のフォーマットであり、各イベントには type( `response.created`、 `response.output_text.delta` など)と data が含まれます。レスポンスメッセージを生成と同時にユーザーへストリーム配信したい場合に便利です。 -たとえば、以下のコードは LLM が生成したテキストをトークンごとに出力します。 +例えば、以下のコードは LLM が生成したテキストをトークンごとに出力します。 ```python import asyncio @@ -35,11 +35,11 @@ if __name__ == "__main__": asyncio.run(main()) ``` -## Run item イベントと agent イベント +## Run item イベントとエージェントイベント -[`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 48c92bf03..686e56ebf 100644 --- a/docs/ja/tools.md +++ b/docs/ja/tools.md @@ -4,23 +4,23 @@ search: --- # ツール -ツールを使用すると エージェント がアクションを実行できます。データの取得、コードの実行、外部 API の呼び出し、さらには コンピュータ操作 などが可能です。Agents SDK には次の 3 つの カテゴリー のツールがあります。 +ツールを利用することで、エージェントはデータ取得、コード実行、外部 API 呼び出し、さらにはコンピュータ操作などのアクションを実行できます。Agents SDK には 3 つのツール クラスがあります: -- ホスト型ツール: これらは LLM サーバー上で AI モデルと並行して実行されます。OpenAI は retrieval、Web 検索、コンピュータ操作 をホスト型ツールとして提供しています。 -- 関数呼び出し (Function Calling): 任意の Python 関数をツールとして利用できます。 -- ツールとしてのエージェント: エージェント をツールとして使用でき、ハンドオフ せずに他の エージェント を呼び出せます。 +- Hosted ツール: これらは LLM サーバー上で AI モデルと並行して実行されます。OpenAI は retrieval、Web 検索、および コンピュータ操作 を Hosted ツールとして提供しています。 +- Function calling: 任意の Python 関数をツールとして利用できます。 +- Agents as tools: エージェントをツールとして扱うことで、ハンドオフせずに他のエージェントを呼び出せます。 -## ホスト型ツール +## ホステッドツール -[`OpenAIResponsesModel`][agents.models.openai_responses.OpenAIResponsesModel] を使用する場合、OpenAI はいくつかの組み込みツールを提供しています。 +[`OpenAIResponsesModel`][agents.models.openai_responses.OpenAIResponsesModel] を使用する場合、OpenAI はいくつかの組み込みツールを提供しています: -- [`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] はローカルマシンでシェルコマンドを実行します。 +- [`WebSearchTool`][agents.tool.WebSearchTool] はエージェントが Web 検索 を行えるようにします。 +- [`FileSearchTool`][agents.tool.FileSearchTool] は OpenAI Vector Stores から情報を取得できます。 +- [`ComputerTool`][agents.tool.ComputerTool] はコンピュータ操作タスクを自動化します。 +- [`CodeInterpreterTool`][agents.tool.CodeInterpreterTool] は LLM がサンドボックス環境でコードを実行できるようにします。 +- [`HostedMCPTool`][agents.tool.HostedMCPTool] はリモート MCP サーバーのツールをモデルに公開します。 +- [`ImageGenerationTool`][agents.tool.ImageGenerationTool] はプロンプトから画像を生成します。 +- [`LocalShellTool`][agents.tool.LocalShellTool] はローカルマシンでシェルコマンドを実行します。 ```python from agents import Agent, FileSearchTool, Runner, WebSearchTool @@ -43,14 +43,14 @@ async def main(): ## 関数ツール -任意の Python 関数をツールとして使用できます。Agents SDK がツールの設定を自動で行います。 +任意の Python 関数をツールとして使用できます。Agents SDK はツールを自動で設定します: -- ツール名は Python 関数名になります (別名を指定することも可能です)。 -- ツールの説明は関数の docstring から取得されます (説明を直接指定することも可能です)。 -- 関数の引数から入力スキーマが自動生成されます。 -- 各入力の説明は docstring から取得されます (無効化も可能です)。 +- ツール名は Python 関数名になります(任意で別名を指定可能) +- ツールの説明は関数の docstring から取得されます(任意で別途指定可能) +- 関数入力のスキーマは関数の引数から自動生成されます +- 各入力の説明は docstring から取得されます(無効化も可能) -Python の `inspect` モジュールを使用して関数シグネチャを抽出し、[`griffe`](https://mkdocstrings.github.io/griffe/) で docstring を解析し、スキーマの作成には `pydantic` を利用しています。 +Python の `inspect` モジュールで関数シグネチャを抽出し、[`griffe`](https://mkdocstrings.github.io/griffe/) で docstring を解析、`pydantic` でスキーマを生成しています。 ```python import json @@ -102,12 +102,12 @@ for tool in agent.tools: ``` -1. 引数には任意の Python 型を使用でき、関数は同期・非同期のいずれでも構いません。 -2. docstring がある場合、全体の説明および引数の説明を取得します。 -3. 関数はオプションで `context` を受け取れます (先頭の引数である必要があります)。また、ツール名や説明、docstring スタイルなどを上書き設定できます。 -4. 装飾された関数をツール一覧に渡してください。 +1. 関数の引数には任意の Python 型を使用でき、同期・非同期いずれの関数も利用可能です。 +2. Docstring が存在する場合、ツール全体と各引数の説明に利用されます。 +3. 関数はオプションで `context`(先頭の引数である必要があります)を受け取れます。また、ツール名や説明、docstring スタイルなどを上書き設定できます。 +4. デコレートした関数を tools のリストに渡せば使用できます。 -??? note "クリックして出力を表示" +??? note "出力を表示するには展開してください" ``` fetch_weather @@ -179,12 +179,12 @@ for tool in agent.tools: ### カスタム関数ツール -Python 関数をツールとして使いたくない場合は、直接 [`FunctionTool`][agents.tool.FunctionTool] を作成できます。必要な項目は以下です。 +Python 関数をツールとして使用したくない場合は、直接 [`FunctionTool`][agents.tool.FunctionTool] を作成できます。次の項目を指定してください: -- `name` -- `description` -- `params_json_schema` : 引数の JSON スキーマ -- `on_invoke_tool` : [`ToolContext`][agents.tool_context.ToolContext] と引数 (JSON 文字列) を受け取り、ツールの出力文字列を返す非同期関数 +- `name` +- `description` +- `params_json_schema` — 引数の JSON スキーマ +- `on_invoke_tool` — [`ToolContext`][agents.tool_context.ToolContext] と引数(JSON 文字列)を受け取り、ツール出力を文字列で返す async 関数 ```python from typing import Any @@ -219,16 +219,16 @@ tool = FunctionTool( ### 引数と docstring の自動解析 -前述のとおり、関数シグネチャを自動解析してツールのスキーマを抽出し、docstring を解析してツールおよび個々の引数の説明を取得します。主なポイントは以下のとおりです。 +前述のとおり、関数シグネチャを自動解析してツールのスキーマを生成し、docstring からツールおよび個々の引数の説明を抽出します。注意点は次のとおりです: -1. シグネチャの解析は `inspect` モジュールで行います。型アノテーションを用いて引数の型を理解し、Pydantic モデルを動的に生成します。Python の基本型、Pydantic モデル、TypedDict など大半の型をサポートします。 -2. docstring の解析には `griffe` を使用します。サポートされる docstring 形式は `google`、`sphinx`、`numpy` です。形式はベストエフォートで自動判定しますが、`function_tool` 呼び出し時に明示的に指定することもできます。`use_docstring_info` を `False` にすると docstring 解析を無効化できます。 +1. シグネチャ解析は `inspect` モジュールで行います。型アノテーションから引数型を判定し、Pydantic モデルを動的に生成してスキーマを構築します。Python の基本型、Pydantic モデル、TypedDict など大半の型をサポートしています。 +2. Docstring の解析には `griffe` を使用します。対応フォーマットは `google`、`sphinx`、`numpy` です。フォーマット判定はベストエフォートで行いますが、`function_tool` 呼び出し時に明示的に指定することも可能です。`use_docstring_info` を `False` に設定すると docstring 解析を無効化できます。 スキーマ抽出のコードは [`agents.function_schema`][] にあります。 -## ツールとしてのエージェント +## エージェントをツールとして使用 -一部のワークフローでは、ハンドオフ する代わりに中央の エージェント が複数の専門 エージェント をオーケストレーションしたい場合があります。そのようなときは エージェント をツールとしてモデル化できます。 +ワークフローによっては、ハンドオフせずに中央エージェントが複数の専門エージェントをオーケストレートしたい場合があります。そのようなときは、エージェントをツールとしてモデル化できます。 ```python from agents import Agent, Runner @@ -269,7 +269,7 @@ async def main(): ### ツールエージェントのカスタマイズ -`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: @@ -317,10 +317,10 @@ json_tool = data_agent.as_tool( ## 関数ツールでのエラー処理 -`@function_tool` で関数ツールを作成する際、`failure_error_function` を渡すことができます。これはツール呼び出しがクラッシュした場合に LLM へ返すエラーレスポンスを生成する関数です。 +`@function_tool` で関数ツールを作成する際、`failure_error_function` を渡すことができます。これはツール呼び出しがクラッシュした際に LLM へエラー応答を返す関数です。 -- 何も渡さない場合、デフォルトで `default_tool_error_function` が実行され、LLM にエラーが発生したことを伝えます。 -- 独自のエラー関数を渡した場合、その関数が実行され、その結果が LLM に送信されます。 -- 明示的に `None` を渡すと、ツール呼び出し時のエラーは再スローされます。たとえばモデルが無効な JSON を生成した場合は `ModelBehaviorError`、ユーザーのコードがクラッシュした場合は `UserError` などになります。 +- 何も渡さない場合、デフォルトで `default_tool_error_function` が実行され、エラーが発生したことを LLM に通知します。 +- 独自のエラー関数を渡すと、それが実行されて LLM へ返されます。 +- 明示的に `None` を渡すと、ツール呼び出しエラーが再スローされ、呼び出し側で処理できます。このとき、モデルが無効な JSON を生成した場合は `ModelBehaviorError`、ユーザーコードがクラッシュした場合は `UserError` などが発生し得ます。 `FunctionTool` オブジェクトを手動で作成する場合は、`on_invoke_tool` 関数内でエラーを処理する必要があります。 \ No newline at end of file diff --git a/docs/ja/tracing.md b/docs/ja/tracing.md index 3172c9ae1..8726eaa61 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. 1 回の実行に対してのみ [`agents.run.RunConfig.tracing_disabled`][] を `True` に設定する + 2. 1 回の実行に対してのみ、[`agents.run.RunConfig.tracing_disabled`][] を `True` に設定する -***OpenAI の API を Zero Data Retention (ZDR) ポリシー下で利用する組織では、トレーシングを使用できません。*** +***OpenAI の API を ZDR (Zero Data Retention) ポリシーで利用している組織では、トレーシングを利用できません。*** -## トレースとスパン +## Traces と Spans -- **トレース** は 1 回のワークフロー全体のエンドツーエンド操作を表します。トレースはスパンで構成され、以下のプロパティを持ちます。 - - `workflow_name`: 論理的なワークフローまたはアプリ名。例: "Code generation" や "Customer service" - - `trace_id`: トレースの一意 ID。指定しない場合は自動生成されます。形式は `trace_<32_alphanumeric>` - - `group_id`: 同じ会話からの複数トレースをリンクするためのオプション ID。例としてチャットスレッド ID など - - `disabled`: `True` の場合、このトレースは記録されません - - `metadata`: トレースに付与するオプションのメタデータ -- **スパン** は開始時刻と終了時刻を持つ操作を表します。スパンは以下を持ちます。 - - `started_at` と `ended_at` のタイムスタンプ - - 所属するトレースを示す `trace_id` - - 親スパンを指す `parent_id` (存在する場合) - - スパンに関する情報を保持する `span_data`。例: `AgentSpanData` はエージェント情報、`GenerationSpanData` は LLM 生成情報など +- **Trace** は 1 つの「ワークフロー」のエンドツーエンド操作を表します。Trace は次のプロパティを持ちます。 + - `workflow_name`: 論理的なワークフローまたはアプリ名。例: 「Code generation」や「Customer service」。 + - `trace_id`: Trace の一意 ID。渡さない場合は自動生成されます。形式は `trace_<32_alphanumeric>` である必要があります。 + - `group_id`: 任意のグループ ID。同じ会話からの複数 Trace を関連付けるために使用します。たとえばチャットスレッド ID など。 + - `disabled`: `True` の場合、その Trace は記録されません。 + - `metadata`: Trace に付与する任意のメタデータ。 +- **Span** は開始時刻と終了時刻を持つ操作を表します。Span には次があります。 + - `started_at` と `ended_at` タイムスタンプ + - 所属する Trace を示す `trace_id` + - 親 Span を指す `parent_id` (存在する場合) + - Span の情報を含む `span_data`。例: `AgentSpanData` はエージェント情報、`GenerationSpanData` は LLM 生成情報など。 ## デフォルトのトレーシング -デフォルトでは、SDK は次をトレースします。 +デフォルトでは、SDK は以下をトレースします。 -- `Runner.{run, run_sync, run_streamed}()` 全体を `trace()` でラップ -- エージェント実行ごとに `agent_span()` でラップ -- LLM 生成を `generation_span()` でラップ -- 関数ツール呼び出しを `function_span()` でラップ -- ガードレールを `guardrail_span()` でラップ -- ハンドオフを `handoff_span()` でラップ -- 音声入力 (speech-to-text) を `transcription_span()` でラップ -- 音声出力 (text-to-speech) を `speech_span()` でラップ -- 関連する音声スパンは `speech_group_span()` の下にネストされる場合があります +- `Runner.{run, run_sync, run_streamed}()` 全体が `trace()` でラップされます +- エージェントが実行されるたびに `agent_span()` でラップ +- LLM 生成は `generation_span()` でラップ +- 関数ツール呼び出しは `function_span()` でラップ +- ガードレールは `guardrail_span()` でラップ +- ハンドオフは `handoff_span()` でラップ +- 音声入力 (speech-to-text) は `transcription_span()` でラップ +- 音声出力 (text-to-speech) は `speech_span()` でラップ +- 関連音声 Span は `speech_group_span()` の下に入る場合があります -デフォルトでは、トレース名は "Agent workflow" です。`trace` を使用して名前を設定するか、[`RunConfig`][agents.run.RunConfig] で名前やその他プロパティを構成できます。 +Trace 名はデフォルトで「Agent workflow」です。`trace` を使用してこの名前を設定するか、[`RunConfig`][agents.run.RunConfig] で名前やその他プロパティを構成できます。 -さらに、[カスタムトレーシングプロセッサー](#custom-tracing-processors) を設定して、別の送信先へトレースをプッシュする (置換または追加送信) ことも可能です。 +さらに、[カスタムトレースプロセッサー](#custom-tracing-processors) を設定して、別の宛先へ Trace を送信することもできます (置き換えや追加送信)。 -## 上位レベルのトレース +## 高レベル Trace -複数回の `run()` 呼び出しを 1 つのトレースにまとめたい場合は、コード全体を `trace()` でラップします。 +複数回の `run()` 呼び出しを 1 つの Trace にまとめたい場合は、コード全体を `trace()` でラップします。 ```python from agents import Agent, Runner, trace @@ -64,42 +64,70 @@ async def main(): print(f"Rating: {second_result.final_output}") ``` -1. `with trace()` で 2 回の `Runner.run` 呼び出しをラップしているため、それぞれが個別にトレースを生成するのではなく、全体として 1 つのトレースになります。 +1. `Runner.run` の 2 回の呼び出しが `with trace()` に包まれているため、個々の実行は 2 つの Trace を作成するのではなく、1 つの大きな Trace の一部になります。 -## トレースの作成 +## Trace の作成 -トレースは [`trace()`][agents.tracing.trace] 関数で作成できます。トレースは開始と終了が必要で、以下の 2 通りがあります。 +[`trace()`][agents.tracing.trace] 関数を使って Trace を作成できます。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` を渡して現在のトレースを更新してください。 +現在の Trace は Python の [`contextvar`](https://docs.python.org/3/library/contextvars.html) で管理されています。これにより自動的に並行処理に対応します。Trace を手動で開始・終了する場合は、`start()`/`finish()` に `mark_as_current` と `reset_current` を渡して現在の Trace を更新してください。 -## スパンの作成 +## Span の作成 -各種 [`*_span()`][agents.tracing.create] メソッドでスパンを作成できますが、通常は手動で作成する必要はありません。カスタム情報を追跡したい場合は [`custom_span()`][agents.tracing.custom_span] を使用できます。 +各種 [`*_span()`][agents.tracing.create] メソッドで Span を作成できます。通常、Span を手動で作成する必要はありません。カスタム情報を追跡するための [`custom_span()`][agents.tracing.custom_span] も利用できます。 -スパンは自動的に現在のトレースに含まれ、Python の [`contextvar`](https://docs.python.org/3/library/contextvars.html) で管理される最も近い現在のスパンの下にネストされます。 +Span は自動的に現在の Trace の一部となり、Python の [`contextvar`](https://docs.python.org/3/library/contextvars.html) で追跡されている最も近い現在の Span の下にネストされます。 -## センシティブデータ +## 機微データ -一部のスパンには機微なデータが含まれる場合があります。 +一部の Span では機微データが記録される可能性があります。 -`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] で無効化できます。 +同様に、Audio Span にはデフォルトで入出力音声の 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] を生成し、Trace を作成します。 +- `TraceProvider` に [`BatchTraceProcessor`][agents.tracing.processors.BatchTraceProcessor] を構成し、これが Span と Trace をバッチ送信で [`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] + 既存の送信に **追加** する形で Trace プロセッサーを登録できます。これにより、OpenAI バックエンドへの送信に加えて独自処理を実行可能です。 +2. [`set_trace_processors()`][agents.tracing.set_trace_processors] + デフォルトのプロセッサーを **置き換え** ます。OpenAI バックエンドに送信したい場合は、その処理を行う `TracingProcessor` を含める必要があります。 + +## 非 OpenAI モデルでのトレーシング + +非 OpenAI モデルでも、OpenAI API キーを使用することで Traces ダッシュボードでの無償トレーシングが可能です。トレーシングを無効化する必要はありません。 + +```python +import os +from agents import set_tracing_export_api_key, Agent, Runner +from agents.extensions.models.litellm_model import LitellmModel + +tracing_api_key = os.environ["OPENAI_API_KEY"] +set_tracing_export_api_key(tracing_api_key) + +model = LitellmModel( + model="your-model-name", + api_key="your-api-key", +) + +agent = Agent( + name="Assistant", + model=model, +) +``` + +## Notes +- OpenAI Traces ダッシュボードで無償トレースを閲覧できます。 ## 外部トレーシングプロセッサー一覧 diff --git a/docs/ja/visualization.md b/docs/ja/visualization.md index 49c8398d2..f1b4e2de2 100644 --- a/docs/ja/visualization.md +++ b/docs/ja/visualization.md @@ -4,7 +4,7 @@ search: --- # エージェント可視化 -エージェント可視化を使用すると、 **Graphviz** を利用してエージェントとその関係を構造化されたグラフィカルな形で生成できます。これにより、アプリケーション内でエージェント、ツール、ハンドオフがどのように相互作用するかを理解しやすくなります。 +エージェント可視化を使用すると、 **Graphviz** を利用してエージェントとその関係を構造化されたグラフィカル表現として生成できます。これは、アプリケーション内でエージェント、ツール、ハンドオフがどのように相互作用するかを理解するのに役立ちます。 ## インストール @@ -16,11 +16,11 @@ pip install "openai-agents[viz]" ## グラフ生成 -`draw_graph` 関数を使用してエージェント可視化を生成できます。この関数は次のような有向グラフを作成します: +`draw_graph` 関数を使用してエージェントの可視化を生成できます。この関数は次のような有向グラフを作成します: -- **エージェント** は黄色のボックスで表されます。 -- **ツール** は緑色の楕円で表されます。 -- **ハンドオフ** は一方のエージェントから別のエージェントへの有向エッジで表されます。 +- **エージェント** は黄色のボックスで表されます。 +- **ツール** は緑色の楕円で表されます。 +- **ハンドオフ** はエージェント間の有向エッジで表されます。 ### 使用例 @@ -52,34 +52,33 @@ triage_agent = Agent( draw_graph(triage_agent) ``` -![エージェントグラフ](../assets/images/graph.png) +![エージェント グラフ](../assets/images/graph.png) -これにより、 triage エージェントの構造とサブエージェントおよびツールとの接続を視覚的に表すグラフが生成されます。 +これにより、 **triage agent** の構造とサブエージェントおよびツールとの接続を視覚的に示すグラフが生成されます。 - -## 可視化の理解 +## 可視化の概要 生成されたグラフには次が含まれます: -- エントリーポイントを示す **開始ノード** (`__start__`) -- 黄色で塗りつぶされた **長方形** で表されるエージェント -- 緑色で塗りつぶされた **楕円** で表されるツール +- エントリーポイントを示す **start node** (`__start__`) +- 黄色で塗られた **rectangles** として表されるエージェント +- 緑色で塗られた **ellipses** として表されるツール - 相互作用を示す有向エッジ - - エージェント間のハンドオフには **実線の矢印** - - ツール呼び出しには **点線の矢印** -- 実行終了地点を示す **終了ノード** (`__end__`) + - エージェント間ハンドオフを示す **Solid arrows** + - ツール呼び出しを示す **Dotted arrows** +- 実行終了位置を示す **end node** (`__end__`) ## グラフのカスタマイズ ### グラフの表示 -デフォルトでは、 `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 ecc7981f8..007fc0f4f 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,36 @@ graph LR ## パイプラインの設定 -パイプラインを作成する際に次の項目を設定できます。 +パイプラインを作成するとき、以下の項目を設定できます: -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] — 以下を設定できます - - モデルプロバイダー (モデル名をモデルにマッピング) - - トレーシング (トレーシングの有効 / 無効、音声ファイルのアップロード有無、ワークフロー名、トレース ID など) - - TTS および STT モデルのプロンプト、言語、データタイプなどの設定 +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] + 次のような設定を行えます: + - モデルプロバイダー: モデル名をモデルにマッピングします + - トレーシング: トレーシングの有効 / 無効、音声ファイルのアップロード有無、ワークフロー名、トレース 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] — ユーザーが話し終えたタイミングを検出する必要がある場合に使用します。音声チャンクを検出次第プッシュでき、ボイスパイプラインが「アクティビティ検出」と呼ばれる処理を通じて適切なタイミングでエージェント ワークフローを自動実行します。 +1. [`AudioInput`][agents.voice.input.AudioInput] + 完全な音声トランスクリプトがある場合に使用し、そのトランスクリプトに対する結果だけを生成します。あらかじめ録音された音声や push-to-talk アプリのように話し終わりが明確なケースで便利です。 +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 +83,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 fcf6331eb..a61284452 100644 --- a/docs/ja/voice/quickstart.md +++ b/docs/ja/voice/quickstart.md @@ -6,19 +6,19 @@ search: ## 前提条件 - Agents SDK のベース [クイックスタート手順](../quickstart.md) に従い、仮想環境をセットアップしていることを確認してください。その後、SDK からオプションの音声依存関係をインストールします: +まず、Agents SDK のベースとなる [quickstart instructions](../quickstart.md) に従い、仮想環境をセットアップしていることを確認してください。その後、SDK からオプションの音声依存関係をインストールします: ```bash pip install 'openai-agents[voice]' ``` -## 概念 +## コンセプト -知っておくべき主な概念は [`VoicePipeline`][agents.voice.pipeline.VoicePipeline] です。これは 3 ステップのプロセスです: +ここで理解しておくべき主要なコンセプトは [`VoicePipeline`][agents.voice.pipeline.VoicePipeline] です。これは 3 ステップのプロセスになっています: -1. 音声をテキストに変換するために `speech-to-text` モデルを実行します。 -2. 通常はエージェントワークフローであるご自身のコードを実行し、実行結果を生成します。 -3. 実行結果のテキストを音声に戻すために `text-to-speech` モデルを実行します。 +1. 音声をテキストに変換する Speech-to-Text モデルを実行します。 +2. 通常はエージェント的なワークフローであるご自身のコードを実行し、結果を生成します。 +3. その結果テキストを音声に戻す Text-to-Speech モデルを実行します。 ```mermaid graph LR @@ -48,7 +48,7 @@ graph LR ## エージェント -まず、いくつかのエージェントを設定しましょう。すでに Agents SDK でエージェントを作成したことがあれば、馴染みがあるはずです。ここでは複数のエージェント、ハンドオフ、そしてツールを用意します。 +まず、いくつかのエージェントをセットアップしましょう。すでに本 SDK でエージェントを構築したことがある場合は、馴染みのある手順のはずです。ここでは複数のエージェントとハンドオフ、ツールを用意します。 ```python import asyncio @@ -92,7 +92,7 @@ agent = Agent( ## 音声パイプライン -[`SingleAgentVoiceWorkflow`][agents.voice.workflow.SingleAgentVoiceWorkflow] をワークフローとして使用し、シンプルな音声パイプラインを設定します。 +[`SingleAgentVoiceWorkflow`][agents.voice.workflow.SingleAgentVoiceWorkflow] をワークフローとして使用し、シンプルな音声パイプラインをセットアップします。 ```python from agents.voice import SingleAgentVoiceWorkflow, VoicePipeline @@ -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 640ce8083..7bdefa827 100644 --- a/docs/ja/voice/tracing.md +++ b/docs/ja/voice/tracing.md @@ -4,15 +4,15 @@ search: --- # トレーシング -[エージェントのトレーシング](../tracing.md) と同様に、音声パイプラインも自動的にトレーシングされます。 +エージェントが [トレーシングされる](../tracing.md) のと同様に、音声パイプラインも自動的にトレーシングされます。 -基本的なトレーシングについては上記ドキュメントをご覧ください。さらに、 `VoicePipelineConfig` を使用してパイプラインのトレーシングを設定できます。 +基本的なトレーシングの情報については上記のドキュメントをご覧いただけますが、` VoicePipelineConfig ` を使用してパイプラインのトレーシングを追加で設定することもできます。 -トレーシングに関する主なフィールドは次のとおりです: +トレーシングに関連する主なフィールドは次のとおりです。 -- [`tracing_disabled`][agents.voice.pipeline_config.VoicePipelineConfig.tracing_disabled]: トレーシングを無効にするかどうかを制御します。デフォルトでは有効です。 -- [`trace_include_sensitive_data`][agents.voice.pipeline_config.VoicePipelineConfig.trace_include_sensitive_data]: トレースに音声の書き起こしなど機微なデータを含めるかどうかを制御します。これは音声パイプラインに対してのみ有効で、 Workflow の内部処理には影響しません。 -- [`trace_include_sensitive_audio_data`][agents.voice.pipeline_config.VoicePipelineConfig.trace_include_sensitive_audio_data]: トレースに音声データを含めるかどうかを制御します。 -- [`workflow_name`][agents.voice.pipeline_config.VoicePipelineConfig.workflow_name]: トレース Workflow の名前です。 -- [`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]:オーディオの書き起こしなど、機密になり得るデータをトレースに含めるかどうかを制御します。これは音声パイプライン専用であり、 Workflow 内で行われる処理には影響しません。 +- [`trace_include_sensitive_audio_data`][agents.voice.pipeline_config.VoicePipelineConfig.trace_include_sensitive_audio_data]:トレースにオーディオデータを含めるかどうかを制御します。 +- [`workflow_name`][agents.voice.pipeline_config.VoicePipelineConfig.workflow_name]:トレース Workflow の名前です。 +- [`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