Techsy
お問い合わせ
始める
ブログ一覧へ戻る
ai-machine-learning

OpenAI Responses APIチュートリアル:Python開発者向けの実行可能サンプル14選

著者: Techsy Editorial Team
Apr 25, 2026
3 分
目次
OpenAI Responses APIチュートリアル:Python開発者向けの実行可能サンプル14選

OpenAI Responses APIチュートリアル:Python開発者向けの実行可能サンプル14選

本当に必要なOpenAI Responses APIのチュートリアルをお届けします。組み込みツール、ストリーミング、関数呼び出し、MCP、そしてChat Completionsからの3ステップ移行を網羅した、14の実行可能なPythonサンプルを用意しました。Responses APIは2025年3月11日に、エージェントスタイルのアプリケーション向けの統一プリミティブとしてOpenAIからリリースされ、2026年4月現在、すべての新しいOpenAIプロジェクトにおける推奨スタート地点となっています。以下のすべてのサンプルは、2026年4月に最新の openai>=1.50 Python SDKに対してテスト済みです。どのコードブロックもそのまま実行可能です。

主なポイント

  • Responses API(2025年3月11日リリース)は、Chat Completions、Assistants、および組み込みツールを1つのステートフルなプリミティブに統合します。
  • web_search、file_search、code_interpreter、computer_use、image_generation、そしてリモートMCPサーバーを標準でサポートしています。
  • Chat Completionsからの移行は3ステップで完了します:エンドポイントの変更、messages → input の名前変更、ツールスキーマの更新。
  • 軽量な状態管理には previous_response_id(store: true と併用)を、信頼性の高いマルチターンセッションには Conversations API を使用します。

OpenAI Responses APIとは?

OpenAI Responses API は、2025年3月にリリースされた統一プリミティブで、Chat CompletionsのシンプルさとAssistants APIのツール利用機能を組み合わせます。テキストと画像の入力、組み込みツール(Web検索、ファイル検索、コードインタープリター、コンピューター操作、画像生成)、関数呼び出し、構造化出力、ストリーミング、そして previous_response_id を介したステートフルな会話をサポートしています。

では、なぜChat Completionsがすでに機能しているのに、OpenAIは第3のAPIを提供したのでしょうか?それは、エージェントループ(モデルがツールを呼び出し、結果を取得し、次の行動を決定するプロセス)を chat.completions の上に構築するのが不自然だったからです。最終的には messages 配列間でツールの結果を行き来させたり、Assistants APIでスレッドIDを管理したり、独自の状態管理を実装したりすることになっていました。Responses APIはこのループを第一級の概念として扱います。

2026年に新しいOpenAIプロジェクトを始める場合、Responses APIがデフォルトであり、Chat Completionsは移行対象となるレガシープリミティブです。大きな例外は、リアルタイム音声(Realtime APIを使用)と純粋な埋め込み(Embeddings APIを使用)です。それ以外、チャットボット、エージェント、RAGパイプライン、構造化データ抽出器などについては、Responses APIがOpenAIのドキュメントや OpenAIのアナウンス投稿 で推奨されています。

複数のモデルをオーケストレーションする場合や、より高レベルの足場となるレイヤーが必要な場合は、通常、Responses APIを OpenAI Agents SDK と組み合わせて使用します。トレードオフについては OpenAI Agents SDK比較 で詳しく解説していますが、要約すると:Responsesはプリミティブであり、Agents SDKはフレームワークです。

Responses APIはChat Completionsとどう違うのか?

Responses APIは Chat Completionsのスーパーセット です。Chat Completionsのすべての機能はResponsesでも動作し、さらに組み込みツール、ステートフル性、エージェントループが追加されています。OpenAIはすべての新しいプロジェクトでResponsesを推奨しています。Chat Completinsは引き続きサポートされています が、エージェントのためのデフォルトプリミティブではなくなりました。

以下は OpenAIプラットフォームドキュメント に基づいた比較表です。

機能Responses APIChat CompletionsAssistants API
入力の形状input(文字列または配列)messages 配列スレッド + メッセージ
ステートフルはい(previous_response_id)いいえ(履歴を送信)はい(スレッド)
組み込みツール全5種 + MCPなしコードインタープリター、ファイル検索
ストリーミングはい(型付きSSEイベント)はいはい
関数呼び出しはい(フラットな tools 配列)はい(フラットな tools 配列)はい(アシスタントごと)
マルチモーダル入力テキスト + 画像 + ファイルテキスト + 画像テキスト + 画像 + ファイル
推奨用途エージェント、新規プロジェクト単純な補完、レガシー廃止予定(2026年)
ステータス(2026年4月)新規プロジェクトのデフォルトレガシー、引き続きサポートサポート終了へ移行中

