AI 開発

OpenAI Agents API vs Responses API:2026 年、開発者はどう選ぶか。JSON Tool Calling、Structured Output、マルチ Agent

約 16 分

9 月 10 日の Agents API 公開ベータのあと、よくある問いは「どのモデルが賢いか」ではない。誰がループを回すかだ。Responses API では function_call を自分で回す。Agents API は Codex harness をホストする。Tool Calling と Structured Output からマルチ Agent まで開き、選べる表を渡す。

先に一目

入口 一行 何を持つか
Agents API OpenAI が Codex harness を回す Session / Environment
Responses API 自分でモデルを叩き、ループを回す input / output items
Agents SDK ループは自プロセスに残る runner / handoff
JSON 鎖 名前、引数、結果はオブジェクトのまま call_id / Schema

先に主語を選ぶ。ループを自分で持つか。入口を替えても JSON 呼び出し鎖は残る。

選ぶのは誰がループを回すか。誰が賢いかではない

2026 年、GPT-6 Astra のツール呼び出しはすでに Responses を通る。Agents API は別層だ。セッションをホストし、文脈を圧縮し、subagent を送る。同じ JSON 鎖。主語が違う。

  • 毎ステップを握る:承認、再試行、function_call_output を書き戻す——Responses API。
  • 何時間も続く仕事、ホスト復旧、サンドボックス、subagent——Agents API。
  • ループは自プロセスに残したいが runner は欲しい——Agents SDK。下はしばしば Responses。

Agents API 自体のツール呼び出しは OpenAI Agents API 完全解説。Agent と Function Calling がまだ一つの語なら AI Agent 完全ガイド。

各 API は層を持つ

Responses は下層:/v1/responses。input を送り、typed items を受ける。message、reasoning、function_call。GPT-6 Astra ガイド のツール呼び出しはこの道を要求する。Structured Output は text.format。Chat Completions の response_format ではない。

Agents API は管理 harness:POST /v1/agents/sessions。Agent、Tools、Environment を宣言する。OpenAI がループ、compact、復旧を回す。関数の答えが要るとき、session は requires_action を出す。あなたは turn_id / call_id で tool_result を返す。

Agents SDK は第三のプロトコルではない。自プロセスの runner だ。handoff、承認、保存はあなたのもの。モデル呼び出しはしばしば Responses に落ちる。公式は Session、SDK session、Responses conversation、sandbox を四つの別資源とする。

Tool Calling:一つの鎖、二つの書き戻し

Responses では毎ターン responses.create。ツール表と最終カードは同じリクエストに置ける:

{
  "model": "gpt-6-astra",
  "input": "Look up order A-1042.",
  "tools": [
    {
      "type": "function",
      "name": "lookup_order",
      "parameters": {
        "type": "object",
        "properties": {
          "order_id": { "type": "string", "pattern": "^[A-Z]-\\d{4}$" }
        },
        "required": ["order_id"],
        "additionalProperties": false
      }
    }
  ],
  "text": {
    "format": {
      "type": "json_schema",
      "name": "order_card",
      "strict": true,
      "schema": {
        "type": "object",
        "properties": {
          "order_id": { "type": "string" },
          "status": { "enum": ["paid", "pending", "void"] }
        },
        "required": ["order_id", "status"],
        "additionalProperties": false
      }
    }
  }
}

モデルが照会するなら、output に独立した item が出る。call_id が呼び出しと結果を釘付けする:

{
  "output": [
    {
      "type": "function_call",
      "call_id": "call_3c91",
      "name": "lookup_order",
      "arguments": "{\"order_id\":\"A-1042\"}"
    }
  ]
}

アプリが関数を実行し、結果を次の input item として戻す:

{
  "type": "function_call_output",
  "call_id": "call_3c91",
  "output": "{\"status\":\"paid\",\"amount\":99.00}"
}

Agents API はこれらのターンを session に畳む。作成時にツール、サンドボックス、multi_agent を一度に宣言する:

{
  "agent": {
    "model": "gpt-6-astra",
    "tools": [
      { "type": "function", "name": "lookup_order", "parameters": {
        "type": "object",
        "properties": { "order_id": { "type": "string", "pattern": "^[A-Z]-\\d{4}$" } },
        "required": ["order_id"],
        "additionalProperties": false
      }},
      { "type": "web_search" }
    ],
    "multi_agent": { "enabled": true, "max_concurrent_subagents": 3 }
  },
  "environment": { "type": "hosted", "workspace_directory": "/workspace" },
  "input": [{ "role": "user", "content": [{ "type": "input_text", "text": "Look up A-1042." }] }]
}

関数の番が来ると、harness は required_actions で止まる。書き戻しは function_call_output ではない。turn_id 付きの tool result だ:

{
  "type": "tool_result",
  "turn_id": "turn_2",
  "call_id": "call_3c91",
  "success": true,
  "output": "{\"status\":\"paid\"}"
}

名前は違う。門は同じ。Schema が実行できるものを決める。MCP の行は同じツール表の別表記。境界は MCP Tool Schema vs Function Calling。

Structured Output は最終カードを鎖す。ツール引数ではない

