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は、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つです。
OpenAI()は環境変数OPENAI_API_KEYを自動で読み込みます。- ユーザーからの依頼は
inputへ渡します。 - 最終的な文章は
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)




会話履歴を自分のデータベースで完全に管理したい場合は、過去の入力と出力項目をinputへ含めて送る方法もあります。
会話継続で覚えておきたい点
previous_response_idは会話をつなぐためのIDです。- 長い会話では、過去の入力トークンもコストへ影響します。
- ユーザーや会話ごとにレスポンスIDを分けて保存します。
- 別ユーザーのIDを混ぜないよう、サーバー側で所有者を検証します。
組み込みWeb検索を使う
toolsへweb_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()へmodelとinputを渡し、response.output_textを読む形です。
まずは文章生成だけで動かし、次に次の順番で機能を追加すると理解しやすくなります。
instructionsで回答方針を分離するprevious_response_idで会話を続けるweb_searchなどの組み込みツールを追加するresponse.outputを種類別に処理する- エラー処理、ログ、コスト監視を加える
ツールを使う独自エージェントへ進む場合は、Function Callingの記事と組み合わせると、Responses APIをアプリの処理へ接続できます。

コメント