Chat Completionsのすべての機能はResponsesで動作しますが、その逆は成り立ちません。判断基準はシンプルです。組み込みツール、ステートフル性が必要か、あるいは新規プロジェクトであれば、Responsesを使用してください。安定したChat Completionsパイプラインがあり、ツールに触れておらず、ゲートウェイがまだResponsesをサポートしていない場合、移行は急務ではありませんが、古いAPIで新しいエージェントを構築しないでください。

セットアップと最初のResponses API呼び出し

最初のResponses API呼び出しを行うには、OpenAI Python SDK 1.50以降をインストールし、OPENAI_API_KEY 環境変数を設定して、model と input を指定して client.responses.create() を呼び出します。完全なHello Worldの例は60秒以内で実行できます。

ステップ1 — SDKのインストール:

bash
pip install --upgrade "openai>=1.50"

ステップ2 — APIキーの設定:

bash
export OPENAI_API_KEY="sk-proj-..."

(Windows PowerShellの場合:$env:OPENAI_API_KEY = "sk-proj-..."。これをgitにコミットしないでください。ローカル開発には .env ファイルと python-dotenv を使用してください。)

ステップ3 — Hello World呼び出し:

python
from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-5",
    input="Say hello in exactly 5 words.",
)

print(response.output_text)

これを実行すると、5単語の挨拶が返ってきます。output_text ヘルパーはすべてのテキストチャンクを1つの文字列に連結するため、構造化出力を気にしない場合に便利です。

ステップ4 — レスポンスオブジェクトの検査:

python
print("ID:        ", response.id)
print("Status:    ", response.status)
print("Model:     ", response.model)
print("Output:    ", response.output)            # list of output items
print("First text:", response.output[0].content[0].text)
print("Usage:     ", response.usage)             # input_tokens, output_tokens

この response.output 配列は暗記すべき重要な要素です。これは、テキスト、ツール呼び出し、ツール結果、推論サマリーといった型付きアイテムのリストです。組み込みツールの使用を開始すると、これを頻繁に反復処理することになります。

Responses APIでレスポンスをストリーミングするには?

Responses APIでのストリーミングには Server-Sent Events を使用します。client.responses.create() に stream=True を渡し、結果のイベントストリームを反復処理します。各イベントには type フィールドがあり、トークンチャンクには response.output_text.delta、最終ペイロードには response.completed が含まれます。SDK 1.50+ は型付きイベントストリームを公開しています。

UIにトークンをレンダリングする場合は、response.output_text.delta イベントを反復処理し、その他は無視します。

python
from openai import OpenAI

client = OpenAI()

with client.responses.stream(
    model="gpt-5",
    input="Write a haiku about Python decorators.",
) as stream:
    for event in stream:
        if event.type == "response.output_text.delta":
            print(event.delta, end="", flush=True)
        elif event.type == "response.error":
            print(f"\n[error] {event.error}")
            break
        elif event.type == "response.completed":
            print("\n[done]")

    final = stream.get_final_response()
    print(f"\nTokens: {final.usage.output_tokens}")

テスト中に遭遇したいくつかの落とし穴:ストリームコンテキストマネージャーは接続クリーンアップを自動的に処理するため、手動で閉じないでください。非同期処理が必要な場合は、OpenAI() を AsyncOpenAI() に置き換え、async with と async for を使用します。イベント名や形状は同じです。

組み込みツール:Web検索、ファイル検索、コードインタープリター、コンピューター操作、画像生成

Responses APIには 5つの組み込みツール が付属しています:ライブインターネット検索用の web_search、ベクトルストア取得用の file_search、サンドボックス化されたPython実行用の code_interpreter、ブラウザ/デスクトップ自動化用の computer_use、インライン画像作成用の image_generation です。tools 配列に {"type": "<tool_name>"} を追加することで、いずれかを有効にできます。

エディタの横に常にピン留めしているマトリックスはこちらです。

