OpenAI Responses API入門|Pythonで使い方を解説

OpenAI Responses APIをPythonで始める入門記事のアイキャッチ LLM

OpenAIのResponses APIは、文章生成だけでなく、会話の継続、Web検索、ファイル検索、画像入力、独自関数の呼び出しなどを1つの入口から扱えるAPIです。

最小構成なら、Pythonでは次の3行が中心になります。

response = client.responses.create(
    model="gpt-5.6",
    input="Responses APIを一文で説明してください。",
)
print(response.output_text)

この記事では、APIキーの準備から、会話を続ける方法、組み込みWeb検索までを順番に解説します。

やりたいこと 主な指定
文章を生成する input
回答方針を指定する instructions
会話を続ける previous_response_id
Web検索を使う tools=[{"type": "web_search"}]
最終テキストを取得する response.output_text

Responses APIで入力から回答・ツール利用までを処理する流れ

スポンサーリンク

Responses APIとは

Responses APIは、OpenAIが新規プロジェクト向けに推奨している統合APIです。

従来のChat Completions APIでも文章生成はできますが、Responses APIでは次の機能を同じ形式で扱いやすくなっています。

  • テキスト・画像・ファイルなどの入力
  • 複数ターンの会話
  • Web検索、ファイル検索、Code Interpreterなどの組み込みツール
  • 独自のFunction Calling
  • MCPサーバーとの連携
  • ストリーミングとバックグラウンド実行

単純なチャットだけでなく、情報を調べたり、ツールを使ったりするAIアプリの土台として設計されています。

スポンサーリンク

Chat Completions APIとの違い

比較項目 Chat Completions Responses API
基本入力 messages input
基本出力 choices[0].message.content output_text
会話の継続 履歴を自分で再送 履歴再送またはprevious_response_id
組み込みツール 個別実装が中心 Web検索などを直接指定可能
複数の出力項目 主にメッセージ メッセージ・ツール呼び出しなどのoutput

Chat Completions APIは引き続き利用できます。一方、新規実装でツール利用や会話状態まで扱うなら、Responses APIから始めると拡張しやすくなります。

Pythonで使う準備

OpenAI SDKをインストールする

pip install openai

すでに導入済みの場合は、Responses APIへ対応した新しいSDKへ更新します。

pip install --upgrade openai

APIキーを環境変数へ設定する

macOSまたはLinuxでは、次のように設定できます。

export OPENAI_API_KEY="your_api_key_here"

APIキーをPythonファイルへ直接書くと、GitHubへの誤公開やログ出力につながります。環境変数やシークレット管理機能を使ってください。

最小コードで文章を生成する

from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-5.6",
    input="Pythonを学ぶメリットを3つ、短く説明してください。",
)

print(response.output_text)

ポイントは次の3つです。

  1. OpenAI()は環境変数OPENAI_API_KEYを自動で読み込みます。
  2. ユーザーからの依頼はinputへ渡します。
  3. 最終的な文章はresponse.output_textで取り出せます。

response.outputには、メッセージだけでなく、ツール呼び出しや推論関連の項目が含まれる場合があります。文章だけが必要なときはoutput_textが便利です。

instructionsとinputを分ける

回答の役割やルールはinstructions、その都度変わる依頼はinputへ分けます。

from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-5.6",
    instructions=(
        "あなたはPython初学者向けの講師です。"
        "専門用語には短い説明を付け、結論から答えてください。"
    ),
    input="リスト内包表記を例つきで説明してください。",
)

print(response.output_text)

アプリ共通の方針と、ユーザーごとの入力を混ぜないことで、プロンプトを管理しやすくなります。

previous_response_idで会話を続ける

直前のレスポンスIDを次のリクエストへ渡すと、前の回答を踏まえて会話を続けられます。

from openai import OpenAI

client = OpenAI()

first = client.responses.create(
    model="gpt-5.6",
    input="Pythonの辞書を一文で説明してください。",
)

second = client.responses.create(
    model="gpt-5.6",
    previous_response_id=first.id,
    input="初心者向けのコード例も追加してください。",
)

