diff --git a/docs/ja/agents.md b/docs/ja/agents.md index c7c65fd75..4a6bc16ec 100644 --- a/docs/ja/agents.md +++ b/docs/ja/agents.md @@ -4,16 +4,16 @@ search: --- # エージェント -エージェントは、アプリにおける中核の構成要素です。エージェントとは、 instructions と tools で設定された大規模言語モデル( LLM )です。 +エージェントはアプリの中心的な構成要素です。エージェントは、instructions と tools で設定された大規模言語モデル ( LLM ) です。 ## 基本設定 -エージェントで最もよく設定するプロパティは次のとおりです。 +エージェントでよく設定するプロパティは次のとおりです。 -- `name`: エージェントを識別する必須の文字列。 -- `instructions`: 開発者メッセージまたは system prompt とも呼ばれます。 -- `model`: 使用する LLM と、 temperature や top_p などのモデル調整パラメーターを指定する省略可能な `model_settings`。 -- `tools`: エージェントがタスクを遂行するために利用できるツールの一覧。 +- `name`: エージェントを識別する必須の文字列です。 +- `instructions`: developer message(開発者メッセージ)または システムプロンプト とも呼ばれます。 +- `model`: 使用する LLM を指定します。また、temperature や top_p などのモデル調整パラメーターを設定する `model_settings` を任意で指定できます。 +- `tools`: エージェントがタスクを達成するために使用できる tools です。 ```python from agents import Agent, ModelSettings, function_tool @@ -32,7 +32,7 @@ agent = Agent( ## コンテキスト -エージェントは汎用的に `context` 型を取ります。コンテキストは依存性インジェクション用ツールであり、あなたが作成して `Runner.run()` に渡すオブジェクトです。このオブジェクトはすべてのエージェント、ツール、ハンドオフなどに渡され、エージェント実行時の依存関係や状態をまとめて保持します。任意の Python オブジェクトをコンテキストとして渡せます。 +エージェントは汎用的な `context` 型を取ります。コンテキストは依存性注入用のツールで、あなたが作成して `Runner.run()` に渡すオブジェクトです。これはすべてのエージェント、tool、handoff などに渡され、実行時に必要な依存関係や状態を格納する入れ物として機能します。コンテキストには任意の Python オブジェクトを渡せます。 ```python @dataclass @@ -50,7 +50,7 @@ agent = Agent[UserContext]( ## 出力タイプ -既定では、エージェントはプレーンテキスト(つまり `str` )を出力します。エージェントに特定の型の出力を生成させたい場合は、 `output_type` パラメーターを使用します。よく使われるのは [Pydantic](https://docs.pydantic.dev/) オブジェクトですが、Pydantic の [TypeAdapter](https://docs.pydantic.dev/latest/api/type_adapter/) でラップ可能な型 ― dataclass、リスト、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 @@ -71,11 +71,11 @@ agent = Agent( !!! note - `output_type` を渡すと、モデルは通常のプレーンテキスト応答ではなく [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) を使用するよう指示されます。 + `output_type` を渡すと、モデルは通常のプレーンテキスト応答ではなく structured outputs を使用するよう指示されます。 ## ハンドオフ -ハンドオフは、エージェントが委任できるサブエージェントです。ハンドオフのリストを渡すと、関連性がある場合にエージェントがそれらへ委任できます。これは、単一タスクに特化したモジュール型エージェントをオーケストレーションする強力なパターンです。詳細は [ハンドオフ](handoffs.md) ドキュメントをご覧ください。 +ハンドオフは、エージェントが委譲できるサブエージェントです。ハンドオフのリストを渡すと、エージェントは関連性がある場合にそれらへ委譲できます。これは、単一タスクに特化したモジュール型エージェントを編成する強力なパターンです。詳細は [ハンドオフ](handoffs.md) のドキュメントをご覧ください。 ```python from agents import Agent @@ -96,7 +96,7 @@ triage_agent = Agent( ## 動的 instructions -多くの場合、エージェント作成時に instructions を指定できますが、関数を介して動的に渡すことも可能です。その関数はエージェントとコンテキストを受け取り、プロンプトを返す必要があります。通常の関数も `async` 関数も使用できます。 +通常はエージェント作成時に instructions を渡しますが、関数を通じて動的に instructions を提供することもできます。この関数はエージェントとコンテキストを受け取り、プロンプトを返す必要があります。同期関数でも `async` 関数でも利用可能です。 ```python def dynamic_instructions( @@ -111,17 +111,17 @@ agent = Agent[UserContext]( ) ``` -## ライフサイクルイベント(フック) +## ライフサイクルイベント (hooks) -エージェントのライフサイクルを監視したい場合があります。たとえば、イベントをログに記録したり、特定のイベント発生時にデータを事前取得したりしたい場合です。 `hooks` プロパティを使ってエージェントのライフサイクルにフックできます。 [`AgentHooks`][agents.lifecycle.AgentHooks] クラスを継承し、関心のあるメソッドをオーバーライドしてください。 +エージェントのライフサイクルを監視したい場合があります。たとえば、イベントをログに記録したり、特定のイベント発生時にデータを事前取得したりするケースです。`hooks` プロパティを使うことでエージェントのライフサイクルにフックを追加できます。[`AgentHooks`][agents.lifecycle.AgentHooks] クラスを継承し、必要なメソッドをオーバーライドしてください。 ## ガードレール -ガードレールを使用すると、エージェントの実行と並行してユーザー入力のチェックやバリデーションを行えます。たとえば、ユーザー入力の関連性をスクリーニングすることが可能です。詳細は [guardrails](guardrails.md) ドキュメントをご覧ください。 +ガードレールを使うと、エージェントの実行と並行してユーザー入力に対するチェック/バリデーションを実行できます。たとえば、ユーザー入力の関連性をフィルタリングすることが可能です。詳細は [guardrails](guardrails.md) のドキュメントをご参照ください。 -## エージェントのクローン/コピー +## エージェントのクローンとコピー -エージェントの `clone()` メソッドを使用すると、エージェントを複製し、任意のプロパティを変更できます。 +エージェントの `clone()` メソッドを使用すると、エージェントを複製し、必要に応じて任意のプロパティを変更できます。 ```python pirate_agent = Agent( @@ -138,15 +138,15 @@ robot_agent = pirate_agent.clone( ## ツール使用の強制 -ツールのリストを渡しても、必ずしも LLM がツールを使用するとは限りません。 [`ModelSettings.tool_choice`][agents.model_settings.ModelSettings.tool_choice] を設定することでツール使用を強制できます。有効な値は以下のとおりです。 +tools のリストを渡しても、LLM が必ずツールを使用するわけではありません。`ModelSettings.tool_choice` を設定することでツール使用を強制できます。設定可能な値は次のとおりです。 -1. `auto` : LLM がツールを使用するかどうかを判断します。 -2. `required` : LLM にツール使用を必須にします(ただし使用するツールは自動選択)。 -3. `none` : LLM にツールを使用しないことを必須にします。 -4. 文字列(例 `my_tool` )を指定すると、その特定のツールを必ず使用させます。 +1. `auto` : LLM がツールを使用するかどうかを判断します。 +2. `required` : LLM にツールの使用を必須とします (どのツールを使うかは LLM が判断)。 +3. `none` : LLM にツールを使用しないことを要求します。 +4. 特定の文字列 (例: `my_tool`) を設定すると、そのツールの使用を必須とします。 !!! note - 無限ループを防ぐため、フレームワークはツール呼び出し後に `tool_choice` を自動的に "auto" にリセットします。この挙動は [`agent.reset_tool_choice`][agents.agent.Agent.reset_tool_choice] で設定できます。無限ループは、ツール結果が再度 LLM に送られ、 `tool_choice` により再びツール呼び出しが生成される、という繰り返しが原因です。 + 無限ループを防ぐため、フレームワークはツール呼び出し後に `tool_choice` を自動的に "auto" にリセットします。この挙動は [`agent.reset_tool_choice`][agents.agent.Agent.reset_tool_choice] で設定できます。無限ループが発生するのは、ツールの結果が LLM へ送られ、`tool_choice` により再びツール呼び出しが生成されるというサイクルが続くためです。 - ツール呼び出し後にエージェントを完全に停止させたい場合(自動モードを続行しない)、 [`Agent.tool_use_behavior="stop_on_first_tool"`] を設定できます。この場合、ツールの出力をそのまま最終応答として使用し、追加の LLM 処理は行いません。 \ No newline at end of file + ツール呼び出し後に自動モードへ移行せず完全に処理を終了したい場合は、[`Agent.tool_use_behavior="stop_on_first_tool"`] を設定してください。これにより、ツールの出力をそのまま最終応答として使用し、追加の LLM 処理を行いません。 \ No newline at end of file diff --git a/docs/ja/config.md b/docs/ja/config.md index 80a7e656e..193045490 100644 --- a/docs/ja/config.md +++ b/docs/ja/config.md @@ -4,9 +4,9 @@ search: --- # SDK の設定 -## API keys と clients +## 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 は環境変数または上記で設定したデフォルトキーを用いて `AsyncOpenAI` インスタンスを生成します。これを変更するには、 [set_default_openai_client()][agents.set_default_openai_client] 関数を使用してください。 +また、使用する OpenAIクライアントを設定することもできます。デフォルトでは、 SDK は環境変数または上記で設定したデフォルトキーを用いて `AsyncOpenAI` インスタンスを作成します。これを変更したい場合は、 [set_default_openai_client()][agents.set_default_openai_client] 関数を使用してください。 ```python from openai import AsyncOpenAI @@ -24,7 +24,7 @@ custom_client = AsyncOpenAI(base_url="...", api_key="...") set_default_openai_client(custom_client) ``` -さらに、利用する OpenAI API をカスタマイズすることも可能です。デフォルトでは OpenAI Responses API を使用しますが、 [set_default_openai_api()][agents.set_default_openai_api] 関数を使って Chat Completions API に切り替えることができます。 +さらに、使用する OpenAI API をカスタマイズすることもできます。デフォルトでは OpenAI Responses API を使用しますが、 [set_default_openai_api()][agents.set_default_openai_api] 関数を使用して Chat Completions API に切り替えることができます。 ```python from agents import set_default_openai_api @@ -32,9 +32,9 @@ from agents import set_default_openai_api set_default_openai_api("chat_completions") ``` -## Tracing +## トレーシング -トレーシングはデフォルトで有効になっています。デフォルトでは前述の 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) ``` -## Debug logging +## デバッグログ -SDK にはハンドラーが設定されていない Python ロガーが 2 つあります。デフォルトでは、警告とエラーが `stdout` に出力され、それ以外のログは抑制されます。 +SDK にはハンドラーが設定されていない 2 つの Python ロガーが用意されています。デフォルトでは、 warning と error は `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 logging guide](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 43285a4b2..77eae1e81 100644 --- a/docs/ja/context.md +++ b/docs/ja/context.md @@ -4,29 +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` からアクセスできます。 -**最も重要な点**: 1 回のエージェント実行において、エージェント・ツール関数・ライフサイクルフックなどはすべて同じ _型_ のコンテキストを使用しなければなりません。 +**最も重要な点**: ひとつのエージェント実行において、エージェント・ツール関数・ライフサイクル フックなどはすべて同じ _型_ のコンテキストを使用しなければなりません。 -コンテキストは次のような用途に利用できます: +コンテキストは次のような用途に利用できます。 -- 実行のためのコンテキストデータ (例: ユーザー名や UID など ユーザー に関する情報) -- 依存関係 (例: ロガーオブジェクトやデータフェッチャーなど) +- 実行に関するコンテキスト データ(例: ユーザー名 / UID などのユーザー情報) +- 依存関係(例: ロガー オブジェクト、データフェッチャーなど) - ヘルパー関数 !!! danger "Note" - コンテキストオブジェクトは **LLM には送信されません**。あくまでローカルオブジェクトであり、読み書きやメソッド呼び出しが可能です。 + + コンテキスト オブジェクトは **LLM に送信されません**。あくまでローカル オブジェクトであり、読み書きやメソッド呼び出しが可能です。 ```python import asyncio @@ -65,17 +66,17 @@ if __name__ == "__main__": asyncio.run(main()) ``` -1. これはコンテキストオブジェクトです。ここでは dataclass を使用していますが、どのような型でも構いません。 -2. これはツールです。`RunContextWrapper[UserInfo]` を受け取り、実装内でコンテキストを参照しています。 -3. ジェネリック型 `UserInfo` をエージェントに指定することで、型チェッカーが誤り (異なるコンテキスト型を取るツールを渡すなど) を検出できます。 +1. これはコンテキスト オブジェクトです。ここでは dataclass を使用していますが、任意の型を利用できます。 +2. これはツールです。`RunContextWrapper[UserInfo]` を受け取ることが分かります。ツール実装はコンテキストからデータを読み取ります。 +3. エージェントにジェネリック型 `UserInfo` を指定し、型チェッカーがエラーを検出できるようにしています(例: 異なるコンテキスト型を取るツールを渡そうとした場合など)。 4. `run` 関数にコンテキストを渡します。 5. エージェントはツールを正しく呼び出し、年齢を取得します。 -## エージェント/LLM コンテキスト +## エージェント / LLM コンテキスト -LLM が呼び出されるとき、LLM が参照できる **唯一** のデータは会話履歴だけです。したがって、新しいデータを LLM に与えたい場合は、そのデータを履歴に含める方法を取る必要があります。主な方法は次のとおりです: +LLM が呼び出されるとき、LLM が参照できるデータは会話履歴からのみ取得されます。そのため、新しいデータを LLM に渡したい場合は、履歴に含める形で提供する必要があります。主な方法は以下のとおりです。 -1. Agent の `instructions` に追加する。これは「system prompt」や「developer message」とも呼ばれます。`instructions` は静的な文字列でも、コンテキストを受け取って文字列を返す動的関数でも構いません。常に役立つ情報 (例: ユーザー名や現在の日付) を渡す一般的な手法です。 -2. `Runner.run` を呼び出す際に `input` に追加する。この方法は `instructions` と似ていますが、[指揮系統](https://cdn.openai.com/spec/model-spec-2024-05-08.html#follow-the-chain-of-command) の下位にメッセージを配置できる点が異なります。 -3. 関数ツールを通じて公開する。これは _オンデマンド_ コンテキストに適しており、LLM が必要になったタイミングでツールを呼び出してデータを取得できます。 -4. Retrieval や Web 検索を使用する。これらはファイルやデータベースから関連データを取得する (retrieval) または Web から取得する (Web 検索) 特殊なツールです。関連するコンテキストデータで回答をグラウンディングするのに有効です。 \ No newline at end of file +1. エージェントの `instructions` に追加する。これは「system prompt」や「developer message」とも呼ばれます。システム プロンプトは静的な文字列でも、コンテキストを受け取って文字列を返す動的関数でも構いません。ユーザー名や現在の日付など、常に有用な情報を渡す際によく使われます。 +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 diff --git a/docs/ja/examples.md b/docs/ja/examples.md index be118b0fa..177729613 100644 --- a/docs/ja/examples.md +++ b/docs/ja/examples.md @@ -4,42 +4,45 @@ search: --- # コード例 -リポジトリの [examples セクション](https://github.com/openai/openai-agents-python/tree/main/examples) では、SDK のさまざまなサンプル実装をご覧いただけます。これらのコード例は、異なるパターンや機能を示す複数のカテゴリーに整理されています。 +[リポジトリ](https://github.com/openai/openai-agents-python/tree/main/examples) の examples セクションには、 SDK のさまざまなサンプル実装が用意されています。これらのコード例は、異なるパターンや機能を示す複数のカテゴリーに整理されています。 ## カテゴリー - **[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 の基礎的な機能を紹介します。 - - 動的な system prompt - - ストリーミング出力 - - ライフサイクルイベント + ここでは、以下のような SDK の基礎的な機能を紹介しています。例: + + - 動的なシステムプロンプト + - ストリーミング出力 + - ライフサイクルイベント - **[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 で利用する方法を紹介します。 +- **[model providers](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers):** + OpenAI 以外のモデルを SDK と併用する方法を探求できます。 - **[handoffs](https://github.com/openai/openai-agents-python/tree/main/examples/handoffs):** - エージェントのハンドオフの実践例をご覧いただけます。 + エージェントのハンドオフに関する実践的なコード例です。 - **[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 つの例です。 - - **customer_service**: 航空会社向けカスタマーサービスシステムの例。 - - **research_bot**: シンプルなディープリサーチ クローン。 + 実際のユースケースを想定した、より充実した 2 つのコード例 + + - **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 1858914a7..4b20832c1 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] 例外が送出されるため、ユーザーへの応答や例外処理を適切に行えます。 +2. 次に、ガードレール関数が実行され、[`GuardrailFunctionOutput`][agents.guardrail.GuardrailFunctionOutput] を生成し、それを [`InputGuardrailResult`][agents.guardrail.InputGuardrailResult] でラップします。 +3. 最後に [`.tripwire_triggered`][agents.guardrail.GuardrailFunctionOutput.tripwire_triggered] が true かどうかを確認します。true の場合、[`InputGuardrailTripwireTriggered`][agents.exceptions.InputGuardrailTripwireTriggered] 例外が送出され、ユーザーへの適切な応答や例外処理を行えます。 !!! Note - 入力ガードレールはユーザー入力に対して実行されることを意図しているため、エージェントが *最初の* エージェントである場合にのみ実行されます。「guardrails」プロパティがエージェントにあるのに、なぜ `Runner.run` に渡さないのか疑問に思うかもしれません。これはガードレールが実際の Agent と密接に関連していることが多く、エージェントごとに異なるガードレールを実行するため、コードを同じ場所に置いておくと可読性が向上するためです。 + 入力ガードレールはユーザー入力に対して実行されることを想定しているため、エージェントが *最初の* エージェントの場合にのみ実行されます。「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`][agents.guardrail.GuardrailFunctionOutput] を生成し、それを [`OutputGuardrailResult`][agents.guardrail.OutputGuardrailResult] でラップします。 +3. 最後に [`.tripwire_triggered`][agents.guardrail.GuardrailFunctionOutput.tripwire_triggered] が true かどうかを確認します。true の場合、[`OutputGuardrailTripwireTriggered`][agents.exceptions.OutputGuardrailTripwireTriggered] 例外が送出され、ユーザーへの適切な応答や例外処理を行えます。 !!! Note - 出力ガードレールは最終的なエージェント出力に対して実行されることを意図しているため、エージェントが *最後の* エージェントである場合にのみ実行されます。入力ガードレールと同様、ガードレールは実際の Agent と密接に関連しているため、エージェントごとに異なるガードレールを実行することになり、コードを同じ場所に置いておくと可読性が向上します。 + 出力ガードレールは最終的なエージェント出力に対して実行されることを想定しているため、エージェントが *最後の* エージェントの場合にのみ実行されます。入力ガードレールと同様に、ガードレールは実際のエージェントと密接に関連しているため、コードを同じ場所に置く方が可読性に優れます。 ## トリップワイヤ -入力または出力がガードレールに失敗した場合、ガードレールはトリップワイヤでそれを通知できます。トリップワイヤが作動したガードレールを検出すると、ただちに `{Input,Output}GuardrailTripwireTriggered` 例外を送出し、エージェントの実行を停止します。 +入力あるいは出力がガードレールを通過できなかった場合、ガードレールはトリップワイヤでその旨を通知できます。トリップワイヤが起動したガードレールを検出するとすぐに `{Input,Output}GuardrailTripwireTriggered` 例外を送出し、エージェントの実行を停止します。 ## ガードレールの実装 -入力を受け取り [`GuardrailFunctionOutput`][agents.guardrail.GuardrailFunctionOutput] を返す関数を提供する必要があります。この例では、内部でエージェントを実行してそれを行います。 +入力を受け取り、[`GuardrailFunctionOutput`][agents.guardrail.GuardrailFunctionOutput] を返す関数を用意する必要があります。この例では、内部でエージェントを実行してこれを行います。 ```python from pydantic import BaseModel @@ -95,9 +95,9 @@ async def main(): ``` 1. このエージェントをガードレール関数内で使用します。 -2. こちらがエージェントの入力/コンテキストを受け取り、結果を返すガードレール関数です。 +2. これはエージェントの入力 / コンテキストを受け取り、結果を返すガードレール関数です。 3. ガードレール結果に追加情報を含めることもできます。 -4. こちらがワークフローを定義する実際のエージェントです。 +4. これはワークフローを定義する実際のエージェントです。 出力ガードレールも同様です。 @@ -152,7 +152,7 @@ async def main(): print("Math output guardrail tripped") ``` -1. こちらが実際のエージェントの出力型です。 -2. こちらがガードレールの出力型です。 -3. こちらがエージェントの出力を受け取り、結果を返すガードレール関数です。 -4. こちらがワークフローを定義する実際のエージェントです。 \ No newline at end of file +1. これは実際のエージェントの出力型です。 +2. これはガードレールの出力型です。 +3. これはエージェントの出力を受け取り、結果を返すガードレール関数です。 +4. これはワークフローを定義する実際のエージェントです。 \ No newline at end of file diff --git a/docs/ja/handoffs.md b/docs/ja/handoffs.md index afde32dcb..5e55ddc49 100644 --- a/docs/ja/handoffs.md +++ b/docs/ja/handoffs.md @@ -4,19 +4,19 @@ 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` パラメーターがあり、ここには `Agent` を直接渡すことも、ハンドオフをカスタマイズした `Handoff` オブジェクトを渡すこともできます。 -Agents SDK が提供する [`handoff()`][agents.handoffs.handoff] 関数を使用してハンドオフを作成できます。この関数では、ハンドオフ先の エージェント に加えて、オーバーライドや入力フィルターなどのオプションを指定できます。 +Agents SDK が提供する `handoff()` 関数を使ってハンドオフを作成できます。この関数では、委譲先のエージェントを指定できるほか、各種オーバーライドや入力フィルターも設定できます。 ### 基本的な使い方 -以下はシンプルなハンドオフの作成例です。 +シンプルなハンドオフの作成例は次のとおりです。 ```python from agents import Agent, 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()` 関数では、さまざまなカスタマイズが可能です。 -- `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 @@ -57,9 +57,9 @@ handoff_obj = handoff( ) ``` -## ハンドオフの入力 +## ハンドオフ入力 -場合によっては、 LLM にハンドオフ呼び出し時にいくつかのデータを渡してほしいことがあります。たとえば「Escalation agent」へのハンドオフでは、その理由を一緒に受け取りログに残したい、というケースです。 +状況によっては、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` を設定してください。入力フィルターは `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 93b0c3340..e077c29aa 100644 --- a/docs/ja/index.md +++ b/docs/ja/index.md @@ -4,31 +4,31 @@ search: --- # OpenAI Agents SDK - OpenAI Agents SDK は、抽象化を最小限に抑えた軽量で使いやすいパッケージで、エージェント指向の AI アプリを構築できます。これは、エージェントに関する以前の試験的プロジェクトである Swarm をプロダクションレベルにアップグレードしたものです。 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 -- **ハンドオフ**: 特定のタスクを他のエージェントに委譲できます -- **ガードレール**: エージェントへの入力を検証できます -- **セッション**: エージェント実行間で会話履歴を自動的に保持します +- **エージェント**: instructions と tools を備えた LLM +- **ハンドオフ**: 特定タスクを他のエージェントへ委任する仕組み +- **ガードレール**: エージェントへの入力を検証する仕組み +- **セッション**: エージェント実行間で会話履歴を自動的に保持 - Python と組み合わせることで、これらの基本コンポーネントはツールとエージェント間の複雑な関係を表現でき、学習コストを抑えながら実用的なアプリケーションを構築できます。さらに、SDK には組み込みの トレーシング があり、エージェントフローの可視化やデバッグ、評価、さらにはアプリ向けモデルのファインチューニングまで行えます。 +Python と組み合わせることで、これらの基本コンポーネントはツールとエージェント間の複雑な関係を表現でき、急な学習コストなしに実用的なアプリケーションを構築できます。さらに、SDK には **トレーシング** が組み込まれており、エージェントフローの可視化やデバッグ、評価、さらにはアプリ固有のモデルのファインチューニングも行えます。 -## Agents SDK を使う理由 +## Agents SDK を使用する理由 -SDK には 2 つの設計原則があります。 +SDK の設計には 2 つの原則があります。 -1. 使う価値があるだけの機能を備えつつ、学習が容易になるよう基本コンポーネントは少なく。 -2. すぐに使い始められる一方で、動作を細部までカスタマイズ可能に。 +1. 学ぶ価値のある十分な機能を備えつつ、覚えるべきコンポーネント数は最小限に抑える。 +2. そのままでも優れた体験を提供しつつ、処理内容を細かくカスタマイズできる。 -主な機能は次のとおりです。 +主な特徴は次のとおりです。 -- エージェントループ: ツール呼び出し、結果を LLM へ送信、 LLM が完了するまでループ処理を自動で行います。 -- Python ファースト: 新しい抽象概念を学ばずに、言語本来の機能でエージェントをオーケストレーションしチェーン化できます。 -- ハンドオフ: 複数エージェント間での調整と委譲を実現する強力な機能です。 -- ガードレール: エージェントと並行して入力バリデーションやチェックを行い、失敗時には早期終了します。 -- セッション: エージェント実行間の会話履歴を自動で管理し、手動での状態管理を排除します。 -- 関数ツール: 任意の Python 関数をツール化し、自動スキーマ生成と Pydantic による検証を提供します。 -- トレーシング: フローの可視化・デバッグ・モニタリングが可能で、 OpenAI の評価、ファインチューニング、蒸留ツールとも連携します。 +- エージェントループ: tools の呼び出し、結果を LLM へ送信、LLM が完了するまでループ処理を自動で実行。 +- Python ファースト: 新しい抽象を学習することなく、Python の言語機能でエージェントをオーケストレーションおよび連鎖。 +- ハンドオフ: 複数エージェント間の調整と委任を可能にする強力な機能。 +- ガードレール: エージェントと並行して入力検証を実行し、チェック失敗時には早期終了。 +- セッション: エージェント実行間の会話履歴を自動管理し、手動での状態管理を排除。 +- 関数ツール: 任意の Python 関数を自動スキーマ生成と Pydantic 検証付きの tool へ変換。 +- トレーシング: ワークフローの可視化・デバッグ・監視だけでなく、OpenAI の評価、ファインチューニング、蒸留ツールも利用可能。 ## インストール @@ -51,7 +51,7 @@ print(result.final_output) # Infinite loop's dance. ``` -(_実行する場合は、環境変数 `OPENAI_API_KEY` を設定してください_) +(_実行の際は `OPENAI_API_KEY` 環境変数を設定してください_) ```bash export OPENAI_API_KEY=sk-... diff --git a/docs/ja/mcp.md b/docs/ja/mcp.md index 33f6b08c3..69d45fa73 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 is an open protocol that standardizes how applications provide context to LLMs. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various peripherals and accessories, MCP provides a standardized way to connect AI models to different data sources and tools. +> MCP は、アプリケーションが LLMs にコンテキストを提供する方法を標準化するオープンプロトコルです。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 ファイルシステムサーバー](https://www.npmjs.com/package/@modelcontextprotocol/server-filesystem) を使用する場合は次のようになります。 +たとえば、[公式 MCP ファイルシステムサーバー](https://www.npmjs.com/package/@modelcontextprotocol/server-filesystem) を利用する場合は次のようになります。 ```python from agents.run_context import RunContextWrapper @@ -41,7 +41,7 @@ async with MCPServerStdio( ## MCP サーバーの利用 - MCP サーバーはエージェントに追加できます。 Agents SDK はエージェントの実行毎に MCP サーバーの `list_tools()` を呼び出し、 MCP サーバーのツールを LLM に認識させます。 LLM が MCP サーバーのツールを呼び出すと、SDK はそのサーバーの `call_tool()` を実行します。 +MCP サーバーはエージェントに追加できます。Agents SDK はエージェント実行時に毎回 MCP サーバーの `list_tools()` を呼び出し、 LLM に MCP サーバーのツールを認識させます。 LLM が MCP サーバーのツールを呼び出すと、SDK はサーバーの `call_tool()` を実行します。 ```python @@ -52,13 +52,13 @@ agent=Agent( ) ``` -## ツールのフィルタリング +## ツールフィルタリング - MCP サーバーにツールフィルターを設定して、エージェントで利用可能なツールを制限できます。 SDK は静的および動的フィルタリングの両方をサポートしています。 +MCP サーバーでツールフィルターを設定すると、エージェントが利用できるツールを制限できます。SDK は静的および動的フィルタリングの両方をサポートしています。 -### 静的なツールフィルタリング +### 静的ツールフィルタリング -単純な許可 / ブロックリストの場合は、静的フィルタリングを利用できます: +単純な許可 / ブロックリストには静的フィルタリングを使用できます: ```python from agents.mcp import create_static_tool_filter @@ -87,15 +87,15 @@ server = MCPServerStdio( ``` -**`allowed_tool_names` と `blocked_tool_names` の両方を設定した場合、処理順序は以下のとおりです:** -1. まず `allowed_tool_names`(許可リスト)を適用し、指定されたツールのみを残します -2. 次に `blocked_tool_names`(ブロックリスト)を適用し、残ったツールから指定されたツールを除外します +**`allowed_tool_names` と `blocked_tool_names` の両方が設定されている場合の処理順序:** +1. まず `allowed_tool_names`(許可リスト)を適用し、指定したツールのみを残します +2. 次に `blocked_tool_names`(ブロックリスト)を適用し、残ったツールから指定したツールを除外します -たとえば `allowed_tool_names=["read_file", "write_file", "delete_file"]` と `blocked_tool_names=["delete_file"]` を設定した場合、使用できるツールは `read_file` と `write_file` だけになります。 +たとえば `allowed_tool_names=["read_file", "write_file", "delete_file"]` と `blocked_tool_names=["delete_file"]` を設定すると、利用可能なのは `read_file` と `write_file` だけになります。 -### 動的なツールフィルタリング +### 動的ツールフィルタリング -より複雑なフィルタリングロジックには、関数を用いた動的フィルターを利用できます: +より複雑なロジックが必要な場合は、関数を使った動的フィルターを利用できます: ```python from agents.mcp import ToolFilterContext @@ -134,21 +134,21 @@ server = MCPServerStdio( ) ``` -`ToolFilterContext` では以下へアクセスできます: -- `run_context`: 現在の実行コンテキスト -- `agent`: ツールを要求しているエージェント -- `server_name`: MCP サーバー名 +`ToolFilterContext` では次の情報にアクセスできます: +- `run_context`: 現在の実行コンテキスト +- `agent`: ツールを要求しているエージェント +- `server_name`: MCP サーバー名 ## プロンプト - MCP サーバーはプロンプトも提供でき、パラメーター付きで動的にエージェントの instructions を生成できます。これにより再利用可能なインストラクションテンプレートを作成し、パラメーターでカスタマイズできます。 +MCP サーバーは、agent 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` を渡します。ツール一覧が変更されないことが確実な場合のみ使用してください。 +エージェントが実行されるたびに、MCP サーバーの `list_tools()` が呼ばれます。サーバーがリモートの場合、これはレイテンシーの原因になります。ツール一覧を自動でキャッシュするには、[`MCPServerStdio`][agents.mcp.server.MCPServerStdio]、[`MCPServerSse`][agents.mcp.server.MCPServerSse]、[`MCPServerStreamableHttp`][agents.mcp.server.MCPServerStreamableHttp] に `cache_tools_list=True` を渡します。ツール一覧が変更されないと確信できる場合のみ実行してください。 キャッシュを無効化したい場合は、サーバーの `invalidate_tools_cache()` を呼び出します。 -## エンドツーエンドのコード例 +## End-to-end コード例 -動作する完全なコード例は [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](./tracing.md) を使用すると、MCP 操作が自動的に記録されます。対象は次のとおりです: -1. ツール一覧取得のための MCP サーバーへの呼び出し -2. 関数呼び出しに関する 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 b2fcd1525..04c7d99e8 100644 --- a/docs/ja/models/index.md +++ b/docs/ja/models/index.md @@ -4,20 +4,20 @@ search: --- # モデル - Agents SDK には、OpenAI モデルをすぐに利用できる 2 つの形態が用意されています: +Agents SDK には、すぐに使える 2 種類の OpenAI モデル対応が含まれています。 -- **推奨**: [`OpenAIResponsesModel`] は、新しい [Responses API](https://platform.openai.com/docs/api-reference/responses) を使用して OpenAI API を呼び出します。 -- [`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 の依存グループをインストールします: +ほとんどの非 OpenAI モデルは [LiteLLM インテグレーション](./litellm.md) 経由で利用できます。まず、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", ...) @@ -26,29 +26,29 @@ gemini_agent = Agent(model="litellm/gemini/gemini-2.5-flash-preview-04-17", ...) ### 非 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/) に code examples あり)。 -1. [`set_default_openai_client`] は、`AsyncOpenAI` インスタンスを LLM クライアントとしてグローバルに使用したい場合に便利です。LLM プロバイダーが OpenAI 互換の API エンドポイントを持ち、`base_url` と `api_key` を設定できるケースに適しています。設定可能な例は [examples/model_providers/custom_example_global.py](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/custom_example_global.py) をご覧ください。 -2. [`ModelProvider`] は `Runner.run` レベルで指定します。これにより、「この実行のすべてのエージェントに対してカスタムモデルプロバイダーを使用する」と宣言できます。設定可能な例は [examples/model_providers/custom_example_provider.py](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/custom_example_provider.py) をご覧ください。 -3. [`Agent.model`] では、特定のエージェントインスタンスにモデルを指定できます。これにより、エージェントごとに異なるプロバイダーを組み合わせて使用できます。設定可能な例は [examples/model_providers/custom_example_agent.py](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/custom_example_agent.py) をご覧ください。多くの利用可能なモデルを簡単に使う方法としては、[LiteLLM 連携](./litellm.md) が便利です。 +1. [`set_default_openai_client`][agents.set_default_openai_client] — `AsyncOpenAI` インスタンスを LLM クライアントとしてグローバルに使用したい場合に便利です。LLM プロバイダーが OpenAI 互換 API エンドポイントを持ち、`base_url` と `api_key` を設定できるケース向けです。設定例は [examples/model_providers/custom_example_global.py](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/custom_example_global.py) をご覧ください。 +2. [`ModelProvider`][agents.models.interface.ModelProvider] — `Runner.run` レベルで指定できます。「この run 内のすべての エージェント ではカスタムモデルプロバイダーを使う」といった指定が可能です。設定例は [examples/model_providers/custom_example_provider.py](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/custom_example_provider.py) をご覧ください。 +3. [`Agent.model`][agents.agent.Agent.model] — 特定の Agent インスタンスにモデルを指定できます。これにより、エージェントごとに異なるプロバイダーを混在させることができます。設定例は [examples/model_providers/custom_example_agent.py](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/custom_example_agent.py) をご覧ください。ほとんどのモデルを簡単に利用するには [LiteLLM インテグレーション](./litellm.md) が便利です。 - `platform.openai.com` の API キーをお持ちでない場合は、`set_tracing_disabled()` でトレーシングを無効化するか、[別のトレーシングプロセッサー](../tracing.md) を設定することをおすすめします。 +`platform.openai.com` の API キーをお持ちでない場合は、`set_tracing_disabled()` でトレーシングを無効化するか、[別のトレーシング プロセッサー](../tracing.md) を設定することをおすすめします。 !!! note - これらの例では、ほとんどの LLM プロバイダーが Responses API をまだサポートしていないため、Chat Completions API/モデルを使用しています。ご使用の LLM プロバイダーが Responses API をサポートしている場合は、Responses を使うことをおすすめします。 + これらの例では Chat Completions API/モデルを使用しています。多くの LLM プロバイダーがまだ Responses API をサポートしていないためです。もしお使いの LLM プロバイダーが Responses API をサポートしている場合は、Responses を使用することを推奨します。 ## モデルの組み合わせ - 1 つのワークフロー内で、エージェントごとに異なるモデルを使用したい場合があります。たとえば、振り分けには小型で高速なモデルを使用し、複雑なタスクには大型で高性能なモデルを使う、といった形です。[`Agent`] を設定する際、次のいずれかで特定のモデルを選択できます: +1 つのワークフロー内で、エージェントごとに異なるモデルを使用したい場合があります。たとえば、トリアージにはより小さく高速なモデルを使い、複雑なタスクにはより大型で高性能なモデルを使うといったケースです。[`Agent`][agents.Agent] を設定するとき、以下のいずれかの方法で特定のモデルを選択できます。 -1. モデル名を直接渡す。 -2. 任意のモデル名と、それをモデルインスタンスにマッピングできる [`ModelProvider`] を渡す。 -3. [`Model`] 実装を直接提供する。 +1. モデル名を直接渡す。 +2. どのモデル名でも渡し、その名前を Model インスタンスにマッピングできる [`ModelProvider`][agents.models.interface.ModelProvider] を渡す。 +3. [`Model`][agents.models.interface.Model] 実装を直接渡す。 !!!note - SDK は [`OpenAIResponsesModel`] と [`OpenAIChatCompletionsModel`] の両方の形態をサポートしていますが、ワークフローごとに単一のモデル形態を使用することを推奨します。両モデル形態は利用できる機能やツールのセットが異なるためです。ワークフローでモデル形態を混在させる必要がある場合は、使用するすべての機能が両形態で利用可能かをご確認ください。 + SDK は [`OpenAIResponsesModel`][agents.models.openai_responses.OpenAIResponsesModel] と [`OpenAIChatCompletionsModel`][agents.models.openai_chatcompletions.OpenAIChatCompletionsModel] の両方の形をサポートしますが、ワークフローごとに 1 つのモデル形に統一することを推奨します。2 つの形では利用できる機能や tools が異なるためです。モデル形を混在させる場合は、使用するすべての機能が両方で利用可能であることを確認してください。 ```python from agents import Agent, Runner, AsyncOpenAI, OpenAIChatCompletionsModel @@ -81,10 +81,10 @@ async def main(): print(result.final_output) ``` -1. OpenAI のモデル名を直接設定します。 -2. [`Model`] 実装を提供します。 +1. OpenAI モデル名を直接設定しています。 +2. [`Model`][agents.models.interface.Model] 実装を提供しています。 - エージェントで使用するモデルをさらに詳細に設定したい場合は、`temperature` などのオプションパラメーターを含む [`ModelSettings`] を渡すことができます。 +エージェントで使用するモデルをさらに細かく設定したい場合は、`temperature` などのオプションパラメーターを指定できる [`ModelSettings`][agents.models.interface.ModelSettings] を渡せます。 ```python from agents import Agent, ModelSettings @@ -97,7 +97,7 @@ english_agent = Agent( ) ``` - また、OpenAI の Responses API を使用する際には、`user` や `service_tier` など、[その他のオプションパラメーター](https://platform.openai.com/docs/api-reference/responses/create) があります。トップレベルで利用できない場合は、`extra_args` を使って渡してください。 +また、OpenAI の Responses API を使用する場合は [その他のオプションパラメーター](https://platform.openai.com/docs/api-reference/responses/create)(`user`、`service_tier` など)もあります。トップレベルで指定できない場合は、`extra_args` を利用して渡すことができます。 ```python from agents import Agent, ModelSettings @@ -113,27 +113,26 @@ english_agent = Agent( ) ``` -## 他の LLM プロバイダー使用時の一般的な問題 +## 他の LLM プロバイダー利用時の一般的な問題 -### Tracing クライアント エラー 401 +### トレーシング クライアント 401 エラー - トレーシングに関連したエラーが発生する場合、トレースが OpenAI サーバーにアップロードされるため、OpenAI API キーが設定されていないことが原因です。解決方法は次の 3 つです: +トレーシング関連のエラーが発生する場合、トレースが OpenAI サーバーにアップロードされる仕組みであり、OpenAI API キーがないことが原因です。解決策は次の 3 つです。 -1. トレーシングを完全に無効化する: [`set_tracing_disabled(True)`] -2. トレーシング用に OpenAI キーを設定する: [`set_tracing_export_api_key(...)`] - この API キーはトレースのアップロードのみに使用され、[platform.openai.com](https://platform.openai.com/) から取得したものである必要があります。 -3. 非 OpenAI のトレースプロセッサーを使用する。詳細は [tracing docs](../tracing.md#custom-tracing-processors) を参照してください。 +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 docs](../tracing.md#custom-tracing-processors) を参照してください。 -### Responses API のサポート +### Responses API サポート - SDK はデフォルトで Responses API を使用しますが、多くの LLM プロバイダーはまだサポートしていません。その結果、404 エラーなどが発生する場合があります。解決策は次の 2 つです: +SDK はデフォルトで Responses API を使用しますが、ほとんどの他社 LLM プロバイダーはまだ対応していません。その結果、404 エラーなどが発生することがあります。対処方法は次の 2 つです。 -1. [`set_default_openai_api("chat_completions")`] を呼び出す。これは環境変数で `OPENAI_API_KEY` と `OPENAI_BASE_URL` を設定している場合に機能します。 -2. [`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] を使用する。code examples は [こちら](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers/) にあります。 -### structured outputs のサポート +### structured outputs サポート - 一部のモデルプロバイダーは [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) をサポートしていません。その場合、次のようなエラーが発生することがあります: +一部のモデルプロバイダーは [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) をサポートしていません。その場合、次のようなエラーが発生することがあります。 ``` @@ -141,12 +140,12 @@ BadRequestError: Error code: 400 - {'error': {'message': "'response_format.type' ``` - これは一部のプロバイダーの制限によるもので、JSON 出力には対応していても、出力に使用する `json_schema` を指定できません。現在修正に取り組んでいますが、JSON スキーマ出力をサポートしているプロバイダーを利用することを推奨します。さもないと、アプリが不正な JSON により頻繁に失敗するおそれがあります。 +これは一部プロバイダーの制限で、JSON 出力には対応しているものの、出力に使用する `json_schema` を指定できません。現在修正に取り組んでいますが、JSON schema 出力をサポートするプロバイダーを利用することを推奨します。そうでない場合、壊れた JSON が返され、アプリが頻繁に失敗する可能性があります。 ## プロバイダー間でのモデルの組み合わせ - モデルプロバイダーごとの機能差に注意しないと、エラーが発生する可能性があります。たとえば、OpenAI は structured outputs、マルチモーダル入力、ホスト型 file search や web search をサポートしていますが、多くの他プロバイダーはこれらをサポートしていません。次の制限に注意してください: +モデルプロバイダーごとの機能差を理解しておかないと、エラーが発生する可能性があります。たとえば、OpenAI は structured outputs、マルチモーダル入力、ホスト型の file search と web search をサポートしていますが、多くの他社プロバイダーはこれらをサポートしていません。以下の制限に注意してください。 -- サポートしていない `tools` を理解しないプロバイダーには送信しない -- テキストのみのモデルを呼び出す前にマルチモーダル入力を除外する -- structured JSON 出力をサポートしないプロバイダーは、無効な JSON を生成することがある点に注意 \ No newline at end of file +- 未対応の `tools` を理解しないプロバイダーへ送らない +- テキストのみのモデルに呼び出す前にマルチモーダル入力をフィルタリングする +- structured JSON outputs をサポートしないプロバイダーでは、無効な JSON が返る場合があることを理解する \ No newline at end of file diff --git a/docs/ja/models/litellm.md b/docs/ja/models/litellm.md index c51bc0eab..e4c914414 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 との統合は現在 beta 版です。特に小規模なモデルプロバイダーでは問題が発生する場合があります。問題を見つけた際は [Github issues](https://github.com/openai/openai-agents-python/issues) からご報告ください。迅速に対応いたします。 -[LiteLLM](https://docs.litellm.ai/docs/) は、単一のインターフェースで 100 以上のモデルを利用できるライブラリです。Agents SDK では LiteLLM との統合により、あらゆる AI モデルを使用できます。 +[LiteLLM](https://docs.litellm.ai/docs/) は、1 つのインターフェースで 100+ のモデルを利用できるライブラリです。Agents SDK に LiteLLM との統合を追加したことで、任意の AI モデルを使用できるようになりました。 -## セットアップ +## Setup -`litellm` が利用可能であることを確認してください。オプションの `litellm` 依存関係グループをインストールすることで対応できます。 +`litellm` が利用可能であることを確認する必要があります。オプションの `litellm` 依存グループをインストールすることで設定できます: ```bash pip install "openai-agents[litellm]" ``` -インストールが完了すると、どの エージェント でも [`LitellmModel`][agents.extensions.models.litellm_model.LitellmModel] を使用できます。 +インストールが完了すると、任意のエージェントで [`LitellmModel`][agents.extensions.models.litellm_model.LitellmModel] を使用できます。 -## 例 +## Example -以下は完全に動作するコード例です。実行すると、モデル名と API キーの入力を求められます。たとえば次のように入力できます。 +以下は完全に動作する例です。実行するとモデル名と API キーの入力を求められます。例えば、次のように入力できます。 -- `openai/gpt-4.1` をモデルとして指定し、OpenAI API キーを入力 -- `anthropic/claude-3-5-sonnet-20240620` をモデルとして指定し、Anthropic API キーを入力 +- `openai/gpt-4.1` をモデルに指定し、OpenAI API キーを入力 +- `anthropic/claude-3-5-sonnet-20240620` をモデルに指定し、Anthropic API キーを入力 - など -LiteLLM でサポートされているモデルの一覧は、[litellm providers docs](https://docs.litellm.ai/docs/providers) をご覧ください。 +LiteLLM でサポートされているモデルの全リストは [litellm providers docs](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 45d62c2b2..7cdebc5a7 100644 --- a/docs/ja/multi_agent.md +++ b/docs/ja/multi_agent.md @@ -4,38 +4,38 @@ search: --- # 複数エージェントのオーケストレーション -オーケストレーションとは、アプリ内でのエージェントの流れを指します。どのエージェントを実行するか、実行順序、そして次に何を行うかをどのように決定するかということです。エージェントをオーケストレーションする方法は主に 2 つあります。 +オーケストレーションとは、アプリ内でのエージェントのフローを指します。どのエージェントがどの順番で実行され、次に何をするかをどう決定するかということです。エージェントをオーケストレーションする主な方法は 2 つあります。 -1. LLM に意思決定を任せる: これは LLM の知能を活用して計画・推論を行い、その結果に基づいて次のステップを決定させる方法です。 -2. コードによるオーケストレーション: コードでエージェントの流れを制御する方法です。 +1. LLM に意思決定させる方法: LLM の知能を利用して計画・推論し、それに基づいて次のステップを決定します。 +2. コードによるオーケストレーション: 自分のコードでエージェントのフローを決定します。 -これらのパターンは組み合わせて使用できます。それぞれにメリットとデメリットがあり、以下で説明します。 +これらのパターンは組み合わせて使用できます。それぞれにトレードオフがあり、以下で説明します。 ## LLM によるオーケストレーション -エージェントとは、 instructions、 tools、 handoffs を備えた LLM です。つまり、オープンエンドなタスクが与えられたとき、 LLM はツールを使ってアクションを実行しデータを取得し、 handoffs でサブエージェントにタスクを委任しながら、自律的にタスクをこなす計画を立てられます。たとえば、リサーチエージェントには次のようなツールを装備できます。 +エージェントとは、instructions、tools、handoffs を備えた LLM です。これにより、オープンエンドなタスクが与えられた場合でも、LLM は自律的に計画を立て、tools を用いてアクションを実行・データを取得し、handoffs でサブエージェントにタスクを委譲できます。たとえば、リサーチエージェントには次のような tools を装備できます。 -- Web 検索によりオンライン情報を取得 -- ファイル検索と取得による社内データや接続先の検索 -- コンピュータ操作でコンピュータ上のアクションを実行 -- コード実行でデータ分析を実施 -- 計画立案やレポート作成などに優れた専門エージェントへの handoffs +- Web 検索でオンライン情報を取得 +- ファイル検索と取得で独自データや接続先を検索 +- コンピュータ操作で PC 上の操作を実行 +- コード実行でデータ分析を行う +- 計画立案やレポート作成に優れた専門エージェントへの handoffs -このパターンはタスクがオープンエンドで、 LLM の知能に依存したい場合に最適です。重要な戦略は次のとおりです。 +このパターンはタスクがオープンエンドで、LLM の知能に頼りたい場合に最適です。重要なポイントは次のとおりです。 -1. 良いプロンプトに投資する。利用可能なツール、その使い方、および動作パラメーターを明確に記述します。 -2. アプリをモニタリングして改善を繰り返す。問題が発生した箇所を確認し、プロンプトを継続的に調整します。 -3. エージェントに内省させて改善させる。たとえばループで実行し、自らの結果を批評させる、またはエラーメッセージを渡して改善させるなどです。 -4. 何でもこなす汎用エージェントではなく、特定タスクに特化したエージェントを用意します。 -5. [evals](https://platform.openai.com/docs/guides/evals) に投資する。これによりエージェントを訓練し、タスク遂行能力を向上できます。 +1. 良いプロンプトに投資する。利用可能な tools、その使い方、守るべきパラメーターを明確にしましょう。 +2. アプリをモニタリングして改善を重ねる。問題が起きた箇所を確認し、プロンプトを改善します。 +3. エージェントに内省と改善を許可する。たとえばループで実行し自己批判させる、エラーメッセージを渡して改善させるなどです。 +4. 何でもこなす汎用エージェントではなく、特定タスクに特化したエージェントを用意しましょう。 +5. [evals](https://platform.openai.com/docs/guides/evals) に投資する。これによりエージェントを訓練し、タスク性能を向上できます。 ## コードによるオーケストレーション -LLM によるオーケストレーションは強力ですが、コードによるオーケストレーションは速度、コスト、パフォーマンスの面でより決定論的かつ予測可能になります。代表的なパターンは以下のとおりです。 +LLM によるオーケストレーションは強力ですが、コードでオーケストレーションすると速度、コスト、パフォーマンスの面でより決定論的かつ予測可能になります。代表的なパターンは次のとおりです。 -- [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) を使って、コードで検査可能な適切な形式のデータを生成する。たとえば、エージェントにタスクをいくつかのカテゴリーに分類させ、そのカテゴリーに応じて次のエージェントを選択する。 -- 複数エージェントを連鎖させ、一方の出力を次の入力に変換する。ブログ記事執筆タスクをリサーチ → アウトライン作成 → 記事執筆 → クリティーク → 改善という一連のステップに分解するなど。 -- タスクを実行するエージェントを `while` ループで動かし、その出力を評価しフィードバックを返すエージェントと組み合わせ、評価者が基準を満たしたと判断するまで繰り返す。 -- `asyncio.gather` のような Python の基本コンポーネントを使って複数エージェントを並列実行する。互いに依存しない複数タスクを高速に処理したい場合に有効です。 +- [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) を使って、コードで検査可能な適切な形式のデータを生成する。たとえばエージェントにタスクをいくつかのカテゴリーに分類させ、そのカテゴリーに基づいて次のエージェントを選択します。 +- あるエージェントの出力を次のエージェントの入力へと変換して複数エージェントをチェーンする。ブログ記事作成なら、リサーチ → アウトライン作成 → 記事執筆 → 批評 → 改善という一連のステップに分解できます。 +- タスクを実行するエージェントを `while` ループで回し、評価とフィードバックを行うエージェントが合格と判断するまで繰り返します。 +- `asyncio.gather` など Python の基本コンポーネントで複数エージェントを並列実行する。相互依存のない複数タスクを高速化する際に有効です。 -`examples/agent_patterns` ディレクトリーに複数のコード例があります。 \ 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 77cced861..f79d74523 100644 --- a/docs/ja/quickstart.md +++ b/docs/ja/quickstart.md @@ -6,7 +6,7 @@ search: ## プロジェクトと仮想環境の作成 -一度だけ実行すれば十分です。 +これは一度だけ実行すれば十分です。 ```bash mkdir my_project @@ -14,9 +14,9 @@ cd my_project python -m venv .venv ``` -### 仮想環境のアクティブ化 +### 仮想環境の有効化 -新しいターミナル セッションを開始するたびに実行してください。 +新しいターミナルセッションを開始するたびに実行してください。 ```bash source .venv/bin/activate @@ -28,17 +28,17 @@ source .venv/bin/activate 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,14 +93,15 @@ async def main(): print(result.final_output) ``` -## ガードレールの追加 +## ガードレールを追加する -入力または出力に対して実行するカスタム ガードレールを定義できます。 +入力または出力に対して実行するカスタムガードレールを定義できます。 ```python from agents import GuardrailFunctionOutput, Agent, Runner from pydantic import BaseModel + class HomeworkOutput(BaseModel): is_homework: bool reasoning: str @@ -122,10 +123,11 @@ async def homework_guardrail(ctx, agent, input_data): ## すべてを組み合わせる -これらをすべて組み合わせ、ハンドオフと入力ガードレールを利用してワークフロー全体を実行してみましょう。 +ハンドオフと入力ガードレールを使って、すべてを組み合わせたワークフロー全体を実行してみましょう。 ```python from agents import Agent, InputGuardrail, GuardrailFunctionOutput, Runner +from agents.exceptions import InputGuardrailTripwireTriggered from pydantic import BaseModel import asyncio @@ -170,24 +172,32 @@ triage_agent = Agent( ) async def main(): - result = await Runner.run(triage_agent, "who was the first president of the united states?") - print(result.final_output) - - result = await Runner.run(triage_agent, "what is life") - print(result.final_output) + # Example 1: History question + try: + result = await Runner.run(triage_agent, "who was the first president of the united states?") + print(result.final_output) + except InputGuardrailTripwireTriggered as e: + print("Guardrail blocked this input:", e) + + # Example 2: General/philosophical question + try: + result = await Runner.run(triage_agent, "What is the meaning of life?") + print(result.final_output) + except InputGuardrailTripwireTriggered as e: + print("Guardrail blocked this input:", e) if __name__ == "__main__": asyncio.run(main()) ``` -## トレースの表示 +## トレースを表示する -エージェント実行中に何が起こったかを確認するには、[OpenAI ダッシュボードの Trace viewer](https://platform.openai.com/traces) に移動し、実行トレースを表示します。 +エージェント実行中に何が起こったかを確認するには、[OpenAI ダッシュボードの Trace viewer](https://platform.openai.com/traces) に移動してエージェント実行のトレースを表示してください。 ## 次のステップ -より複雑なエージェント フローの構築方法を学びましょう。 +より複雑なエージェントフローを構築する方法を学びましょう: -- [Agents](agents.md) の構成方法について学ぶ。 -- [エージェントの実行](running_agents.md) について学ぶ。 -- [ツール](tools.md)、[ガードレール](guardrails.md)、[モデル](models/index.md) について学ぶ。 \ No newline at end of file +- [エージェントの設定方法](agents.md) について学びます。 +- [エージェントの実行](running_agents.md) について学びます。 +- [ツール](tools.md)、[ガードレール](guardrails.md)、そして [モデル](models/index.md) について学びます。 \ No newline at end of file diff --git a/docs/ja/realtime/guide.md b/docs/ja/realtime/guide.md index 20fd588fe..3f3fe8217 100644 --- a/docs/ja/realtime/guide.md +++ b/docs/ja/realtime/guide.md @@ -4,65 +4,65 @@ search: --- # ガイド -このガイドでは、OpenAI Agents SDK の realtime 機能を使って音声対応の AI エージェントを構築する方法を詳しく解説します。 +本ガイドでは、 OpenAI Agents SDK の realtime 機能を使用して音声対応の AI エージェントを構築する方法を詳しく説明します。 !!! warning "ベータ機能" -Realtime エージェントはベータ版です。実装の改善に伴い、破壊的変更が発生する可能性があります。 +Realtime エージェントはベータ版です。実装を改良する過程で互換性が壊れる変更が入る可能性があります。 ## 概要 -Realtime エージェントは、音声とテキスト入力をリアルタイムで処理し、音声で応答する会話フローを実現します。OpenAI の Realtime API と永続的に接続を保ち、低レイテンシで自然な音声対話を可能にし、割り込みにもスムーズに対応します。 +Realtime エージェントは、音声とテキスト入力をリアルタイムに処理し、リアルタイム音声で応答することで対話フローを実現します。 OpenAI の Realtime API と永続的に接続を維持し、低レイテンシで自然な音声会話と割り込みへのスムーズな対応を可能にします。 ## アーキテクチャ -### 主要コンポーネント +### コアコンポーネント -realtime システムは、以下の主要コンポーネントで構成されています。 +リアルタイムシステムは、以下の主要コンポーネントで構成されています。 -- **RealtimeAgent**: instructions、tools、handoffs で設定されるエージェント。 -- **RealtimeRunner**: 設定を管理します。`runner.run()` を呼び出してセッションを取得できます。 -- **RealtimeSession**: 単一の対話セッション。ユーザーが会話を開始するたびに作成し、会話が終了するまで保持します。 -- **RealtimeModel**: 基盤となるモデルインターフェース(通常は OpenAI の WebSocket 実装)。 +- **RealtimeAgent**: instructions、tools、handoffs で構成されるエージェントです。 +- **RealtimeRunner**: 設定を管理します。`runner.run()` を呼び出すことでセッションを取得できます。 +- **RealtimeSession**: 1 回の対話セッションを表します。ユーザーが会話を開始するたびに作成し、会話が終了するまで保持します。 +- **RealtimeModel**: 基盤となるモデルインターフェース(通常は OpenAI の WebSocket 実装) ### セッションフロー -典型的な realtime セッションは次のように進行します。 +典型的なリアルタイムセッションは次の流れで進みます。 -1. **RealtimeAgent** を instructions、tools、handoffs で作成します。 -2. **RealtimeRunner** をエージェントと設定オプションでセットアップします。 -3. `await runner.run()` で **セッションを開始** し、RealtimeSession を受け取ります。 -4. `send_audio()` または `send_message()` で **音声またはテキスト** をセッションへ送信します。 -5. セッションを反復処理して **イベントを受信** します。イベントには音声出力、文字起こし、tool 呼び出し、handoff、エラーなどが含まれます。 -6. ユーザーがエージェントの発話を **割り込んだ場合**、現在の音声生成が自動で停止します。 +1. **RealtimeAgent** を instructions、tools、handoffs と共に作成します。 +2. エージェントと各種設定を指定して **RealtimeRunner** をセットアップします。 +3. `await runner.run()` を実行してセッション (**RealtimeSession**) を開始します。 +4. `send_audio()` または `send_message()` を使用して音声またはテキストを送信します。 +5. セッションを反復処理してイベントを受信します。イベントには音声出力、トランスクリプト、ツール呼び出し、ハンドオフ、エラーなどが含まれます。 +6. ユーザーがエージェントの発話中に話し始めた場合は **割り込み** が発生し、現在の音声生成が自動で停止します。 -セッションは会話履歴を保持し、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)、対応モダリティ(text と/または audio)を指定可能です。音声フォーマットは入力と出力で設定でき、デフォルトは PCM16 です。 +セッション設定では基盤となるリアルタイムモデルの挙動を制御できます。モデル名(`gpt-4o-realtime-preview` など)、ボイス(alloy、echo、fable、onyx、nova、shimmer)、対応モダリティ(text / audio)を指定できます。入力・出力の音声フォーマットは PCM16 がデフォルトですが変更可能です。 -### 音声設定 +### オーディオ設定 -音声設定では、音声入力と出力の扱いを制御します。Whisper などのモデルで入力音声を文字起こししたり、言語を指定したり、専門用語の精度向上のため transcription プロンプトを提供したりできます。ターン検出では、音声検出閾値、無音時間、検出された音声の前後パディングなどを調整して、エージェントがいつ応答を開始・停止すべきかを制御します。 +オーディオ設定では音声入力・出力の扱いを制御します。Whisper などのモデルで音声をトランスクリプトし、言語設定やドメイン固有語の精度を上げる transcription prompt を指定できます。ターン検出では、音声活動検出のしきい値、無音継続時間、検出前後のパディングなどを設定して、エージェントがいつ応答を開始・終了すべきかを調整します。 -## Tools と Functions +## ツールと関数 ### ツールの追加 -通常のエージェントと同様に、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**: エージェントの応答音声データ +- **audio**: エージェント応答の raw 音声データ - **audio_end**: エージェントの発話終了 -- **audio_interrupted**: ユーザーによる割り込み -- **tool_start/tool_end**: tool 実行の開始と終了 -- **handoff**: エージェント間の handoff +- **audio_interrupted**: ユーザーによる割り込み発話 +- **tool_start / tool_end**: ツール実行の開始・終了 +- **handoff**: エージェント間のハンドオフ発生 - **error**: 処理中に発生したエラー -詳細は [`RealtimeSessionEvent`](agents.realtime.events.RealtimeSessionEvent) を参照してください。 +詳細は [`RealtimeSessionEvent`][agents.realtime.events.RealtimeSessionEvent] を参照してください。 ## ガードレール -Realtime エージェントでは出力ガードレールのみサポートされます。パフォーマンス低下を防ぐため、ガードレールはデバウンスされ、(1 文字ごとではなく)定期的に実行されます。デフォルトのデバウンス長は 100 文字ですが、変更可能です。 +Realtime エージェントでは出力ガードレールのみサポートされます。パフォーマンス維持のため、ガードレールはデバウンスされて定期的に(すべての単語ではなく)評価されます。デフォルトのデバウンス長は 100 文字ですが、変更可能です。 -ガードレールが発火すると `guardrail_tripped` イベントが生成され、エージェントの現在の応答が中断されることがあります。テキストエージェントと違い、Realtime エージェントではガードレール発火時に Exception は発生しません。 +ガードレールが発火すると `guardrail_tripped` イベントが生成され、エージェントの現在の応答が中断される場合があります。リアルタイム性能と安全性を両立させるための挙動です。テキストエージェントと異なり、Realtime エージェントではガードレール発火時に Exception は送出されません。 -## 音声処理 +## オーディオ処理 -[`session.send_audio(audio_bytes)`](agents.realtime.session.RealtimeSession.send_audio) で音声を、[`session.send_message()`](agents.realtime.session.RealtimeSession.send_message) でテキストを送信できます。 +[`session.send_audio(audio_bytes)`][agents.realtime.session.RealtimeSession.send_audio] で音声を、[`session.send_message()`][agents.realtime.session.RealtimeSession.send_message] でテキストをセッションに送信できます。 -音声出力を扱う際は `audio` イベントを受信し、任意の音声ライブラリで再生してください。ユーザーが割り込んだ場合は `audio_interrupted` イベントを検知して、即座に再生を停止し、キューにある音声をクリアする必要があります。 +音声出力を再生するには、`audio` イベントを監視して取得したデータをお好みのオーディオライブラリで再生してください。ユーザーが割り込んだ際には `audio_interrupted` イベントを受信して即座に再生を停止し、キューに溜まった音声をクリアする必要があります。 -## 直接モデルアクセス +## 直接モデルへアクセス -基盤モデルにアクセスして、カスタムリスナーを追加したり高度な操作を行ったりできます。 +より低レベルの制御やカスタムリスナー追加など、高度な用途では基盤モデルへ直接アクセスできます。 ```python # Add a custom listener to the model session.model.add_listener(my_custom_listener) ``` -これにより、低レベルで接続を制御したい高度なユースケース向けに [`RealtimeModel`](agents.realtime.model.RealtimeModel) インターフェースへ直接アクセスできます。 +これにより、[`RealtimeModel`][agents.realtime.model.RealtimeModel] インターフェースを直接操作できます。 -## コード例 +## 例 -完全な動作例は、[examples/realtime ディレクトリ](https://github.com/openai/openai-agents-python/tree/main/examples/realtime) をご覧ください。UI あり・なしのデモを含みます。 \ 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 7146c4020..cad94d19c 100644 --- a/docs/ja/realtime/quickstart.md +++ b/docs/ja/realtime/quickstart.md @@ -4,35 +4,35 @@ search: --- # クイックスタート -Realtime エージェントを使用すると、OpenAI の Realtime API を介して AI エージェントと音声で対話できます。本ガイドでは、最初の Realtime 音声エージェントを作成する方法を説明します。 +Realtime エージェントを使用すると、OpenAI の Realtime API を介して AI エージェントとの音声会話が可能になります。本ガイドでは、初めてのリアルタイム音声エージェントの作成手順を説明します。 -!!! warning "ベータ機能" -Realtime エージェントは現在ベータ版です。今後の改良に伴い、破壊的変更が発生する可能性があります。 +!!! warning "Beta feature" +Realtime エージェントはベータ版です。実装を改善する過程で破壊的変更が発生する可能性があります。 ## 前提条件 -- 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 ``` -## 最初の Realtime エージェントの作成 +## 最初のリアルタイム エージェントの作成 -### 1. 必要なコンポーネントをインポート +### 1. 必要なコンポーネントのインポート ```python import asyncio from agents.realtime import RealtimeAgent, RealtimeRunner ``` -### 2. Realtime エージェントを作成 +### 2. リアルタイム エージェントの作成 ```python agent = RealtimeAgent( @@ -41,7 +41,7 @@ agent = RealtimeAgent( ) ``` -### 3. Runner を設定 +### 3. Runner の設定 ```python runner = RealtimeRunner( @@ -56,7 +56,7 @@ runner = RealtimeRunner( ) ``` -### 4. セッションを開始 +### 4. セッションの開始 ```python async def main(): @@ -79,9 +79,9 @@ async def main(): asyncio.run(main()) ``` -## 完全な例 +## 完全なコード例 -以下に動作する完全な例を示します: +以下は動作する完全なコード例です: ```python import asyncio @@ -139,40 +139,40 @@ if __name__ == "__main__": ### モデル設定 -- `model_name`: 利用可能な Realtime モデルから選択します (例: `gpt-4o-realtime-preview`) -- `voice`: 音声を選択します (`alloy`, `echo`, `fable`, `onyx`, `nova`, `shimmer`) -- `modalities`: テキストおよび/または音声を有効にします (`["text", "audio"]`) +- `model_name`: 利用可能なリアルタイムモデルから選択します(例: `gpt-4o-realtime-preview`) +- `voice`: 音声を選択します (`alloy`, `echo`, `fable`, `onyx`, `nova`, `shimmer`) +- `modalities`: テキストおよび/またはオーディオを有効化します (`["text", "audio"]`) ### オーディオ設定 -- `input_audio_format`: 入力音声のフォーマット (`pcm16`, `g711_ulaw`, `g711_alaw`) -- `output_audio_format`: 出力音声のフォーマット -- `input_audio_transcription`: 文字起こしの構成 +- `input_audio_format`: 入力オーディオの形式 (`pcm16`, `g711_ulaw`, `g711_alaw`) +- `output_audio_format`: 出力オーディオの形式 +- `input_audio_transcription`: 文字起こしの設定 ### ターン検出 -- `type`: 検出方法 (`server_vad`, `semantic_vad`) -- `threshold`: 音声アクティビティのしきい値 (0.0–1.0) -- `silence_duration_ms`: ターン終了を検出するための無音時間 -- `prefix_padding_ms`: 発話前の音声パディング +- `type`: 検出方法 (`server_vad`, `semantic_vad`) +- `threshold`: 音声アクティビティしきい値 (0.0-1.0) +- `silence_duration_ms`: ターン終了を検出する無音時間 +- `prefix_padding_ms`: 発話前のオーディオパディング ## 次のステップ -- [Realtime エージェントについて詳しく学ぶ](guide.md) -- [examples/realtime](https://github.com/openai/openai-agents-python/tree/main/examples/realtime) フォルダーにある動作する code examples をご覧ください -- エージェントに tools を追加する -- エージェント間の handoffs を実装する -- 安全のための guardrails を設定する +- [Realtime エージェントについてさらに学ぶ](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 ca1b1bab7..47f3b5613 100644 --- a/docs/ja/release.md +++ b/docs/ja/release.md @@ -2,31 +2,31 @@ search: exclude: true --- -# リリースプロセス/変更ログ +# リリースプロセス/変更履歴 -本プロジェクトでは、`0.Y.Z` 形式を用いた、やや変更されたセマンティック バージョニングを採用しています。先頭の `0` は SDK が急速に進化中であることを示します。各コンポーネントの増分ルールは次のとおりです。 +プロジェクトでは、 `0.Y.Z` 形式を用いたセマンティックバージョニングのやや変更されたバージョンを採用しています。先頭の `0` は SDK がまだ急速に進化していることを示します。各コンポーネントの増分規則は以下のとおりです。 -## マイナー (`Y`) バージョン +## マイナー ( `Y` ) バージョン -ベータでない公開インターフェースに **破壊的変更** が入る場合、マイナー バージョン `Y` を増やします。たとえば、`0.0.x` から `0.1.x` への更新に破壊的変更が含まれる可能性があります。 +ベータでない公開インターフェースに **互換性を壊す変更 (breaking changes)** が入る場合、マイナーバージョン `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` の 2 つの新しいパラメーターが追加されました。`MCPServer` をサブクラス化しているクラスでは、これらのパラメーターを追加する必要があります。 \ No newline at end of file +このバージョンでは、[`MCPServer.list_tools()`][agents.mcp.server.MCPServer] に新しいパラメーター `run_context` と `agent` が追加されました。`MCPServer` を継承するクラスでは、これらのパラメーターを追加する必要があります。 \ No newline at end of file diff --git a/docs/ja/repl.md b/docs/ja/repl.md index cf88e6d08..b72953e49 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 d80dff6b6..5870ac833 100644 --- a/docs/ja/results.md +++ b/docs/ja/results.md @@ -2,55 +2,55 @@ search: exclude: true --- -# 結果 +# 実行結果 -`Runner.run` メソッドを呼び出すと、戻り値は次のいずれかになります: +`Runner.run` メソッドを呼び出すと、返される値は次のいずれかです。 -- `run` または `run_sync` を呼び出した場合は [`RunResult`][agents.result.RunResult] -- `run_streamed` を呼び出した場合は [`RunResultStreaming`][agents.result.RunResultStreaming] +- [`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` -- `output_type` が定義されている場合は `last_agent.output_type` 型のオブジェクト +- 最後の エージェント に `output_type` が定義されていない場合は `str` +- エージェント に `output_type` が定義されている場合は `last_agent.output_type` 型のオブジェクト !!! note - `final_output` の型は `Any` です。ハンドオフが発生する可能性があるため、静的型付けはできません。ハンドオフが起こると、どのエージェントが最後になるかは不定であり、可能な出力型の集合を静的に特定できないからです。 + `final_output` の型は `Any` です。ハンドオフが発生する可能性があるため、静的型付けはできません。ハンドオフが起こると、どの エージェント が最後になるか分からないため、可能な出力型の集合を静的に特定できないのです。 -## 次ターンの入力 +## 次のターン用入力 -[`result.to_input_list()`][agents.result.RunResultBase.to_input_list] を使用すると、渡した元の入力とエージェント実行中に生成されたアイテムを結合した input list に変換できます。これにより、あるエージェント実行の出力を別の実行に渡したり、ループで実行して毎回新しいユーザー入力を追加したりするときに便利です。 +[`result.to_input_list()`][agents.result.RunResultBase.to_input_list] を使うと、実行時に生成されたアイテムを元の入力と連結した入力リストに変換できます。これにより、ある エージェント の実行結果をそのまま別の実行に渡したり、ループで実行して毎回新しい ユーザー 入力を追加したりするのが簡単になります。 -## 最後のエージェント +## 最後に実行されたエージェント -[`last_agent`][agents.result.RunResultBase.last_agent] プロパティには、最後に実行されたエージェントが格納されています。アプリケーションによっては、これは次回ユーザーが入力する際に役立つことがよくあります。たとえば、一次受付のエージェントが言語別のエージェントへハンドオフする場合、最後のエージェントを保存しておき、次にユーザーからメッセージが来た際に再利用できます。 +[`last_agent`][agents.result.RunResultBase.last_agent] プロパティには、最後に実行された エージェント が入っています。アプリケーションによっては、これは次回 ユーザー が入力を送ってきたときに便利です。たとえば、一次トリアージを行い言語別 エージェント へハンドオフするフロントライン エージェント がいる場合、最後の エージェント を保存しておけば、次回のメッセージで再利用できます。 -## 新しいアイテム +## 新しく生成されたアイテム -[`new_items`][agents.result.RunResultBase.new_items] プロパティには、実行中に生成された新しいアイテムが含まれます。アイテムは [`RunItem`][agents.items.RunItem] です。`RunItem` は LLM が生成した raw アイテムをラップします。 +[`new_items`][agents.result.RunResultBase.new_items] プロパティには、実行中に生成された新しいアイテムが入っています。アイテムは [`RunItem`][agents.items.RunItem] でラップされており、その中に LLM が生成した raw アイテムが含まれます。 -- [`MessageOutputItem`][agents.items.MessageOutputItem] は LLM からのメッセージを示します。raw アイテムは生成されたメッセージです。 +- [`MessageOutputItem`][agents.items.MessageOutputItem] は LLM からのメッセージを表します。raw アイテムは生成されたメッセージです。 - [`HandoffCallItem`][agents.items.HandoffCallItem] は LLM がハンドオフツールを呼び出したことを示します。raw アイテムは LLM からのツール呼び出しアイテムです。 -- [`HandoffOutputItem`][agents.items.HandoffOutputItem] はハンドオフが発生したことを示します。raw アイテムはハンドオフツール呼び出しへのツールレスポンスです。アイテムからソース / ターゲットエージェントも取得できます。 +- [`HandoffOutputItem`][agents.items.HandoffOutputItem] はハンドオフが発生したことを示します。raw アイテムはハンドオフツール呼び出しへのツール応答です。また、アイテムからソース / ターゲット エージェント にもアクセスできます。 - [`ToolCallItem`][agents.items.ToolCallItem] は LLM がツールを呼び出したことを示します。 -- [`ToolCallOutputItem`][agents.items.ToolCallOutputItem] はツールが呼び出されたことを示します。raw アイテムはツールレスポンスです。アイテムからツール出力も取得できます。 +- [`ToolCallOutputItem`][agents.items.ToolCallOutputItem] はツールが呼び出されたことを示します。raw アイテムはツール応答です。また、アイテムからツール出力にもアクセスできます。 - [`ReasoningItem`][agents.items.ReasoningItem] は LLM からの推論アイテムを示します。raw アイテムは生成された推論です。 ## その他の情報 ### ガードレール結果 -[`input_guardrail_results`][agents.result.RunResultBase.input_guardrail_results] と [`output_guardrail_results`][agents.result.RunResultBase.output_guardrail_results] プロパティには、ガードレールの結果が含まれます (存在する場合)。ガードレール結果には記録または保存したい有用な情報が含まれることがあるため、ここから取得できるようにしています。 +[`input_guardrail_results`][agents.result.RunResultBase.input_guardrail_results] と [`output_guardrail_results`][agents.result.RunResultBase.output_guardrail_results] プロパティには、ガードレールがあればその結果が格納されます。ガードレール結果にはログ出力や保存に役立つ情報が含まれることがあるため、利用できるようにしています。 -### raw レスポンス +### raw 応答 -[`raw_responses`][agents.result.RunResultBase.raw_responses] プロパティには、LLM が生成した [`ModelResponse`][agents.items.ModelResponse] が格納されています。 +[`raw_responses`][agents.result.RunResultBase.raw_responses] プロパティには、LLM が生成した [`ModelResponse`][agents.items.ModelResponse] が入っています。 ### 元の入力 -[`input`][agents.result.RunResultBase.input] プロパティには、`run` メソッドに渡した元の入力が格納されています。ほとんどの場合は不要ですが、必要に応じて参照できます。 \ No newline at end of file +[`input`][agents.result.RunResultBase.input] プロパティには、`run` メソッドに渡した元の入力が入っています。通常は必要ありませんが、必要に応じて利用できます。 \ No newline at end of file diff --git a/docs/ja/running_agents.md b/docs/ja/running_agents.md index bdfc8aeae..08ef6d888 100644 --- a/docs/ja/running_agents.md +++ b/docs/ja/running_agents.md @@ -4,11 +4,11 @@ search: --- # エージェントの実行 -エージェントは [`Runner`][agents.run.Runner] クラスを通じて実行できます。方法は 3 つあります: +エージェントは [`Runner`][agents.run.Runner] クラスを介して実行できます。方法は 3 つあります: -1. [`Runner.run()`][agents.run.Runner.run] — 非同期で実行され、[`RunResult`][agents.result.RunResult] を返します。 -2. [`Runner.run_sync()`][agents.run.Runner.run_sync] — 同期メソッドで、内部的には `.run()` を呼び出します。 -3. [`Runner.run_streamed()`][agents.run.Runner.run_streamed] — 非同期で実行され、[`RunResultStreaming`][agents.result.RunResultStreaming] を返します。LLM をストリーミングモードで呼び出し、受信したイベントを逐次ストリームします。 +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 をストリーミングモードで呼び出し、受信したイベントをそのままストリームします。 ```python from agents import Agent, Runner @@ -20,63 +20,64 @@ async def main(): print(result.final_output) # Code within the code, # Functions calling themselves, - # Infinite loop's dance. + # Infinite loop's dance ``` -詳細は [結果ガイド](results.md) をご覧ください。 +詳細は [結果ガイド](results.md) を参照してください。 ## エージェントループ -`Runner` の run メソッドを使用するときは、開始エージェントと入力を渡します。入力は文字列(ユーザーメッセージと見なされます)または入力アイテムのリスト(OpenAI Responses API のアイテム)を指定できます。 +`Runner` で `run` メソッドを使用すると、開始エージェントと入力を渡します。入力は文字列 (ユーザー メッセージと見なされます) か、OpenAI Responses API のアイテム リストのいずれかです。 -Runner は次のループを実行します: +`Runner` は次のループを実行します: -1. 現在のエージェントと入力を使って LLM を呼び出します。 +1. 現在のエージェントに対して、現在の入力を用いて LLM を呼び出します。 2. LLM が出力を生成します。 - 1. `final_output` を返した場合はループを終了し、結果を返します。 - 2. ハンドオフがある場合は現在のエージェントと入力を更新し、ループを再実行します。 - 3. ツール呼び出しがある場合はツールを実行し、その結果を追加してループを再実行します。 -3. 渡された `max_turns` を超えた場合は [`MaxTurnsExceeded`][agents.exceptions.MaxTurnsExceeded] 例外を送出します。 + 1. LLM が `final_output` を返した場合、ループを終了し結果を返します。 + 2. LLM がハンドオフを行った場合、現在のエージェントと入力を更新し、ループを再実行します。 + 3. LLM がツール呼び出しを生成した場合、それらを実行し結果を追加してから、ループを再実行します。 +3. 渡された `max_turns` を超えた場合、 [`MaxTurnsExceeded`][agents.exceptions.MaxTurnsExceeded] 例外を送出します。 !!! note - LLM の出力が「最終出力」と見なされる条件は、求められた型のテキスト出力があり、かつツール呼び出しが存在しないことです。 + LLM の出力が「最終出力」と見なされるルールは、望ましい型のテキスト出力を生成し、ツール呼び出しが 1 つもないことです。 ## ストリーミング -ストリーミングを利用すると、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]: 各 Agent の `model` 設定に関係なく、グローバルで使用する LLM モデルを指定します。 -- [`model_provider`][agents.run.RunConfig.model_provider]: モデル名を解決するモデルプロバイダー。デフォルトは OpenAI です。 -- [`model_settings`][agents.run.RunConfig.model_settings]: エージェント固有の設定を上書きします。たとえばグローバル `temperature` や `top_p` を設定できます。 -- [`input_guardrails`][agents.run.RunConfig.input_guardrails], [`output_guardrails`][agents.run.RunConfig.output_guardrails]: すべての実行に適用する入力/出力ガードレールのリスト。 -- [`handoff_input_filter`][agents.run.RunConfig.handoff_input_filter]: ハンドオフに既定のフィルターがない場合に適用されるグローバル入力フィルター。新しいエージェントへ送る入力を編集できます。詳細は [`Handoff.input_filter`][agents.handoffs.Handoff.input_filter] を参照してください。 -- [`tracing_disabled`][agents.run.RunConfig.tracing_disabled]: 実行全体で [トレーシング](tracing.md) を無効にします。 -- [`trace_include_sensitive_data`][agents.run.RunConfig.trace_include_sensitive_data]: トレースに LLM やツール呼び出しの入出力など機微なデータを含めるかを設定します。 -- [`workflow_name`][agents.run.RunConfig.workflow_name], [`trace_id`][agents.run.RunConfig.trace_id], [`group_id`][agents.run.RunConfig.group_id]: トレーシング用のワークフロー名、トレース ID、トレースグループ ID を設定します。少なくとも `workflow_name` を設定することを推奨します。`group_id` は複数の実行間でトレースを関連付けるための任意フィールドです。 +- [`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]: すべてのトレースに含めるメタデータ。 -## 会話/チャットスレッド +## 会話 / チャットスレッド -いずれかの run メソッドを呼び出すと、1 つ以上のエージェント(=1 つ以上の LLM 呼び出し)が実行されますが、論理的にはチャット会話の 1 ターンとして扱われます。例: +いずれかの `run` メソッドを呼び出すと、1 つ以上のエージェント (つまり 1 回以上の LLM 呼び出し) が実行されますが、チャット会話の論理的には 1 ターンとして扱われます。例: -1. ユーザーターン: ユーザーがテキストを入力 -2. Runner 実行: 最初のエージェントが LLM を呼び出し、ツールを実行し、2 つ目のエージェントへハンドオフ。2 つ目のエージェントがさらにツールを実行し、最終的な出力を生成。 +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(): agent = Agent(name="Assistant", instructions="Reply very concisely.") + thread_id = "thread_123" # Example thread ID with trace(workflow_name="Conversation", group_id=thread_id): # First turn result = await Runner.run(agent, "What city is the Golden Gate Bridge in?") @@ -90,9 +91,9 @@ async def main(): # California ``` -### Sessions による自動会話管理 +### Sessions を用いた自動会話管理 -より簡単な方法として、[Sessions](sessions.md) を使用すれば `.to_input_list()` を手動で呼び出さなくても会話履歴を自動で扱えます: +より簡単な方法として、 [Sessions](sessions.md) を使えば `.to_input_list()` を手動で呼び出さずに会話履歴を自動で扱えます: ```python from agents import Agent, Runner, SQLiteSession @@ -115,20 +116,20 @@ async def main(): # California ``` -Sessions は自動で以下を行います: +Sessions は自動的に以下を行います: - 各実行前に会話履歴を取得 - 各実行後に新しいメッセージを保存 -- 異なる session ID ごとに個別の会話を維持 +- 異なるセッション ID ごとに会話を分離して管理 -詳細は [Sessions のドキュメント](sessions.md) を参照してください。 +詳細は [Sessions ドキュメント](sessions.md) を参照してください。 ## 例外 -SDK は特定の場合に例外を送出します。完全な一覧は [`agents.exceptions`][] にあります。概要は次のとおりです: +SDK は特定の状況で例外を送出します。完全な一覧は [`agents.exceptions`][] にあります。概要は次のとおりです: -- [`AgentsException`][agents.exceptions.AgentsException] — SDK が送出するすべての例外の基底クラス。 +- [`AgentsException`][agents.exceptions.AgentsException] — SDK で送出されるすべての例外の基底クラス。 - [`MaxTurnsExceeded`][agents.exceptions.MaxTurnsExceeded] — 実行が `max_turns` を超えたときに送出。 -- [`ModelBehaviorError`][agents.exceptions.ModelBehaviorError] — 不正な出力(例: 不正な JSON、存在しないツールの使用など)をモデルが生成したときに送出。 -- [`UserError`][agents.exceptions.UserError] — SDK を使用するコードで開発者が誤った使い方をしたときに送出。 -- [`InputGuardrailTripwireTriggered`][agents.exceptions.InputGuardrailTripwireTriggered], [`OutputGuardrailTripwireTriggered`][agents.exceptions.OutputGuardrailTripwireTriggered] — [ガードレール](guardrails.md) が作動したときに送出。 \ No newline at end of file +- [`ModelBehaviorError`][agents.exceptions.ModelBehaviorError] — モデルが不正な出力 (例: JSON の不備や存在しないツールの使用) を返したときに送出。 +- [`UserError`][agents.exceptions.UserError] — SDK を使用する開発者側の誤りがあったときに送出。 +- [`InputGuardrailTripwireTriggered`][agents.exceptions.InputGuardrailTripwireTriggered], [`OutputGuardrailTripwireTriggered`][agents.exceptions.OutputGuardrailTripwireTriggered] — [ガードレール](guardrails.md) がトリガーされたときに送出。 \ No newline at end of file diff --git a/docs/ja/sessions.md b/docs/ja/sessions.md index 8fae9068c..3529900ce 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()` を手動で扱う必要がありません。 -Sessions は特定のセッションに対して会話履歴を保存し、明示的な手動メモリー管理なしにコンテキストを維持できるようにします。これは、エージェントが過去の対話を記憶してほしいチャットアプリケーションやマルチターンの会話を構築する際に特に便利です。 +Sessions は特定のセッションの会話履歴を保存し、明示的なメモリ管理を行わなくてもエージェントがコンテキストを維持できるようにします。これは、エージェントに過去のやり取りを覚えさせたいチャットアプリケーションやマルチターンの会話を構築する際に特に便利です。 ## クイックスタート @@ -49,19 +49,19 @@ print(result.final_output) # "Approximately 39 million" ## 仕組み -セッションメモリーを有効にすると、次のように動作します。 +セッションメモリを有効にすると、次の処理が行われます。 -1. **各実行の前**: Runner は自動的にそのセッションの会話履歴を取得し、入力アイテムの先頭に追加します。 -2. **各実行の後**: 実行中に生成された新しいアイテム (ユーザー入力、アシスタントの応答、ツール呼び出しなど) がすべて自動的にセッションに保存されます。 -3. **コンテキスト保持**: 同じセッションでの次回以降の実行には完全な会話履歴が含まれるため、エージェントはコンテキストを維持できます。 +1. **各実行前**: Runner は自動的にそのセッションの会話履歴を取得し、入力アイテムの先頭に追加します。 +2. **各実行後**: 実行中に生成された新しいアイテム(ユーザー入力、アシスタントの応答、ツール呼び出しなど)がすべて自動的にセッションに保存されます。 +3. **コンテキストの保持**: 同じセッションでの後続の実行では、完全な会話履歴が含まれるため、エージェントがコンテキストを維持できます。 これにより、`.to_input_list()` を手動で呼び出したり、実行間で会話状態を管理したりする必要がなくなります。 -## メモリー操作 +## メモリ操作 ### 基本操作 -Sessions では会話履歴を管理するために次の操作が利用できます。 +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 @@ -117,16 +117,16 @@ result = await Runner.run( print(f"Agent: {result.final_output}") ``` -## メモリーオプション +## メモリオプション -### メモリーなし (デフォルト) +### メモリなし(デフォルト) ```python # Default behavior - no session memory result = await Runner.run(agent, "Hello") ``` -### SQLite メモリー +### SQLite メモリ ```python from agents import SQLiteSession @@ -168,9 +168,9 @@ result2 = await Runner.run( ) ``` -## カスタムメモリー実装 +## カスタムメモリ実装 -独自のセッションメモリーを実装する場合は、[`Session`][agents.memory.session.Session] プロトコルに従うクラスを作成します。 +[`Session`][agents.memory.session.Session] プロトコルに従うクラスを作成することで、独自のセッションメモリを実装できます。 ````python from agents.memory import Session @@ -230,15 +230,15 @@ Use meaningful session IDs that help you organize conversations: ### Session management ```python -# 会話をリセットしたいときにセッションをクリア +# Clear a session when conversation should start fresh await session.clear_session() -# 異なるエージェントが同じセッションを共有可能 +# Different agents can share the same session support_agent = Agent(name="Support") billing_agent = Agent(name="Billing") session = SQLiteSession("user_123") -# 両方のエージェントが同じ会話履歴を参照 +# Both agents will see the same conversation history result1 = await Runner.run( support_agent, "Help me with my account", @@ -261,19 +261,19 @@ from agents import Agent, Runner, SQLiteSession async def main(): - # エージェントを作成 + # Create an agent agent = Agent( name="Assistant", instructions="Reply very concisely.", ) - # 実行間で保持されるセッションインスタンスを作成 + # Create a session instance that will persist across runs session = SQLiteSession("conversation_123", "conversation_history.db") print("=== Sessions Example ===") print("The agent will remember previous messages automatically.\n") - # 1 ターン目 + # First turn print("First turn:") print("User: What city is the Golden Gate Bridge in?") result = await Runner.run( @@ -284,7 +284,7 @@ async def main(): print(f"Assistant: {result.final_output}") print() - # 2 ターン目 ― エージェントは前回の会話を記憶 + # Second turn - the agent will remember the previous conversation print("Second turn:") print("User: What state is it in?") result = await Runner.run( @@ -295,7 +295,7 @@ async def main(): print(f"Assistant: {result.final_output}") print() - # 3 ターン目 ― 会話を継続 + # Third turn - continuing the conversation print("Third turn:") print("User: What's the population of that state?") result = await Runner.run( diff --git a/docs/ja/streaming.md b/docs/ja/streaming.md index 1570b8076..0a3b6e735 100644 --- a/docs/ja/streaming.md +++ b/docs/ja/streaming.md @@ -4,15 +4,15 @@ search: --- # ストリーミング -ストリーミングを使用すると、エージェントの実行が進行するにつれて更新を購読できます。これは、エンドユーザーに進捗状況や部分的なレスポンスを表示する際に役立ちます。 +ストリーミング を利用すると、 エージェント の実行中に発生する更新を購読できます。これにより、エンドユーザーへ進捗状況や部分的な応答を表示するのに役立ちます。 -ストリーミングを行うには、`Runner.run_streamed()` を呼び出します。これにより `RunResultStreaming` が返されます。`result.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 イベント +## raw 応答イベント -`RawResponsesStreamEvent` は、LLM から直接渡される raw なイベントです。OpenAI Responses API フォーマットで提供されるため、各イベントには `response.created` や `response.output_text.delta` などの type とデータが含まれます。生成されたレスポンスメッセージをすぐにユーザーへストリーミングしたい場合に便利です。 +[`RawResponsesStreamEvent`][agents.stream_events.RawResponsesStreamEvent] は、 LLM から直接渡される raw イベントです。これらは OpenAI Responses API 形式であり、各イベントには `response.created`、`response.output_text.delta` などの type と data が含まれます。生成された直後の応答メッセージを ユーザー にストリーム配信したい場合に便利です。 -例えば、これを実行すると、生成されたテキストを LLM がトークンごとに出力します。 +例えば、次のコードは LLM が生成するテキストをトークンごとに出力します。 ```python import asyncio @@ -35,11 +35,11 @@ if __name__ == "__main__": asyncio.run(main()) ``` -## Run item イベントと agent イベント +## Run item イベントと エージェント イベント -`RunItemStreamEvent` は、より高レベルなイベントで、アイテムが完全に生成されたタイミングを通知します。これにより、トークン単位ではなく「メッセージが生成された」「ツールが実行された」といったレベルで進捗をユーザーへ伝えられます。同様に、`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 d7d7146e5..72d4f42b9 100644 --- a/docs/ja/tools.md +++ b/docs/ja/tools.md @@ -4,23 +4,23 @@ search: --- # ツール -ツールはエージェントがデータ取得、コード実行、外部 API 呼び出し、さらにはコンピュータ操作などのアクションを実行できるようにします。Agents SDK には 3 種類のツールがあります: +エージェントはツールを利用することで、データの取得、コードの実行、外部 API の呼び出し、さらにはコンピュータ操作まで多彩なアクションを実行できます。Agents SDK には次の 3 つのツールクラスがあります。 -- Hosted ツール: LLM サーバー上で AI モデルと並行して実行されるツールです。OpenAI は retrieval、Web 検索、コンピュータ操作を Hosted ツールとして提供しています。 -- Function calling: 任意の Python 関数をツールとして利用できます。 -- Agents as tools: エージェントをツールとして扱い、ハンドオフせずに他のエージェントを呼び出せるようにします。 +- Hosted ツール: これらは LLM サーバー上で AI モデルと並行して動作します。OpenAI は retrieval、Web 検索、コンピュータ操作 を Hosted ツールとして提供しています。 +- Function calling: 任意の Python 関数をツールとして利用できます。 +- Agents as tools: エージェント自体をツール化することで、ハンドオフすることなくエージェント同士を呼び出せます。 ## Hosted ツール -[`OpenAIResponsesModel`][agents.models.openai_responses.OpenAIResponsesModel] を使用すると、OpenAI がいくつかの組み込みツールを提供します: +OpenAI は [`OpenAIResponsesModel`][agents.models.openai_responses.OpenAIResponsesModel] を使用する際に、いくつかの組み込みツールを提供しています。 -- [`WebSearchTool`][agents.tool.WebSearchTool] はエージェントによる Web 検索を可能にします。 -- [`FileSearchTool`][agents.tool.FileSearchTool] は OpenAI ベクトルストアから情報を取得します。 -- [`ComputerTool`][agents.tool.ComputerTool] はコンピュータ操作タスクを自動化します。 -- [`CodeInterpreterTool`][agents.tool.CodeInterpreterTool] はサンドボックス環境でコードを実行します。 -- [`HostedMCPTool`][agents.tool.HostedMCPTool] はリモート MCP サーバーのツールをモデルに公開します。 -- [`ImageGenerationTool`][agents.tool.ImageGenerationTool] はプロンプトから画像を生成します。 -- [`LocalShellTool`][agents.tool.LocalShellTool] はローカルマシンでシェルコマンドを実行します。 +- [`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] はローカルマシンでシェルコマンドを実行します。 ```python from agents import Agent, FileSearchTool, Runner, WebSearchTool @@ -41,16 +41,16 @@ async def main(): print(result.final_output) ``` -## Function ツール +## Function tools -任意の 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 @@ -177,14 +177,14 @@ for tool in agent.tools: } ``` -### カスタム Function ツール +### カスタム function ツール -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 文字列の引数を受け取り、ツール出力の文字列を返す async 関数 +- `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. `griffe` で docstring を解析します。サポートする形式は `google`、`sphinx`、`numpy` です。自動判定はベストエフォートのため、`function_tool` 呼び出し時に明示設定もできます。`use_docstring_info` を `False` にすると解析を無効化できます。 スキーマ抽出のコードは [`agents.function_schema`][] にあります。 -## エージェントをツールとして使用 +## Agents as tools -一部のワークフローでは、制御を委譲せずに中央のエージェントが専門エージェントのネットワークをオーケストレーションしたい場合があります。その際はエージェントをツールとしてモデル化できます。 +ワークフローによっては、複数の専門エージェントを中央のエージェントがオーケストレーションする方が便利な場合があります。その際、エージェントをツールとして扱うことでハンドオフせずに実現できます。 ```python from agents import Agent, Runner @@ -267,9 +267,9 @@ async def main(): print(result.final_output) ``` -### ツールエージェントのカスタマイズ +### ツール化エージェントのカスタマイズ -`agent.as_tool` はエージェントを簡単にツール化するための便利メソッドですが、すべての設定をサポートしているわけではありません (たとえば `max_turns` は設定できません)。高度なユースケースでは、ツール実装内で `Runner.run` を直接使用してください: +`agent.as_tool` はエージェントを手軽にツール化するためのヘルパーです。ただし `max_turns` などすべての設定をサポートしているわけではありません。高度な構成が必要な場合は、ツール実装内で `Runner.run` を直接呼び出してください。 ```python @function_tool @@ -288,15 +288,15 @@ async def run_my_agent() -> str: return str(result.final_output) ``` -### カスタム出力抽出 +### 出力のカスタム抽出 -場合によっては、ツールエージェントの出力を中央エージェントへ返す前に加工したいことがあります。たとえば以下のようなケースです: +ツール化したエージェントの出力を中央エージェントへ返す前に加工したいケースがあります。たとえば以下のような場合です。 -- サブエージェントのチャット履歴から特定の情報 (例: JSON ペイロード) を抽出する -- エージェントの最終回答を変換または再フォーマットする (例: Markdown をプレーンテキストや CSV に変換) -- 出力を検証し、不足または不正な場合にフォールバック値を提供する +- チャット履歴から特定の情報 (例: JSON ペイロード) のみを抽出したい。 +- Markdown をプレーンテキストや CSV に変換するなど、最終回答のフォーマットを変更したい。 +- レスポンスが欠落・不正な場合に検証やフォールバック値を設定したい。 -そのような場合は `as_tool` メソッドに `custom_output_extractor` 引数を渡します: +`as_tool` メソッドの `custom_output_extractor` 引数に関数を渡すことで実現できます。 ```python async def extract_json_payload(run_result: RunResult) -> str: @@ -315,12 +315,12 @@ json_tool = data_agent.as_tool( ) ``` -## Function ツールでのエラー処理 +## function ツールでのエラー処理 -`@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 +`FunctionTool` オブジェクトを手動で作成する場合は、`on_invoke_tool` 内でエラーを処理する必要があります。 \ No newline at end of file diff --git a/docs/ja/tracing.md b/docs/ja/tracing.md index 3ef44165f..5e19f19a2 100644 --- a/docs/ja/tracing.md +++ b/docs/ja/tracing.md @@ -4,52 +4,52 @@ search: --- # トレーシング -Agents SDK には、エージェント実行中に発生するイベント ( LLM 生成、ツール呼び出し、ハンドオフ、ガードレール、さらにはカスタムイベント) を網羅的に記録する組み込みのトレーシング機能が含まれています。 [Traces dashboard](https://platform.openai.com/traces) を使用すると、開発時および本番環境でワークフローをデバッグ、可視化、監視できます。 +Agents SDK にはトレーシング機能が組み込まれており、エージェント実行中に発生する LLM 生成、ツール呼び出し、ハンドオフ、ガードレール、カスタムイベントなどの詳細なイベント記録を収集します。[Traces ダッシュボード](https://platform.openai.com/traces) を使用すると、開発中や本番環境でワークフローをデバッグ、可視化、監視できます。 !!!note - トレーシングはデフォルトで有効です。無効化する方法は 2 つあります。 + トレーシングはデフォルトで有効になっています。無効化する方法は 2 つあります。 - 1. 環境変数 `OPENAI_AGENTS_DISABLE_TRACING=1` を設定して、グローバルにトレーシングを無効化する - 2. 単一の実行に対しては、[`agents.run.RunConfig.tracing_disabled`][] を `True` に設定する + 1. 環境変数 `OPENAI_AGENTS_DISABLE_TRACING=1` を設定してグローバルに無効化する + 2. 単一の実行で無効化する場合は [`agents.run.RunConfig.tracing_disabled`][] を `True` に設定する -***OpenAI の API を使用し Zero Data Retention ( ZDR ) ポリシーの下で運用している組織では、トレーシングは利用できません。*** +***OpenAI の API を Zero Data Retention (ZDR) ポリシーで利用している組織では、トレーシングは利用できません。*** ## トレースとスパン -- **トレース** は 1 つのワークフローにおけるエンドツーエンドの操作を表します。複数のスパンで構成され、以下のプロパティを持ちます。 - - `workflow_name` : 論理的なワークフローまたはアプリ名。例: 「コード生成」や「カスタマー サービス」 - - `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 生成情報など +- **トレース** は 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 生成情報など。 ## デフォルトのトレーシング -デフォルトでは、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()` でラップ +- 関連する音声スパンは `speech_group_span()` の下にネストされることがあります -デフォルトのトレース名は「Agent trace」です。`trace` を使用する際にこの名前を設定することも、[`RunConfig`][agents.run.RunConfig] で名前やその他のプロパティを構成することもできます。 +デフォルトではトレース名は「Agent trace」です。`trace` を使用して名前を設定するか、[`RunConfig`][agents.run.RunConfig] で名前やその他のプロパティを設定できます。 -さらに、[カスタム トレース プロセッサ](#custom-tracing-processors) を設定して、トレースを別の送信先へプッシュする (置き換えまたは追加) ことも可能です。 +さらに、[カスタムトレースプロセッサ](#custom-tracing-processors) を設定して、トレースを別の送信先にプッシュすることもできます (置き換えまたは追加送信先として)。 ## 上位レベルのトレース -複数回の `run()` 呼び出しを 1 つのトレースにまとめたい場合があります。その場合、コード全体を `trace()` でラップしてください。 +複数回の `run()` 呼び出しを 1 つのトレースにまとめたい場合があります。これを行うには、コード全体を `trace()` でラップします。 ```python from agents import Agent, Runner, trace @@ -64,60 +64,60 @@ async def main(): print(f"Rating: {second_result.final_output}") ``` -1. `with trace()` で 2 回の `Runner.run` をラップしているため、それぞれの実行は個別にトレースを作成せず、全体トレースに含まれます。 +1. `Runner.run` への 2 回の呼び出しが `with trace()` 内にラップされているため、個々の実行は 2 つのトレースを作成せず、全体トレースの一部になります。 ## トレースの作成 -トレースは [`trace()`][agents.tracing.trace] 関数で作成できます。開始と終了が必要で、方法は 2 つあります。 +[`trace()`][agents.tracing.trace] 関数を使用してトレースを作成できます。トレースは開始と終了が必要です。方法は 2 つあります。 -1. **推奨**: コンテキストマネージャとして使用する ( 例: `with trace(...) as my_trace` ) 。これにより、トレースの開始と終了が自動で行われます。 -2. [`trace.start()`][agents.tracing.Trace.start] と [`trace.finish()`][agents.tracing.Trace.finish] を手動で呼び出す。 +1. **推奨**: コンテキストマネージャとして使用する (例: `with trace(...) as my_trace`)。これにより開始と終了が自動化されます。 +2. [`trace.start()`][agents.tracing.Trace.start] と [`trace.finish()`][agents.tracing.Trace.finish] を手動で呼び出すことも可能です。 -現在のトレースは Python の [`contextvar`](https://docs.python.org/3/library/contextvars.html) で管理されるため、並行処理に自動対応します。トレースを手動で開始/終了する場合は、`start()` / `finish()` に `mark_as_current` と `reset_current` を渡して現在のトレースを更新してください。 +現在のトレースは Python の [`contextvar`](https://docs.python.org/3/library/contextvars.html) で管理されます。これにより並行処理でも自動的に機能します。トレースを手動で開始/終了する場合は、`start()`/`finish()` に `mark_as_current` と `reset_current` を渡して現在のトレースを更新してください。 ## スパンの作成 -各種 [`*_span()`][agents.tracing.create] メソッドでスパンを作成できます。通常、スパンを手動で作成する必要はありませんが、カスタム情報を追跡するための [`custom_span()`][agents.tracing.custom_span] も用意されています。 +各種 [`*_span()`][agents.tracing.create] メソッドを使ってスパンを作成できます。通常は手動でスパンを作成する必要はありません。カスタムスパン情報を追跡するための [`custom_span()`][agents.tracing.custom_span] も用意されています。 -スパンは自動で現在のトレースに属し、最も近い現在のスパンの下にネストされます。この情報も Python の [`contextvar`](https://docs.python.org/3/library/contextvars.html) で管理されます。 +スパンは自動的に現在のトレースに含まれ、最も近い現在のスパンの下にネストされます。これも Python の [`contextvar`](https://docs.python.org/3/library/contextvars.html) で管理されます。 ## 機微なデータ -一部のスパンでは機微なデータを取得する可能性があります。 +一部のスパンは機微なデータを含む可能性があります。 -`generation_span()` は LLM 生成の入力/出力を、`function_span()` は関数呼び出しの入力/出力を保存します。これらに機微なデータが含まれる場合は、[`RunConfig.trace_include_sensitive_data`][agents.run.RunConfig.trace_include_sensitive_data] を使って取得を無効化できます。 +`generation_span()` は LLM 生成の入出力を、`function_span()` は関数呼び出しの入出力を保存します。これらに機微なデータが含まれる場合があるため、[`RunConfig.trace_include_sensitive_data`][agents.run.RunConfig.trace_include_sensitive_data] でデータの取得を無効化できます。 -同様に、オーディオ スパンには入力/出力オーディオの base64 エンコード PCM データがデフォルトで含まれます。これを無効にする場合は、[`VoicePipelineConfig.trace_include_sensitive_audio_data`][agents.voice.pipeline_config.VoicePipelineConfig.trace_include_sensitive_audio_data] を設定してください。 +同様に、オーディオスパンはデフォルトで入力・出力オーディオの base64 エンコード PCM データを含みます。[`VoicePipelineConfig.trace_include_sensitive_audio_data`][agents.voice.pipeline_config.VoicePipelineConfig.trace_include_sensitive_audio_data] を設定することで、このオーディオデータの取得を無効化できます。 -## カスタム トレース プロセッサ +## カスタムトレーシングプロセッサ -トレーシングの高レベル アーキテクチャは以下のとおりです。 +トレーシングの高レベルアーキテクチャは次のとおりです。 -- 初期化時にグローバルな [`TraceProvider`][agents.tracing.setup.TraceProvider] を生成し、トレースの作成を担当します。 -- `TraceProvider` は [`BatchTraceProcessor`][agents.tracing.processors.BatchTraceProcessor] を使用してトレース/スパンをバッチ送信し、[`BackendSpanExporter`][agents.tracing.processors.BackendSpanExporter] が OpenAI バックエンドへバッチでエクスポートします。 +- 初期化時にグローバルな [`TraceProvider`][agents.tracing.setup.TraceProvider] を作成し、トレースの生成を担当します。 +- `TraceProvider` を [`BatchTraceProcessor`][agents.tracing.processors.BatchTraceProcessor] で構成し、スパンとトレースをバッチで [`BackendSpanExporter`][agents.tracing.processors.BackendSpanExporter] に送信し、OpenAI バックエンドへエクスポートします。 -デフォルト設定を変更し、別のバックエンドへ送信したりエクスポータの動作を変更したりするには、以下の 2 つの方法があります。 +デフォルト設定をカスタマイズして別のバックエンドへ送信したり、エクスポーター動作を変更したりする場合は、次の 2 つの方法があります。 -1. [`add_trace_processor()`][agents.tracing.add_trace_processor] を使って **追加** のトレース プロセッサを登録し、トレース/スパンを同時に受け取って独自処理を行う ( OpenAI バックエンドへの送信に加えて利用可能 ) -2. [`set_trace_processors()`][agents.tracing.set_trace_processors] を使ってデフォルトのプロセッサを **置き換え** 自前のトレース プロセッサに差し替える ( OpenAI バックエンドへ送信したい場合は、その処理を行う `TracingProcessor` を含める必要あり ) +1. [`add_trace_processor()`][agents.tracing.add_trace_processor] で **追加の** トレースプロセッサを登録し、トレース/スパンを受け取って独自処理を行いつつ OpenAI バックエンドにも送信する +2. [`set_trace_processors()`][agents.tracing.set_trace_processors] でデフォルトプロセッサを **置き換え**、独自のプロセッサのみを使用する (OpenAI バックエンドへ送信したい場合は、その機能を持つ `TracingProcessor` を含める必要があります) -## 外部トレース プロセッサ一覧 +## 外部トレーシングプロセッサ一覧 -- [Weights & Biases](https://weave-docs.wandb.ai/guides/integrations/openai_agents) -- [Arize-Phoenix](https://docs.arize.com/phoenix/tracing/integrations-tracing/openai-agents-sdk) -- [Future AGI](https://docs.futureagi.com/future-agi/products/observability/auto-instrumentation/openai_agents) -- [MLflow ( self-hosted / OSS )](https://mlflow.org/docs/latest/tracing/integrations/openai-agent) -- [MLflow ( Databricks hosted )](https://docs.databricks.com/aws/en/mlflow/mlflow-tracing#-automatic-tracing) -- [Braintrust](https://braintrust.dev/docs/guides/traces/integrations#openai-agents-sdk) -- [Pydantic Logfire](https://logfire.pydantic.dev/docs/integrations/llms/openai/#openai-agents) -- [AgentOps](https://docs.agentops.ai/v1/integrations/agentssdk) -- [Scorecard](https://docs.scorecard.io/docs/documentation/features/tracing#openai-agents-sdk-integration) -- [Keywords AI](https://docs.keywordsai.co/integration/development-frameworks/openai-agent) -- [LangSmith](https://docs.smith.langchain.com/observability/how_to_guides/trace_with_openai_agents_sdk) -- [Maxim AI](https://www.getmaxim.ai/docs/observe/integrations/openai-agents-sdk) -- [Comet Opik](https://www.comet.com/docs/opik/tracing/integrations/openai_agents) -- [Langfuse](https://langfuse.com/docs/integrations/openaiagentssdk/openai-agents) -- [Langtrace](https://docs.langtrace.ai/supported-integrations/llm-frameworks/openai-agents-sdk) -- [Okahu-Monocle](https://github.com/monocle2ai/monocle) -- [Galileo](https://v2docs.galileo.ai/integrations/openai-agent-integration#openai-agent-integration) -- [Portkey AI](https://portkey.ai/docs/integrations/agents/openai-agents) \ No newline at end of file +- [Weights & Biases](https://weave-docs.wandb.ai/guides/integrations/openai_agents) +- [Arize-Phoenix](https://docs.arize.com/phoenix/tracing/integrations-tracing/openai-agents-sdk) +- [Future AGI](https://docs.futureagi.com/future-agi/products/observability/auto-instrumentation/openai_agents) +- [MLflow (self-hosted/OSS)](https://mlflow.org/docs/latest/tracing/integrations/openai-agent) +- [MLflow (Databricks hosted)](https://docs.databricks.com/aws/en/mlflow/mlflow-tracing#-automatic-tracing) +- [Braintrust](https://braintrust.dev/docs/guides/traces/integrations#openai-agents-sdk) +- [Pydantic Logfire](https://logfire.pydantic.dev/docs/integrations/llms/openai/#openai-agents) +- [AgentOps](https://docs.agentops.ai/v1/integrations/agentssdk) +- [Scorecard](https://docs.scorecard.io/docs/documentation/features/tracing#openai-agents-sdk-integration) +- [Keywords AI](https://docs.keywordsai.co/integration/development-frameworks/openai-agent) +- [LangSmith](https://docs.smith.langchain.com/observability/how_to_guides/trace_with_openai_agents_sdk) +- [Maxim AI](https://www.getmaxim.ai/docs/observe/integrations/openai-agents-sdk) +- [Comet Opik](https://www.comet.com/docs/opik/tracing/integrations/openai_agents) +- [Langfuse](https://langfuse.com/docs/integrations/openaiagentssdk/openai-agents) +- [Langtrace](https://docs.langtrace.ai/supported-integrations/llm-frameworks/openai-agents-sdk) +- [Okahu-Monocle](https://github.com/monocle2ai/monocle) +- [Galileo](https://v2docs.galileo.ai/integrations/openai-agent-integration#openai-agent-integration) +- [Portkey AI](https://portkey.ai/docs/integrations/agents/openai-agents) \ No newline at end of file diff --git a/docs/ja/visualization.md b/docs/ja/visualization.md index 0a2e54e0a..fdbd268dd 100644 --- a/docs/ja/visualization.md +++ b/docs/ja/visualization.md @@ -2,13 +2,13 @@ search: exclude: true --- -# エージェントの可視化 +# エージェント可視化 -エージェントの可視化を使用すると、**Graphviz** を利用してエージェントとその関係を構造化されたグラフィカル表現として生成できます。これにより、アプリケーション内でエージェント、ツール、ハンドオフがどのように相互作用するかを把握しやすくなります。 +エージェント可視化を使用すると、 ** Graphviz ** を使ってエージェントとその関係を構造的なグラフィカル表現として生成できます。これは、アプリケーション内でエージェント、ツール、ハンドオフがどのように相互作用するかを理解するのに役立ちます。 ## インストール -オプションの `viz` 依存グループをインストールします: +オプションの `viz` 依存関係グループをインストールします: ```bash pip install "openai-agents[viz]" @@ -16,11 +16,11 @@ pip install "openai-agents[viz]" ## グラフの生成 -`draw_graph` 関数を使用してエージェントの可視化を生成できます。この関数は次のような有向グラフを作成します: +`draw_graph` 関数を使用してエージェントの可視化を生成できます。この関数は有向グラフを作成し、次のように表現します: -- **エージェント** は黄色のボックスで表されます。 -- **ツール** は緑色の楕円で表されます。 -- **ハンドオフ** はあるエージェントから別のエージェントへの有向エッジで示されます。 +- ** エージェント ** は黄色のボックスで表示されます。 +- ** ツール ** は緑色の楕円で表示されます。 +- ** ハンドオフ ** は一方のエージェントから別のエージェントへの有向エッジで示されます。 ### 使用例 @@ -52,33 +52,34 @@ triage_agent = Agent( draw_graph(triage_agent) ``` -![Agent Graph](../assets/images/graph.png) +![エージェントグラフ](../assets/images/graph.png) + +これにより、 ** triage agent ** の構造とサブエージェントおよびツールへの接続を視覚的に表現したグラフが生成されます。 -これにより、**triage agent** の構造とサブエージェント、ツールとの接続を視覚的に表すグラフが生成されます。 ## 可視化の理解 生成されたグラフには次の要素が含まれます: -- エントリポイントを示す **start ノード** (`__start__`) -- 黄色で塗りつぶされた **長方形** のエージェント -- 緑色で塗りつぶされた **楕円** のツール +- エントリーポイントを示す ** start ノード ** ( `__start__` ) +- 黄色で塗りつぶされた ** 四角形 ** で示されるエージェント +- 緑色で塗りつぶされた ** 楕円 ** で示されるツール - 相互作用を示す有向エッジ - - エージェント間のハンドオフには **実線の矢印** - - ツール呼び出しには **点線の矢印** -- 実行が終了する場所を示す **end ノード** (`__end__`) + - エージェント間のハンドオフには ** 実線矢印 ** + - ツール呼び出しには ** 破線矢印 ** +- 実行終了地点を示す ** end ノード ** ( `__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 97d13a0ea..7cb9374e3 100644 --- a/docs/ja/voice/pipeline.md +++ b/docs/ja/voice/pipeline.md @@ -4,7 +4,7 @@ search: --- # パイプラインとワークフロー -`VoicePipeline` は、 エージェント ワークフローを音声アプリへ簡単に変換できるクラスです。実行したいワークフローを渡すだけで、パイプラインが入力音声の文字起こし、音声終了の検知、適切なタイミングでのワークフロー呼び出し、そしてワークフロー出力を音声へ戻す処理を自動で行います。 +` VoicePipeline ` クラスは、エージェントワークフローを音声アプリに簡単に組み込めます。ワークフローを渡すと、入力音声の文字起こし、音声終了の検出、適切なタイミングでのワークフロー呼び出し、そしてワークフロー出力を音声へ変換する処理をパイプラインが自動で行います。 ```mermaid graph LR @@ -34,33 +34,37 @@ graph LR ## パイプラインの設定 -パイプラインを作成するときには、次の項目を設定できます。 +パイプラインを作成するときに、次の項目を設定できます。 1. [`workflow`][agents.voice.workflow.VoiceWorkflowBase] 新しい音声が文字起こしされるたびに実行されるコードです。 -2. 使用する [`speech-to-text`][agents.voice.model.STTModel] と [`text-to-speech`][agents.voice.model.TTSModel] モデル +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 モデルの設定(プロンプト、言語、使用するデータ型など) + 以下のような設定が行えます。 + - モデルプロバイダー: モデル名をモデルにマッピングします。 + - トレーシング: トレーシングを無効化するか、音声ファイルをアップロードするか、ワークフロー名やトレース 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] - ユーザーが話し終えたかどうかを検知する必要がある場合に使用します。音声チャンクを検出次第プッシュでき、パイプラインが「アクティビティ検知」により適切なタイミングでエージェント ワークフローを自動実行します。 + ユーザーが話し終えたかどうかを検出する必要がある場合に使用します。音声チャンクを検出ごとにプッシュでき、パイプラインが「アクティビティ検出」により適切なタイミングでエージェントワークフローを自動実行します。 ## 結果 -音声パイプラインの実行結果は [`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 @@ -80,4 +84,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 ` に対する組み込みの割り込みサポートはありません。検出された各ターンごとにワークフローが個別に実行されます。アプリケーション内で割り込みを処理したい場合は、` 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 2e7facbfe..c24b92b40 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 の基本クイックスタート手順に従い、仮想環境をセットアップしてください。その後、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 モデルを実行します。 +3. 結果のテキストを音声に戻す text-to-speech モデルを実行します。 ```mermaid graph LR @@ -48,7 +48,7 @@ graph LR ## エージェント -まず、いくつかのエージェントを設定しましょう。すでにこの SDK でエージェントを構築したことがある場合は、おなじみのはずです。ここでは複数のエージェント、ハンドオフ、そしてツールを用意します。 +まず、いくつかのエージェントをセットアップしましょう。すでにこの SDK でエージェントを構築したことがあれば、馴染みがあるはずです。ここでは複数のエージェント、ハンドオフ、ツールを用意します。 ```python import asyncio @@ -90,9 +90,9 @@ agent = Agent( ) ``` -## Voice パイプライン +## 音声パイプライン -[`SingleAgentVoiceWorkflow`][agents.voice.workflow.SingleAgentVoiceWorkflow] をワークフローとして使用し、シンプルな Voice パイプラインを構築します。 +[`SingleAgentVoiceWorkflow`][agents.voice.workflow.SingleAgentVoiceWorkflow] をワークフローとして使用し、シンプルな音声パイプラインをセットアップします。 ```python from agents.voice import SingleAgentVoiceWorkflow, VoicePipeline @@ -124,7 +124,7 @@ async for event in result.stream(): ``` -## まとめて実行する +## 統合例 ```python import asyncio @@ -195,4 +195,4 @@ if __name__ == "__main__": asyncio.run(main()) ``` -この例を実行すると、エージェントがあなたに向かって話します。自分でエージェントと会話できるデモは [examples/voice/static](https://github.com/openai/openai-agents-python/tree/main/examples/voice/static) にありますので、ぜひご覧ください。 \ No newline at end of file +このサンプルを実行すると、エージェントがあなたに話しかけてくれます。実際に自分でエージェントと会話できるデモは、[examples/voice/static](https://github.com/openai/openai-agents-python/tree/main/examples/voice/static) の例をご覧ください。 \ No newline at end of file diff --git a/docs/ja/voice/tracing.md b/docs/ja/voice/tracing.md index f2d1093e2..e8dbda2a9 100644 --- a/docs/ja/voice/tracing.md +++ b/docs/ja/voice/tracing.md @@ -6,13 +6,13 @@ search: [エージェントがトレーシングされる方法](../tracing.md) と同様に、音声パイプラインも自動的にトレーシングされます。 -基本的なトレーシング情報については上記のドキュメントを参照できますが、[`VoicePipelineConfig`][agents.voice.pipeline_config.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]: トレース ワークフローの名前です。 -- [`group_id`][agents.voice.pipeline_config.VoicePipelineConfig.group_id]: 複数のトレースを関連付けるための `group_id` です。 +- [`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]: トレースワークフローの名前です。 +- [`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