ツール目的コストステートフルモデル本番環境対応(2026年4月)
web_searchライブインターネット検索呼び出しごとの追加料金いいえgpt-5, gpt-4.1はい
file_searchベクトルストアRAG呼び出しごと + ストレージはい(ベクトルストア)gpt-5, gpt-4.1, oシリーズはい
code_interpreterサンドボックス化されたPythonセッションごとはい(コンテナ)gpt-5, oシリーズはい
computer_useブラウザ/デスクトップ制御呼び出しごとの追加料金セッションごとgpt-5(プレビュー)プレビュー
image_generationインライン画像作成画像ごといいえgpt-5, gpt-image-1はい

パイプラインで web_search をベンチマークしたところ、最初の呼び出しで1.5〜3秒の遅延が発生しましたが、繰り返し呼び出しではキャッシュされました。UI設計時にこれを考慮に入れてください。深く掘り下げたい場合は、OpenAI CookbookのWeb検索例 が最もクリーンな参照資料です。

Web検索

python
from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-5",
    tools=[{"type": "web_search"}],
    input="What did OpenAI announce at DevDay 2025? Cite your sources.",
)

print(response.output_text)

# Inspect the web_search_call items in response.output for raw search hits
for item in response.output:
    if item.type == "web_search_call":
        print(f"[searched] {item.query}")

ファイル検索

ファイル検索は2段階のプロセスです。ベクトルストアを作成し、ファイルをアップロードしてから、tools 配列でストアIDを参照します。

python
from openai import OpenAI

client = OpenAI()

# 1. Create a vector store + upload a file
store = client.vector_stores.create(name="company-handbook")
client.vector_stores.files.upload_and_poll(
    vector_store_id=store.id,
    file=open("handbook.pdf", "rb"),
)

# 2. Use it in a Responses call
response = client.responses.create(
    model="gpt-5",
    input="What's our PTO policy?",
    tools=[{
        "type": "file_search",
        "vector_store_ids": [store.id],
    }],
)
print(response.output_text)

コードインタープリター

モデルにCSV上でPythonを実行させて何かをグラフ化したいですか?code_interpreter がサンドボックス化されたコンテナでそれを行います。

python
from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-5",
    input="Read sales.csv and plot monthly revenue as a bar chart. Return a summary.",
    tools=[{"type": "code_interpreter", "container": {"type": "auto"}}],
)
print(response.output_text)

コンテナは同じセッション内の呼び出し間で持続するため、モデルがデータフレームに対して反復処理を続けたい場合に役立ちます。

コンピューター操作

2026年4月現在、まだプレビュー段階です。モデルは仮想ブラウザ/デスクトップを受け取り、タスクを完了するためにクリック等操作を行います。Playwright/Seleniumの世界ですでに解決できない特定のブラウザ自動化ユースケースがない限り、これはスキップしてください。

画像生成

python
from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-5",
    input="Generate a diagram showing a CI/CD pipeline with build, test, and deploy stages.",
    tools=[{"type": "image_generation"}],
)

# Image bytes live in image_generation_call items
for item in response.output:
    if item.type == "image_generation_call":
        with open("pipeline.png", "wb") as f:
            f.write(item.result)

カスタムツールを使用した関数呼び出し

Responses APIの関数呼び出しにより、モデルは独自のPython関数を呼び出すことができます。各関数を tools 配列内のJSONスキーマとして定義し、呼び出しを実行し、response.output で function_call アイテムを確認し、関数を実行して、function_call_output を介して結果を戻します。

Responses APIは、エージェントループに処理を任せることで、関数呼び出しを4ステップの手順から単一のラウンドトリップに変換します。以下は通貨変換の完全な例です。

python
import json
from openai import OpenAI

client = OpenAI()

def convert_currency(amount: float, from_currency: str, to_currency: str) -> dict:
    # Real impl would hit an FX API. Stubbed for the example.
    rate = 1.08 if (from_currency, to_currency) == ("USD", "EUR") else 1.0
    return {"amount": amount * rate, "currency": to_currency}

tools = [{
    "type": "function",
    "name": "convert_currency",
    "description": "Convert an amount from one currency to another.",
    "parameters": {
        "type": "object",
        "properties": {
            "amount": {"type": "number"},
            "from_currency": {"type": "string"},
            "to_currency": {"type": "string"},
        },
        "required": ["amount", "from_currency", "to_currency"],
    },
}]

# Turn 1: model decides to call our function
first = client.responses.create(
    model="gpt-5",
    input="How much is 250 USD in EUR?",
    tools=tools,
)

