エージェントの基本構造
OpenAI Agents SDK を使い始めて最初に戸惑うのが「エージェントを作って実行する最小コードが、実際には何をしているのか」という点である。この記事では、最小構成のエージェント実行コードを例にしながら、「各行が何を意味しているのか」を整理する。
1. 最小構成のサンプルコード
from agents import Agent, Runner
# 簡単なエージェントを定義
agent = Agent(
name="SimpleResponder",
instructions="必ず『準備完了』という文字列だけを返してください"
)
# エージェントを同期実行
response = Runner.run_sync(agent, "状態を確認してください")
# 最終的な出力を表示
print(response.final_output)
2. 各行の解説
(1) Agent と Runner の読み込み
from agents import Agent, Runner
OpenAI Agents SDK ライブラリから、以下の各クラスを読み込んでいる。
Agent
AIエージェントそのものを表すクラスRunner
エージェントを実行するための実行するためのクラス
「エージェントを定義する役」と「動かす役」が分離されているのが SDK の特徴。
(2) エージェントの作成
agent = Agent(
name="SimpleResponder",
instructions="必ず『準備完了』という文字列だけを返してください"
)
ここでは AIエージェントの設計図を作っている。
name
エージェントの名前(ログやトレース用)instructions
エージェントに与える指示
→ エージェントの「基本的な振る舞い」を決める
重要なのは、ここではまだ実行されていないという点。
(3) エージェントの実行
response = Runner.run_sync(agent, "状態を確認してください")
この1行で、以下のことが起きている。
- ユーザーの指示(
"状態を確認してください")をエージェントに渡す。 - エージェントが この指示(instructions)を前提に推論を実行。
- LLM の応答・内部状態をまとめた結果オブジェクトをresponseとして返す。
run_sync は 同期実行なので、処理が終わるまで待ってから次の行に進む。
(4) 最終出力の取得
print(response.final_output)
response には、以下のような情報が含まれている。
- モデルの最終回答
- ツール呼び出し結果(あれば)
- 内部的な中間状態
その中で、
final_output
→ ユーザーに返す最終的なテキスト
だけを取り出して表示させている。
3. なぜこのような構造になっているのか?
OpenAI Agents SDK では、
- 定義(Agent)
- 実行(Runner)
- 結果(Response)
を明確に分離している。
これにより、
- ツール呼び出し
- エージェント間ハンドオフ
- トレーシング
- テスト・再実行
といった高度な処理を、同じ構造のまま拡張できる設計になっている。
4. まとめ
Agentは「AIの役割と性格」を定義するものRunnerは「そのエージェントを実行する仕組み」final_outputは「人間が読むための最終結果」
この最小構成を正しく理解することで、ツール付きエージェント や マルチエージェント構成 が理解しやすくなる。