print(second.output_text)

previous_response_idで前の回答を次のリクエストへつなぐ流れ

会話履歴を自分のデータベースで完全に管理したい場合は、過去の入力と出力項目をinputへ含めて送る方法もあります。

会話継続で覚えておきたい点

  • previous_response_idは会話をつなぐためのIDです。
  • 長い会話では、過去の入力トークンもコストへ影響します。
  • ユーザーや会話ごとにレスポンスIDを分けて保存します。
  • 別ユーザーのIDを混ぜないよう、サーバー側で所有者を検証します。

組み込みWeb検索を使う

toolsweb_searchを指定すると、モデルが必要に応じてWeb検索を利用できます。

from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-5.6",
    tools=[{"type": "web_search"}],
    input="今日の生成AI関連ニュースを3件、出典つきで要約してください。",
)

print(response.output_text)

検索結果を扱う画面では、レスポンスに含まれる出典情報をユーザーが確認できる形で表示します。また、検索を使うとツール利用分の料金や待ち時間が加わるため、必要な処理だけで有効にします。

output_textだけでなくoutputも確認する

Responses APIの返却値は、単一の文字列とは限りません。

for item in response.output:
    print(item.type)

ツールを使うアプリでは、response.outputを確認し、メッセージ、関数呼び出し、検索などを種類ごとに処理します。

一方、通常の文章を画面へ表示するだけならresponse.output_textを使うと実装が簡潔です。

エラー処理を追加する

実運用では、認証エラー、レート制限、通信障害などが起こります。すべてを成功前提にせず、ユーザーへ再試行可能な状態を返します。

from openai import OpenAI, APIConnectionError, RateLimitError

client = OpenAI()

try:
    response = client.responses.create(
        model="gpt-5.6",
        input="要点を3つにまとめてください。",
    )
    print(response.output_text)
except RateLimitError:
    print("アクセスが集中しています。少し待って再試行してください。")
except APIConnectionError:
    print("APIへ接続できませんでした。通信状態を確認してください。")

本番環境では、APIキー、入力全文、個人情報をそのままログへ残さないようにします。

よくあるつまずき

output_textが空に見える

ツール呼び出しなどが含まれる場合、確認すべき情報がresponse.output側にあることがあります。各項目のtypeを確認してください。

APIキーを設定したのに認証エラーになる

Pythonを実行しているターミナルやサーバーへ、環境変数が引き継がれているか確認します。IDE、コンテナ、クラウド環境では、それぞれのシークレット設定が必要です。

previous_response_idを渡しても話がつながらない

別の会話のIDを渡していないか、直前のresponse.idを保存できているか確認します。ステートレス運用を選ぶ場合は、必要な履歴と出力項目を次のinputへ含めます。

コストが想定より増える

長い入力、長い会話、高性能モデル、Web検索などのツール利用が主な確認ポイントです。入力と出力のトークン数、ツール呼び出し回数をログで追跡します。

実運用前のチェックリスト

  • [ ] APIキーをコードや公開リポジトリへ書いていない
  • [ ] 入力文字数と出力上限を決めた
  • [ ] タイムアウトと再試行回数を決めた
  • [ ] ユーザーごとに会話IDを分離した
  • [ ] ツール利用の料金と待ち時間を確認した
  • [ ] 外部送信・購入・削除・公開の前に承認を入れた
  • [ ] レート制限と通信障害をテストした
  • [ ] ログからAPIキーと個人情報を除いた

まとめ

Responses APIの最小構成は、client.responses.create()modelinputを渡し、response.output_textを読む形です。

まずは文章生成だけで動かし、次に次の順番で機能を追加すると理解しやすくなります。

  1. instructionsで回答方針を分離する
  2. previous_response_idで会話を続ける
  3. web_searchなどの組み込みツールを追加する
  4. response.outputを種類別に処理する
  5. エラー処理、ログ、コスト監視を加える

ツールを使う独自エージェントへ進む場合は、Function Callingの記事と組み合わせると、Responses APIをアプリの処理へ接続できます。

参考資料

コメント

タイトルとURLをコピーしました