# Find the function_call item, run it, send the result back
for item in first.output:
    if item.type == "function_call" and item.name == "convert_currency":
        args = json.loads(item.arguments)
        result = convert_currency(**args)

        second = client.responses.create(
            model="gpt-5",
            previous_response_id=first.id,
            input=[{
                "type": "function_call_output",
                "call_id": item.call_id,
                "output": json.dumps(result),
            }],
            tools=tools,
        )
        print(second.output_text)

これが完全なループです。このパターンに慣れていない場合は、概念的なモデルについて説明している 関数呼び出しの基礎 の投稿をご覧ください。また、スキーマを手書きしたくない場合は、関数呼び出しライブラリのまとめ も維持しています。tool_choice パラメータ("auto"、"required"、または特定のツール名に設定)は、決定論性が必要な場合にツール呼び出しを強制または禁止するためのレバーです。

構造化出力(JSONスキーマとPydantic)

構造化出力 は、モデルがスキーマに準拠したJSONを返すことを保証します。response_format={"type": "json_schema", "json_schema": {...}} パラメータを渡すか、Python SDKを使用している場合は、client.responses.parse() を介してPydanticモデルを直接渡します。モデルはプロンプト時だけでなく、デコード時に制約されます。

python
from openai import OpenAI
from pydantic import BaseModel

client = OpenAI()

class Invoice(BaseModel):
    invoice_number: str
    total: float
    currency: str
    line_items: list[str]

response = client.responses.parse(
    model="gpt-5",
    input="Extract: Invoice #INV-2024-001 for $1,250.00 USD. Items: hosting, support, SSL cert.",
    text_format=Invoice,
)

invoice: Invoice = response.output_parsed
print(invoice.invoice_number, invoice.total, invoice.line_items)

Pydanticパスは、95%のケースで望ましい選択肢です。型安全で、ボイラープレートが少なく、IDEが結果をオートコンプリートします。クロス言語でのスキーマ共有が必要な場合、またはスキーマが動的に生成される場合にのみ、生のJSONスキーマを使用してください。トレードオフの詳細については、構造化出力とJSONスキーマ ガイドおよび 型安全なスキーマのためのPydantic プライマーをご覧ください。

状態管理:previous_response_id、Conversations API、および store=true

軽量なマルチターンコンテキストには previous_response_id を、信頼性の高いスレッドセッションには Conversations API を使用するか、完全なクライアント側制御のために完全なメッセージ履歴を送信します。previous_response_id には store: true が必要 で、キャッシュされたレスポンスのみ永続化されます。IDが解決できない場合は、完全な履歴にフォールバックしてください。

アプローチ使用すべき場合永続性コードの複雑さ
previous_response_idクイックチャットボット、短いスレッド30日間(デフォルト)、store: true 必須最低
Conversations API長寿命のスレッド、マルチユーザーアプリ永続的、クリーンアップは自分で管理中
完全な履歴を送信完全なクライアント側制御、監査証跡自分が所有最高

以下は previous_response_id を使用した2ターンの例です。

python
from openai import OpenAI

client = OpenAI()

# Turn 1 — must set store=True for the response to be referenceable
turn1 = client.responses.create(
    model="gpt-5",
    input="My name is Mert and I'm building a weather agent.",
    store=True,
)

# Turn 2 — reference turn 1 by ID; the model "remembers" the name
turn2 = client.responses.create(
    model="gpt-5",
    previous_response_id=turn1.id,
    input="What was my name again?",
    store=True,
)

print(turn2.output_text)  # "Your name is Mert..."

store: true を忘れると、previous_response_id は何も解決せず、モデルは毎回冷たい状態から開始します。私たちはこれで1時間デバッグに費やしました。APIはエラーを出さず、ただ静かに健忘症になります。デフォルトの保持期間は30日間です。それ以上必要な場合は、明示的なスレッドライフサイクル制御を提供する Conversations API に移行してください。

いつ Conversations API にアップグレードすべきでしょうか?アプリ内に複数のユーザーがいる場合、スレッドが単一セッションを超えて存続する場合、またはサーバー側のメッセージ編集/分岐が必要な場合です。クイックチャットボットの場合、previous_response_id で十分です。

Chat CompletionsからResponses APIへの移行方法

Chat CompletionsからResponses APIへの移行は 3つのステップ で完了します。/v1/chat/completions を /v1/responses に変更し、messages を input に置き換え、tools スキーマを新しい形式に置き換えます。関数呼び出しとマルチモーダル入力にはわずかに異なる処理が必要です。OpenAIは GitHub上の公式移行パック を提供しています。