Responses は最終形を text.format に置く。ユーザーに見せるオブジェクトを縛る。ツール引数は別 Schema。契約は なぜ AI に JSON Schema が要るか。

  • Responses:text.format.json_schema + strict: true が最終カードを鎖す。
  • Agents API:ループはホストされる。最終成果物にも Schema が要る。function / MCP の引数は各自絞る。
  • どちらも:Structured Output は門ではない。金額、確認、解放はホストが書く。

よくある誤りはカードだけを鎖し、lookup_order を広い object のままにすること。カードはきれいだ。副作用はもう走った。

マルチ Agent:ホストされた扇状か、自分の handoff か

「マルチ Agent 協働」は第三の知能ではない。誰が編制を持つかだ:

  • Agents API:multi_agent.enabled。subagent は自分の文脈を持つ。主 Agent は create / wait / interrupt。同時実行に上限を。
  • Agents SDK:handoff オブジェクトは runner の中。承認と保存はあなたのもの。
  • Responses:組み込み subagent はない。responses.create を自分で繋ぐか、状態を Conversations に置く。

handoff は監査できる JSON であるべきだ。「経理に渡して」という文ではない。Schema への収め方は JSON Schema と Agent ワークフロー。

一枚の表、三つの入口

公式の対比は工学の問いに畳める:

軸 Agents API Responses API Agents SDK
誰がループを回すか OpenAI 管理の harness 毎回 create で自分で回す 自プロセスの runner
状態の場所 Session / turns / items history を組むか Conversations 自分の保存か SDK session
ツールの書き戻し tool_result + turn_id function_call_output + call_id SDK が包む。下はしばしば Responses
Structured Output 最終成果物に別 Schema text.format.json_schema どこに付けるかはあなた
マルチ Agent 組み込み subagent 自分で編む runner 内の handoff

「より良い API」はない。あるのは「主語があなたの側にあるか」だけだ。

入口を決める四問

製品ページから選ばない。この四問:

  1. 業務の副作用は自プロセスを離れられるか?返金や書き込みにあなたの頷きが要るなら、先に Responses か SDK。
  2. 仕事は一つの文脈窓を超えるか?超え、自分で compact したくないなら Agents API。
  3. コマンドとファイル用のサンドボックスが要るか?Agents API の Environment は既にある。Responses では実行世界を自分で用意する。
  4. 並列 subagent が要るか?要り、編制を自作しないなら Agents API の multi_agent を開き、同時実行上限を凍らせる。

四つの「要る」がホスト側に落ちるなら Agents API。一つでも自分の手に残すなら Responses から。SDK は第三:ループはあなたのもの、糊は少ない。

比べる前に、二つの JSON 軌跡を広げる

入口を間違えるのは、大抵オブジェクトを見ていない。二つの軌跡を並べる。

  • Responses の output[] と Agents の session items を 整形。call_id が合うか見る。
  • JSONPath 抽出 で name、arguments、text.format を抜く。文書を目で追わない。
  • 同じ注文を二つの入口で JSON Diff。ループが流れたら、先に書き戻しの形を見る。
  • 最終カードの Schema とツール引数の Schema は別々に審る。カードだけ鎖すのは正面だけ飾ることだ。
  • 注文や社内 MCP を公開フォーマッタに貼らない。JSONSort はブラウザローカル。

二つの軌跡が再構築できて、初めて入口を選んでいる。スローガンではない。

落とし穴

  • Agents API が Responses を置き換えたと思う。公式は二つの起点を書く。Astra の tool calling は今も Responses。
  • Session と Conversation を一つの資源だと思う。一方を消しても他方は消えない。
  • 最終カードだけ Schema、ツール引数は広い。副作用は function_call が走ったときに起きる。
  • multi_agent を開き、同時実行上限を置かない。ホストされた扇状でも token は燃え、副作用は広がる。
  • SDK を使い、門を書かない。runner はループを回す。金額は検証しない。
  • デモ映像から API を選ぶ。デモはループを隠す。主語がどこにいるかを先に問う。

FAQ

2026 年の新規はどの API から始めるか?

Responses から。毎跳びが見える。窓を跨ぐ仕事、ホストされたサンドボックスや subagent が要るときだけ、ループを Agents API に渡す。

GPT-6 Astra は Agents API だけ使い、Responses を避けられるか?

Agents session だけ開いてよい。Astra の tool calling 文書は今も Responses を指す。短い鎖、Structured Output、自分で回すループは Responses のまま。

Structured Output は Tool Calling の代わりになるか?

ならない。Structured Output は最終オブジェクトを鎖す。Tool Calling は副作用を鎖す。返金、照会、ファイル編集はツール JSON。ユーザーが見るカードは text.format。

マルチ Agent には Agents API が必須か?

必須ではない。SDK の handoff も、自分で繋いだ複数の Responses もマルチ Agent。Agents API は扇状をホスト能力にしただけだ。

二つの API を混ぜられるか?

できる。資源は混ぜない。構造化カードは Responses、長い仕事は Agents session。Session、Conversation、sandbox は別々に作り、別々に消す。

結論

Agents API と Responses API は二世代ではない。一方はループをホストする。他方はループをあなたに渡す。Tool Calling、Structured Output、マルチ Agent は、その鎖の上の別オブジェクトだ。

先に主語を書く。この跳びは自プロセスを離れてよいか。それから入口を選ぶ。モデルは替わる。call_id と Schema を先に安定させる。

さらに読む

更新記録: 初回公開