Skip to content

Commit 9953ae2

Browse files
committed
Add i18n support to the documents
1 parent 9d3d6a5 commit 9953ae2

25 files changed

+2539
-330
lines changed

Makefile

+5
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ old_version_tests:
4242
build-docs:
4343
uv run mkdocs build
4444

45+
.PHONY: build-full-docs
46+
build-full-docs:
47+
uv run docs/scripts/translate_docs.py
48+
uv run mkdocs build
49+
4550
.PHONY: serve-docs
4651
serve-docs:
4752
uv run mkdocs serve

docs/ja/agents.md

+147
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
# エージェント
2+
3+
エージェント はアプリケーションの基本的な構成要素です。エージェント は、大規模言語モデル(LLM)であり、 instructions と tools を用いて設定されます。
4+
5+
## 基本設定
6+
7+
エージェント の設定でよく使われるプロパティは以下の通りです。
8+
9+
- `instructions` : 開発者メッセージまたはシステムプロンプトとも呼ばれます。
10+
- `model` : 使用する LLM を指定します。オプションで `model_settings` を指定し、temperature や top_p などのモデル調整パラメータを設定できます。
11+
- `tools` : エージェント がタスクを達成するために使用できるツールです。
12+
13+
```python
14+
from agents import Agent, ModelSettings, function_tool
15+
16+
@function_tool
17+
def get_weather(city: str) -> str:
18+
return f"The weather in {city} is sunny"
19+
20+
agent = Agent(
21+
name="Haiku agent",
22+
instructions="Always respond in haiku form",
23+
model="o3-mini",
24+
tools=[get_weather],
25+
)
26+
```
27+
28+
## コンテキスト
29+
30+
エージェント は、 `context` 型に対してジェネリックです。コンテキストは依存性注入のためのツールであり、作成したオブジェクトを `Runner.run()` に渡すことで、各エージェント、ツール、ハンドオフなどに渡されます。これはエージェントの実行に必要な依存関係や状態をまとめて保持するためのものです。任意の Python オブジェクトをコンテキストとして提供できます。
31+
32+
```python
33+
@dataclass
34+
class UserContext:
35+
uid: str
36+
is_pro_user: bool
37+
38+
async def fetch_purchases() -> list[Purchase]:
39+
return ...
40+
41+
agent = Agent[UserContext](
42+
...,
43+
)
44+
```
45+
46+
## 出力タイプ
47+
48+
デフォルトでは、エージェント はプレーンテキスト(つまり `str` )を出力します。特定の型の出力を生成させたい場合は、 `output_type` パラメータを使用します。一般的には [Pydantic](https://docs.pydantic.dev/) オブジェクトを使用しますが、Pydantic の [TypeAdapter](https://docs.pydantic.dev/latest/api/type_adapter/) でラップ可能な型(データクラス、リスト、TypedDict など)であればどのような型でもサポートしています。
49+
50+
```python
51+
from pydantic import BaseModel
52+
from agents import Agent
53+
54+
55+
class CalendarEvent(BaseModel):
56+
name: str
57+
date: str
58+
participants: list[str]
59+
60+
agent = Agent(
61+
name="Calendar extractor",
62+
instructions="Extract calendar events from text",
63+
output_type=CalendarEvent,
64+
)
65+
```
66+
67+
!!! note
68+
69+
`output_type` を指定すると、モデルは通常のプレーンテキストのレスポンスではなく、 [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) を使用します。
70+
71+
## ハンドオフ
72+
73+
ハンドオフ は、エージェント が処理を委譲できるサブエージェントです。ハンドオフのリストを提供すると、エージェント は必要に応じてそれらに処理を委譲できます。これは、特定のタスクに特化したモジュール型のエージェントを組み合わせて調整するための強力なパターンです。詳細は [ハンドオフ](handoffs.md) のドキュメントを参照してください。
74+
75+
```python
76+
from agents import Agent
77+
78+
booking_agent = Agent(...)
79+
refund_agent = Agent(...)
80+
81+
triage_agent = Agent(
82+
name="Triage agent",
83+
instructions=(
84+
"Help the user with their questions."
85+
"If they ask about booking, handoff to the booking agent."
86+
"If they ask about refunds, handoff to the refund agent."
87+
),
88+
handoffs=[booking_agent, refund_agent],
89+
)
90+
```
91+
92+
## 動的な instructions
93+
94+
多くの場合、エージェント 作成時に instructions を指定しますが、関数を通じて動的に instructions を提供することも可能です。この関数はエージェントとコンテキストを受け取り、プロンプトを返します。通常の関数と `async` 関数の両方が使用可能です。
95+
96+
```python
97+
def dynamic_instructions(
98+
context: RunContextWrapper[UserContext], agent: Agent[UserContext]
99+
) -> str:
100+
return f"The user's name is {context.context.name}. Help them with their questions."
101+
102+
103+
agent = Agent[UserContext](
104+
name="Triage agent",
105+
instructions=dynamic_instructions,
106+
)
107+
```
108+
109+
## ライフサイクルイベント(フック)
110+
111+
エージェント のライフサイクルを監視したい場合があります。例えば、イベントをログに記録したり、特定のイベント発生時にデータを事前取得したりできます。エージェント のライフサイクルにフックするには、 `hooks` プロパティを使用します。[`AgentHooks`][agents.lifecycle.AgentHooks] クラスをサブクラス化し、関心のあるメソッドをオーバーライドします。
112+
113+
## ガードレール
114+
115+
ガードレール を使用すると、エージェント の実行と並行してユーザー入力に対するチェックや検証を実行できます。例えば、ユーザー入力の関連性を検証できます。詳細は [ガードレール](guardrails.md) のドキュメントを参照してください。
116+
117+
## エージェント の複製(クローン)
118+
119+
エージェント の `clone()` メソッドを使用すると、エージェント を複製し、必要に応じてプロパティを変更できます。
120+
121+
```python
122+
pirate_agent = Agent(
123+
name="Pirate",
124+
instructions="Write like a pirate",
125+
model="o3-mini",
126+
)
127+
128+
robot_agent = pirate_agent.clone(
129+
name="Robot",
130+
instructions="Write like a robot",
131+
)
132+
```
133+
134+
## ツール使用の強制
135+
136+
ツールのリストを提供しても、必ずしも LLM がツールを使用するとは限りません。ツールの使用を強制するには、 [`ModelSettings.tool_choice`][agents.model_settings.ModelSettings.tool_choice] を設定します。有効な値は以下の通りです。
137+
138+
1. `auto` : LLM がツールを使用するかどうかを決定します。
139+
2. `required` : LLM にツールの使用を強制します(ただし、どのツールを使用するかは LLM が判断します)。
140+
3. `none` : LLM にツールを使用しないことを強制します。
141+
4. 特定の文字列(例: `my_tool` )を設定すると、LLM はその特定のツールを使用することを強制されます。
142+
143+
!!! note
144+
145+
無限ループを防ぐため、フレームワークはツール呼び出し後に自動的に `tool_choice` を "auto" にリセットします。この動作は [`agent.reset_tool_choice`][agents.agent.Agent.reset_tool_choice] で設定可能です。無限ループは、ツールの実行結果が LLM に送信され、再びツール呼び出しが生成されるために発生します。
146+
147+
ツール呼び出し後に完全に停止させたい場合(自動モードで続行しない場合)は、 [`Agent.tool_use_behavior="stop_on_first_tool"`] を設定すると、ツールの出力を最終レスポンスとして直接使用し、それ以上の LLM 処理を行いません。

docs/ja/config.md

+94
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# SDK の設定
2+
3+
## API キーとクライアント
4+
5+
デフォルトでは、SDK はインポート時に LLM リクエストおよびトレーシング用の環境変数 `OPENAI_API_KEY` を参照します。アプリケーションの起動前にこの環境変数を設定できない場合は、[set_default_openai_key()][agents.set_default_openai_key] 関数を使用してキーを設定できます。
6+
7+
```python
8+
from agents import set_default_openai_key
9+
10+
set_default_openai_key("sk-...")
11+
```
12+
13+
また、使用する OpenAI クライアントを設定することも可能です。デフォルトでは、SDK は環境変数または上記で設定したデフォルトキーを使用して `AsyncOpenAI` インスタンスを作成します。これを変更するには、[set_default_openai_client()][agents.set_default_openai_client] 関数を使用します。
14+
15+
```python
16+
from openai import AsyncOpenAI
17+
from agents import set_default_openai_client
18+
19+
custom_client = AsyncOpenAI(base_url="...", api_key="...")
20+
set_default_openai_client(custom_client)
21+
```
22+
23+
さらに、使用する OpenAI API をカスタマイズすることもできます。デフォルトでは OpenAI Responses API を使用しますが、[set_default_openai_api()][agents.set_default_openai_api] 関数を使用して Chat Completions API に変更できます。
24+
25+
```python
26+
from agents import set_default_openai_api
27+
28+
set_default_openai_api("chat_completions")
29+
```
30+
31+
## トレーシング
32+
33+
トレーシングはデフォルトで有効になっています。デフォルトでは、前述のセクションで設定した OpenAI API キー(環境変数またはデフォルトキー)を使用します。トレーシング専用の API キーを設定するには、[`set_tracing_export_api_key`][agents.set_tracing_export_api_key] 関数を使用します。
34+
35+
```python
36+
from agents import set_tracing_export_api_key
37+
38+
set_tracing_export_api_key("sk-...")
39+
```
40+
41+
また、[`set_tracing_disabled()`][agents.set_tracing_disabled] 関数を使用してトレーシングを完全に無効化することもできます。
42+
43+
```python
44+
from agents import set_tracing_disabled
45+
46+
set_tracing_disabled(True)
47+
```
48+
49+
## デバッグログ
50+
51+
SDK はデフォルトでハンドラーが設定されていない 2 つの Python ロガーを持っています。デフォルトでは、警告およびエラーが `stdout` に送信され、それ以外のログは抑制されます。
52+
53+
詳細なログを有効にするには、[`enable_verbose_stdout_logging()`][agents.enable_verbose_stdout_logging] 関数を使用します。
54+
55+
```python
56+
from agents import enable_verbose_stdout_logging
57+
58+
enable_verbose_stdout_logging()
59+
```
60+
61+
また、ハンドラー、フィルター、フォーマッターなどを追加してログをカスタマイズすることも可能です。詳細については、[Python logging ガイド](https://docs.python.org/3/howto/logging.html) を参照してください。
62+
63+
```python
64+
import logging
65+
66+
logger = logging.getLogger("openai.agents") # トレーシング用ロガーの場合は openai.agents.tracing
67+
68+
# すべてのログを表示する場合
69+
logger.setLevel(logging.DEBUG)
70+
# INFO 以上を表示する場合
71+
logger.setLevel(logging.INFO)
72+
# WARNING 以上を表示する場合
73+
logger.setLevel(logging.WARNING)
74+
# その他、必要に応じて設定
75+
76+
# 必要に応じてカスタマイズ可能ですが、デフォルトでは `stderr` に出力されます
77+
logger.addHandler(logging.StreamHandler())
78+
```
79+
80+
### ログ内の機密データ
81+
82+
一部のログには機密データ(ユーザーデータなど)が含まれる場合があります。このデータのログ記録を無効化したい場合は、以下の環境変数を設定してください。
83+
84+
LLM の入力および出力のログ記録を無効化する場合:
85+
86+
```bash
87+
export OPENAI_AGENTS_DONT_LOG_MODEL_DATA=1
88+
```
89+
90+
ツールの入力および出力のログ記録を無効化する場合:
91+
92+
```bash
93+
export OPENAI_AGENTS_DONT_LOG_TOOL_DATA=1
94+
```

docs/ja/context.md

+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# コンテキスト管理
2+
3+
コンテキストという用語は多義的です。主に次の 2 種類のコンテキストがあります。
4+
5+
1. コード内でローカルに利用可能なコンテキスト:これは、関数ツールの実行時、`on_handoff` などのコールバック時、ライフサイクルフック時などに必要となるデータや依存関係です。
6+
2. LLM が利用可能なコンテキスト:これは、LLM が応答を生成する際に参照するデータです。
7+
8+
## ローカルコンテキスト
9+
10+
これは [`RunContextWrapper`][agents.run_context.RunContextWrapper] クラスと、その内部の [`context`][agents.run_context.RunContextWrapper.context] プロパティを通じて表現されます。動作の仕組みは以下の通りです。
11+
12+
1. 任意の Python オブジェクトを作成します。一般的にはデータクラスや Pydantic オブジェクトを使用します。
13+
2. 作成したオブジェクトを各種の実行メソッドに渡します(例:`Runner.run(..., context=whatever)`)。
14+
3. すべての関数ツール呼び出しやライフサイクルフックなどには、ラッパーオブジェクト `RunContextWrapper[T]` が渡されます。ここで `T` はコンテキストオブジェクトの型を表し、`wrapper.context` を通じてアクセスできます。
15+
16+
**最も重要な点** は、特定のエージェント実行において、すべてのエージェント、関数ツール、ライフサイクルフックなどが同じコンテキストの __ を使用しなければならないということです。
17+
18+
コンテキストは以下のような用途で使用できます。
19+
20+
- 実行時のコンテキストデータ(ユーザー名や UID など、ユーザーに関する情報)
21+
- 依存関係(ロガーオブジェクト、データ取得用オブジェクトなど)
22+
- ヘルパー関数
23+
24+
!!! danger "注意"
25+
26+
コンテキストオブジェクトは LLM には送信され **ません**。これは純粋にローカルなオブジェクトであり、読み取り、書き込み、メソッド呼び出しが可能です。
27+
28+
```python
29+
import asyncio
30+
from dataclasses import dataclass
31+
32+
from agents import Agent, RunContextWrapper, Runner, function_tool
33+
34+
@dataclass
35+
class UserInfo: # (1)!
36+
name: str
37+
uid: int
38+
39+
@function_tool
40+
async def fetch_user_age(wrapper: RunContextWrapper[UserInfo]) -> str: # (2)!
41+
return f"User {wrapper.context.name} is 47 years old"
42+
43+
async def main():
44+
user_info = UserInfo(name="John", uid=123)
45+
46+
agent = Agent[UserInfo]( # (3)!
47+
name="Assistant",
48+
tools=[fetch_user_age],
49+
)
50+
51+
result = await Runner.run( # (4)!
52+
starting_agent=agent,
53+
input="What is the age of the user?",
54+
context=user_info,
55+
)
56+
57+
print(result.final_output) # (5)!
58+
# The user John is 47 years old.
59+
60+
if __name__ == "__main__":
61+
asyncio.run(main())
62+
```
63+
64+
1. これがコンテキストオブジェクトです。ここではデータクラスを使用していますが、任意の型を使用できます。
65+
2. これは関数ツールです。`RunContextWrapper[UserInfo]` を引数として受け取り、コンテキストからデータを読み取っています。
66+
3. エージェントにジェネリック型 `UserInfo` を指定することで、型チェッカーがエラーを検出できるようにしています(例えば、異なるコンテキスト型を取るツールを渡そうとした場合など)。
67+
4. コンテキストを `run` 関数に渡しています。
68+
5. エージェントが正しくツールを呼び出し、年齢を取得しています。
69+
70+
## エージェント / LLM コンテキスト
71+
72+
LLM が呼び出される際、参照できるデータは会話履歴に含まれるもの **のみ** です。そのため、新しいデータを LLM に提供したい場合は、会話履歴に含まれるようにする必要があります。これを実現する方法はいくつかあります。
73+
74+
1. エージェントの `instructions` に追加する方法です。これは「システムプロンプト」または「開発者メッセージ」とも呼ばれます。システムプロンプトは静的な文字列でもよく、またはコンテキストを受け取って文字列を出力する動的な関数でも構いません。これは常に有用な情報(ユーザー名や現在の日付など)を提供する際によく使われる手法です。
75+
2. `Runner.run` 関数を呼び出す際の `input` に追加する方法です。これは `instructions` と似ていますが、[指揮系統(chain of command)](https://cdn.openai.com/spec/model-spec-2024-05-08.html#follow-the-chain-of-command) の下位に位置するメッセージを設定できます。
76+
3. 関数ツールを通じて公開する方法です。これは _オンデマンド_ なコンテキストに有効で、LLM が必要なデータを判断し、そのデータを取得するためにツールを呼び出します。
77+
4. 検索(retrieval)やウェブ検索を使用する方法です。これらはファイルやデータベースから関連データを取得(検索)したり、ウェブからデータを取得(ウェブ検索)したりする特殊なツールです。これは関連するコンテキストデータに基づいて応答を「根拠付ける(grounding)」際に有効です。

docs/ja/examples.md

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# コード例
2+
3+
SDK のさまざまな実装サンプルについては、[リポジトリ](https://github.com/openai/openai-agents-python/tree/main/examples) のコード例セクションをご覧ください。コード例は、異なるパターンや機能を示す複数のカテゴリに分類されています。
4+
5+
## カテゴリ
6+
7+
- **[agent_patterns](https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns)**
8+
このカテゴリのコード例では、一般的なエージェント設計パターンを示しています。例えば、
9+
10+
- 決定論的ワークフロー
11+
- ツールとしてのエージェント
12+
- エージェントの並列実行
13+
14+
- **[basic](https://github.com/openai/openai-agents-python/tree/main/examples/basic)**
15+
SDK の基本的な機能を示すコード例です。例えば、
16+
17+
- 動的なシステムプロンプト
18+
- ストリーミング出力
19+
- ライフサイクルイベント
20+
21+
- **[tool examples](https://github.com/openai/openai-agents-python/tree/main/examples/tools)**
22+
Web 検索やファイル検索などの OpenAI がホストするツールの実装方法と、それらをエージェントに統合する方法を学べます。
23+
24+
- **[model providers](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers)**
25+
SDK で OpenAI 以外のモデルを使用する方法を確認できます。
26+
27+
- **[handoffs](https://github.com/openai/openai-agents-python/tree/main/examples/handoffs)**
28+
エージェントのハンドオフに関する実践的なコード例を参照できます。
29+
30+
- **[mcp](https://github.com/openai/openai-agents-python/tree/main/examples/mcp)**
31+
MCP を使用したエージェントの構築方法を学べます。
32+
33+
- **[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)**
34+
実際のアプリケーションを示す、より具体的なコード例です。
35+
36+
- **customer_service**:航空会社向けのカスタマーサービスシステムのコード例。
37+
- **research_bot**:シンプルな詳細調査クローンのコード例。
38+
39+
- **[voice](https://github.com/openai/openai-agents-python/tree/main/examples/voice)**
40+
TTS および STT モデルを使用した音声エージェントのコード例を参照できます。

0 commit comments

Comments
 (0)