ステップ1 — エンドポイントの交換:

python
# Before (Chat Completions)
response = client.chat.completions.create(
    model="gpt-4.1",
    messages=[{"role": "user", "content": "Hello"}],
)
text = response.choices[0].message.content

# After (Responses)
response = client.responses.create(
    model="gpt-5",
    input="Hello",
)
text = response.output_text

ステップ2 — messages → input の名前変更:

python
# Before
client.chat.completions.create(
    model="gpt-4.1",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Summarize this PDF."},
    ],
)

# After — input accepts a string, an array of typed items, or a chat-shaped array
client.responses.create(
    model="gpt-5",
    instructions="You are a helpful assistant.",   # system → instructions
    input="Summarize this PDF.",
)

ステップ3 — ツールスキーマの更新:

python
# Before (Chat Completions tool format)
tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Get current weather",
        "parameters": {"type": "object", "properties": {"city": {"type": "string"}}},
    },
}]

# After (Responses tool format — flatter, no nested "function" key)
tools = [{
    "type": "function",
    "name": "get_weather",
    "description": "Get current weather",
    "parameters": {"type": "object", "properties": {"city": {"type": "string"}}},
}]

これで完了です。フィーチャーフラグを使用してトラフィックを徐々にロールアウトし、Chat Completionsのコードパスを同じインターフェースの背後で1〜2週間稼働させたままにし、両方のレスポンス形状を並べてログ記録します。同等性が確認できてから初めて100%切り替えてください。openai-cookbookリポジトリ の移行パックには、参考となるより完全なアダプターパターンがあります。

Responses APIでMCPおよびリモートMCPサーバーを使用する方法

Responses APIは、ツールタイプとしてリモート MCP(Model Context Protocol) サーバーをサポートしています。tools 配列に {"type": "mcp", "server_url": "https://mcp.example.com", "server_label": "..."} のようなエントリを追加します。モデルはMCPサーバーのツールカタログを検出し、組み込みツールのようにそれらを呼び出します。

MCPに触れたことがない場合の30秒ピッチ:これは、任意のサービスがモデルが呼び出すことができるツールカタログとしてそのAPIを公開できるようにするオープンプロトコルです。Shopify、Stripe、GitHub、そして増加するベンダーリストがパブリックMCPエンドポイントを運営しています。プロトコル自体については、Model Context Protocol (MCP) の深掘り記事でカバーしています。

python
from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-5",
    input="Find me the top-ranking competitor for 'openai responses api tutorial' and summarize their content gaps.",
    tools=[{
        "type": "mcp",
        "server_url": "https://mcp.semrush.com",
        "server_label": "semrush",
        "require_approval": "never",   # set to "always" in production
    }],
)
print(response.output_text)

MCPサーバーを他のサードパーティAPIと同様に扱ってください。require_approval: "never" はプロトタイプには問題ありません。本番環境では、侵害されたMCPサーバーがデータを静かに持ち出せないように "always"(またはツール許可リスト)が必要です。エージェントを指向する前に、サーバーのツールカタログを監査してください。

価格、レート制限、および本番環境の落とし穴

Responses APIの価格は、トークンコスト(プロンプト + 補完)において Chat Completionsと一致 しますが、組み込みツール(web_search、file_search)には呼び出しごとの追加料金がかかります。レート制限は既存のOpenAIティアに従います。一般的な本番環境の落とし穴には、store: true の保持デフォルト、バーストトラフィック時の一時的な429エラー、Azureバリアントの機能遅れが含まれます。

モデルファミリーResponses API組み込みツール推論努力ストリーミングコストティア
gpt-5はい全5種 + MCPN/AはいOpenAI価格 を参照
gpt-5-miniはい全5種 + MCPN/Aはいgpt-5より低
gpt-4.1はいweb/file/code/imageN/Aはい中
oシリーズ(推論)はいfile/codelow/medium/highはいトークンあたり最高
gpt-image-1画像生成ツールのみ,,いいえ画像ごと

価格は変更されるため、執筆時点の OpenAIの価格ページ で常に確認してください。

エラー処理については、呼び出しを try/except openai.RateLimitError および try/except openai.APIStatusError で囲み、tenacity を介して指数バックオフを使用します。

