OpenAI Agents SDKの 基礎 (1) – Agent

エージェントの基本構造

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行で、以下のことが起きている。

  1. ユーザーの指示("状態を確認してください")をエージェントに渡す。
  2. エージェントが この指示(instructions)を前提に推論を実行。
  3. 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 は「人間が読むための最終結果」

この最小構成を正しく理解することで、ツール付きエージェントマルチエージェント構成 が理解しやすくなる。