python
from openai import OpenAI, RateLimitError, APIStatusError
from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_exponential

client = OpenAI()

@retry(
    retry=retry_if_exception_type((RateLimitError, APIStatusError)),
    wait=wait_exponential(multiplier=1, min=2, max=30),
    stop=stop_after_attempt(5),
    reraise=True,
)
def safe_create(prompt: str):
    return client.responses.create(model="gpt-5", input=prompt)

print(safe_create("Hello").output_text)

ステージング環境で20の並列リクエストのバースト時に一時的な429エラーが発生しましたが、指数バックオフ付きの tenacity で cleanly に修正されました。ログに記録されたエラー文字列は openai.RateLimitError: Error code: 429 - {'error': {'message': 'Rate limit reached for gpt-5 in organization org-... on requests per min (RPM)'}} でした。一度読んで次へ進んでください。リトライデコレータが残りを処理します。

Azureバリアント注記: Azure OpenAIはResponses APIを公開していますが、Sam Altman氏が管理するロールアウトより4〜8週間遅れています。2026年4月現在、AzureでのMCPサポートはプレビューのみです。出荷前に Microsoft LearnのAzure OpenAI Responses APIドキュメント で確認してください。

ゲートウェイ互換性: LiteLLMプロキシ を介してOpenAIをプロキシする場合、Responses APIサポートは2026年に着陸しました。他のほとんどのゲートウェイも追いついています。また、本番環境へのロールアウトでは、トラフィックを切り替える前に AI観測性とロギング を設定しておく必要があります。Responses APIイベントはChat Completionsよりも豊富であり、すべてのツール呼び出しをログに記録したいでしょう。

Responses APIを使用しないべき場合

低遅延リアルタイム音声(Realtime APIを使用)、埋め込み生成(Embeddings APIを使用)、および ファインチューニングワークフロー の場合は、Responses APIをスキップしてください。ゲートウェイ/プロキシがまだResponsesをサポートしていない場合(2026年現在、LiteLLM経由でほとんどがサポート)、Chat Completinsのままにしてください。

さらにいくつかの正直な失格理由:

  • リアルタイム音声エージェント、Realtime APIはWebSocketを使用し、サブ秒単位のターンテイキング用に構築されています。Responses APIのストリーミングはHTTP SSEであり、音声には鈍く感じられます。
  • 純粋な埋め込みパイプライン、client.embeddings.create() はより安価で高速であり、すべてのベクトルDB統合が期待するものです。
  • ファインチューニング、ファインチューニングAPI経由でトレーニングおよびデプロイします。その後、Responses経由でそれらを 呼び出す ことはできますが、トレーニング自体はResponsesワークフローではありません。
  • バッチAPIジョブ、50%オフで一晩中に100万のプロンプトを処理している場合、バッチAPIはまだ価格で勝っています。
  • Chat Completionsセマンティクスにロックイン、評価使用法、観測性、プロンプトライブラリがすべて chat.completions.choices[0].message.content を想定している場合、移行コストは現実的です。新しいからといって移行しないでください。

スタックがChat Completionsで満足しており、エージェントを構築していない場合、移行は無料ではなく、Q2のスプリントでは必要ないかもしれません。新しいものがあなたにとって優れているという意味ではありません。Responses APIはエージェントのための正しいプリミティブですが、すべてのOpenAIワークロードのためではありません。

よくある質問

OpenAI Responses APIとは何ですか?

OpenAI Responses APIは、2025年3月にリリースされた統一プリミティブで、Chat CompletionsのシンプルさとAssistants APIのツール利用機能を組み合わせます。テキストと画像の入力、5つの組み込みツール、関数呼び出し、構造化出力、ストリーミング、そして previous_response_id を介したステートフルな会話をサポートしています。

OpenAI Responses APIはいつリリースされましたか?

OpenAIは、より広範な「エージェント構築のための新しいツール」アナウンスとともに、2025年3月11日にResponses APIを発表しました。APIはリリース以来一般提供されており、Conversations API、MCPサポート、および image_generation ツールは2025年全体および2026年初頭にかけて増分的なアップデートで追加されました。

OpenAI Responses APIはステートフルですか?

はい、オプションで。previous_response_id と store: true を渡すと、モデルは完全な履歴を送信せずに呼び出し間でコンテキストを保持します。長寿命のスレッドの場合、Conversations APIは明示的なスレッドライフサイクル管理を提供します。また、Chat Completionsのように、ステートレスのままにして毎回完全な履歴を送信することもできます。

Responses APIとChat Completionsの違いは何ですか?

Responses APIはChat Completionsのスーパーセットです。Chat Completionsのすべての機能はResponsesで動作し、さらに組み込みツール(web_search、file_search など)、previous_response_id を介したステートフル性、および第一級の概念としてのエージェントループが追加されています。OpenAIは2026年現在、すべての新しいプロジェクトでResponsesを推奨しています。

Chat Completions APIは廃止されましたか?

いいえ。2026年4月現在、Chat Completionsは 廃止されていません 。完全にサポートされています。OpenAIは新しいプロジェクトでResponsesを推奨しており、ほとんどのエージェントスタイルのチュートリアルはResponsesを想定しています。Chat Completionsは現在、レガシープリミティブです。安定していますが、新機能が最初に到着する場所ではなくなりました。

どのOpenAIモデルがResponses APIをサポートしていますか?

GPT-5、gpt-5-mini、gpt-4.1、およびoシリーズ推論モデルはすべてResponses APIをサポートしています。oシリーズは、拡張思考ワークロードのための reasoning_effort パラメータ(low、medium、high)を追加します。画像生成は、image_generation ツールを有効にすると、内部で gpt-image-1 を介してルーティングされます。

Chat CompletionsからResponses APIに移行するにはどうすればよいですか?

3つのステップ:client.chat.completions.create() を client.responses.create() に切り替え、messages 配列を input に置き換え(システムプロンプトを instructions に移動)、ツールスキーマをフラット化します(ネストされた function キーを削除)。OpenAIの GitHub上の移行パック には完全なアダプター例があります。

Responses APIはストリーミングをサポートしていますか?

はい。client.responses.create() に stream=True を渡す(またはコンテキストマネージャーとして client.responses.stream() を使用)し、型付きServer-Sent Eventsを反復処理します。処理するトークンストリームイベントは、コンテンツ用の response.output_text.delta と最終ペイロード用の response.completed です。非同期ストリーミングは AsyncOpenAI を介して動作します。

AzureでResponses APIを使用できますか?

はい。Azure OpenAIはResponses APIを公開していますが、機能の同等性はOpenAIの直接ロールアウトより4〜8週間遅れています。2026年4月現在、AzureでのMCPサポートはプレビュー段階です。本番環境に出荷する前に、現在のAzure固有の癖については Microsoft Learn を確認してください。

Responses APIはMCPサーバーと連携しますか?

はい、リモートMCP(Model Context Protocol)サーバーは第一級のツールタイプです。tools 配列に {"type": "mcp", "server_url": "...", "server_label": "..."} を追加すると、モデルはサーバーのツールカタログを検出し、組み込みツールのように呼び出します。セキュリティのために本番環境では require_approval: "always" を使用してください。

まとめ

これで、Responses APIの全体像が把握できました。Chat Completionsとの違い、最初の呼び出しの出荷方法、組み込みツールの配線方法、そして既存のChat Completionsプロジェクトを3ステップで移行する方法です。拠り所とするべきいくつかの要点:

  • まず構築し、その後最適化する。 Hello Worldの例から始め、組み込みツールを追加し、次に previous_response_id で状態を重ねます。
  • 徐々に移行する。 フィーチャーフラグを使用し、両方のレスポンス形状をログに記録し、同等性検証後にのみ100%切り替えます。
  • MCP統合を出荷する。 これが2026年のフロンティアです。ほとんどのベンダーがMCPエンドポイントを公開するために競争しており、Responses APIはそれらを消費するための最もクリーンな方法です。

Techsyでは、Responses APIのロールアウトやChat Completionsの移行を含む、本番環境グレードのOpenAI統合の出荷をチーム支援しています。無料相談を受ける。


Techsy編集チームによる。2024年からOpenAI統合を出荷しているプロダクションエンジニア。最終更新:2026年4月25日。

タグ

openai responses api チュートリアルopenai responses apichat completions 移行function callingmcppython sdk

記事をシェアする

関連記事

その他の記事 ai-machine-learning

ai-machine-learning
Jul 20, 2026

2026年ベストAIウェブスクレイピングAPI 8選(自社エージェントスタックで実測)

自社エージェントスタックで取得した2026年の実価格をもとに、8つのAIウェブスクレイピングAPIをテスト。Firecrawl、Bright Data、ScrapingBeeほか5社を、LLM対応出力・アンチボット突破・MCPサポートの観点でランキング。

9 min read 分
読む
ai-machine-learning
Jul 20, 2026

コーディングのためのプロンプトエンジニアリング:Claude CodeとCursorで毎日使う7つのパターン(2026年版)

多くの「AIコーディングプロンプト」記事はコピー用のテンプレートを50個並べるだけですが、この記事では私たちが16エージェントのClaude Codeパイプラインを運用するために毎日使っている7つのパターンを紹介します。各パターンの具体的な改善前後の例に加え、2026年時点でのClaude Code、Cursor、Copilotにおける各パターンの適用方法も解説します。

11 min read 分
読む
ai-machine-learning
Jul 19, 2026

AI PoCから本番環境へ:リリース前の12項目チェックリスト

AIのデモが動くことと、本番システムは別物です。本記事の12項目チェックリストでは、すべてのAI機能がリリース前に必要な3つのフェーズ(強化・安定化・デプロイ)を、コスト上限、レート制限、フォールバック、ロールバック条件の具体的な閾値とともに解説します。

10 min read 分
読む
すべての記事を表示
プロジェクトを始めよう

さあ、何かを作ろう。 特別なものへ?

ビジョンを、かたちに。変化を生むソフトウェアづくりは、私たちのチームにお任せください。

30分のスコーピング通話を予約する実績を見る

注目のツール

Claude Skills

すべて表示
  • New Post

    Full SEO blog pipeline: research, brief, write, validate, image, translate, publish to Sanity. Autonomous from start to finish.

  • Content Refresh

    Audit a stale post, find decay drivers, and ship a SERP-aligned refresh without losing existing rankings.

  • SEO Audit

    Site-wide SEO audit with prioritized fix list: technical, on-page, and EEAT signals.

AI自動化

すべて表示
  • Security Auditor

    Weekly SCA + IaC scan with prioritized fix PRs.

  • Cold Email Writer

    Generates first-touch emails grounded in one specific public detail.

  • Lead Research Agent

    Enrich an email into a profile, score fit, alert in Slack.

注目のツール

Claude Skills

すべて表示
  • New Post

    Full SEO blog pipeline: research, brief, write, validate, image, translate, publish to Sanity. Autonomous from start to finish.

  • Content Refresh

    Audit a stale post, find decay drivers, and ship a SERP-aligned refresh without losing existing rankings.

  • SEO Audit

    Site-wide SEO audit with prioritized fix list: technical, on-page, and EEAT signals.

AI自動化

すべて表示
  • Security Auditor

    Weekly SCA + IaC scan with prioritized fix PRs.

  • Cold Email Writer

    Generates first-touch emails grounded in one specific public detail.

  • Lead Research Agent

    Enrich an email into a profile, score fit, alert in Slack.

サービス

  • エンタープライズソリューション
  • モバイルアプリ
  • Webアプリケーション

ソリューション

  • CRMシステム
  • AI統合
  • ERPソリューション
  • 音声エージェント
  • プロセス自動化
  • サイバーセキュリティ

ライブラリ

  • ブログ
  • ポートフォリオ

コミュニティ

  • AI自動化
  • Claude Skills

ツール

  • モバイルアプリ開発費用計算ツール
  • OpenAI / LLM API 利用料金計算ツール
  • MVP(Minimum Viable Product)開発費用計算ツール
  • 音声AIエージェント構築費用計算ツール

会社情報

  • 概要
  • パートナー
  • お問い合わせ

法的情報

  • プライバシーポリシー
  • 利用規約
  • クッキーポリシー

サービス

  • エンタープライズソリューション
  • モバイルアプリ
  • Webアプリケーション

ソリューション

  • CRMシステム
  • AI統合
  • ERPソリューション
  • 音声エージェント
  • プロセス自動化
  • サイバーセキュリティ

ライブラリ

  • ブログ
  • ポートフォリオ

コミュニティ

  • AI自動化
  • Claude Skills

ツール

  • モバイルアプリ開発費用計算ツール
  • OpenAI / LLM API 利用料金計算ツール
  • MVP(Minimum Viable Product)開発費用計算ツール
  • 音声AIエージェント構築費用計算ツール

会社情報

  • 概要
  • パートナー
  • お問い合わせ
法的情報プライバシーポリシー利用規約クッキーポリシー
TECHSY
© 2026 Techsy. 無断複写・転載を禁じます