Responses APIで2回目の会話を続ける入門

CHATGPT / AIChatGPTなどの生成AIを活用して運営・記事制作・更新を行っています。制作方針

OpenAI公式SDKでResponses APIを1回呼び、output_textとresponse.idを確認して2回目へ引き継ぐ最短手順を解説します。API keyの扱い、成功確認、失敗時の戻し方、未実行の範囲も明記します。

1回目のResponse IDを2回目へ渡し、短い手順で継続会話を確認する流れ

先に結論

Responses APIで会話を続ける最短ルートは、公式SDKで1回目のResponseを作り、返ったresponse.idを2回目のprevious_response_idへ渡す方法です。この記事では、API keyをブラウザーへ出さず、短い入力でoutput_textとIDを確認するところまで進みます。実API呼び出しはこの制作環境では行っていません。

確認日時: 2026年8月20日(Asia/Tokyo)
対象仕様: OpenAI公式Developer quickstartとconversation state guideの現行記載。公式例のmodel名はgpt-5.6です。
検証区分: 公式資料に基づく机上調査・再現手順です。この制作環境ではAPI keyを使った接続、料金、応答時間、生成結果を実測していません。
適用外: ブラウザーへ秘密鍵を置く構成、個人情報を含む会話、tool callを含む本番の保持・監査設計。

始める前に知っておくこと

Responses APIは、入力を送ってResponse objectを受け取るAPIです。SDKのoutput_textは表示用のテキストを取り出す入口で、response.idは後続のResponseへ状態をつなぐ識別子です。ここでいう状態とは、アプリが前の入力や出力を次のリクエストへ関連付ける仕組みを指します。

  • API key: OpenAI公式quickstartに沿って環境変数から読みます。ソースコード、ブラウザー、画面共有へ書きません。
  • 実行場所: server-sideのPythonまたはNode.jsから呼びます。フロントエンドへ秘密鍵を埋め込む構成はこの手順の対象外です。
  • model: 公式例のgpt-5.6を示します。実際に利用できるmodelとアカウント条件は、実行時に公式models情報で確認してください。
  • 課金: 2回目へ前のResponse IDを渡しても、過去の入力tokenが入力として課金されると公式guideに記載されています。料金の数値はここでは断定しません。

最短手順:1回目のResponseを受け取る

まず公式SDKを隔離したPython環境へ導入し、API keyを実行環境のsecret managerなどから環境変数へ設定します。鍵の値はコマンドラインへ直接入力せず、リポジトリや記事へも保存しません。次の確認は値そのものを表示せず、環境変数が空でない場合だけ成功します。

python3 -m venv .venv-openai-responses
source .venv-openai-responses/bin/activate
python -m pip install openai
test -n "$OPENAI_API_KEY" && echo "OPENAI_API_KEY is set"

次のコードは、1回目のResponseに含まれる表示テキストとIDだけを確認する最小例です。API接続を実行したときに、IDを丸ごと記事やログへ公開しないでください。

from openai import OpenAI

client = OpenAI()

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

print(response.output_text)
print("response id:", response.id)

成功判定は「自然な回答だった」だけにしません。例外なくResponse objectを受け取ったこと、output_textが取り出せること、response.idが空でないことを個別に確認します。

2回目へResponse IDを渡す

1回目のIDを保存したまま、2回目のresponses.createprevious_response_id=response.idを追加します。公式guideの例と同じく、2回目の入力だけを新しく渡して前の文脈を参照させます。

from openai import OpenAI

client = OpenAI()

first_response = client.responses.create(
    model="gpt-5.6",
    input="日本語で、Responses APIを一文で説明してください。",
)

second_response = client.responses.create(
    model="gpt-5.6",
    previous_response_id=first_response.id,
    input="今の説明を、初心者向けにもう少し具体化してください。",
)

print("1回目:", first_response.output_text)
print("2回目:", second_response.output_text)

確認したいのは、2回目の呼び出しが成功することだけではありません。1回目のIDを別の文字列へ置き換えた場合に失敗すること、2回目の入力を変えたときにその入力が反映されることも、検証環境で安全な短文を使って確認します。これは会話の品質やモデルの正確性を保証するテストではありません。

つまずきやすい点と戻し方

API keyが見つからない

環境変数名、実行shell、仮想環境の有効化状態を確認します。鍵をコードへ貼り付ける回避策は使わず、問題が解決しなければ呼び出しを止めます。漏えいが疑われる場合は、OpenAIの管理画面で鍵を無効化し、新しい鍵を安全な保管場所から設定します。

2回目でIDを解決できない

まず同じclient設定、model、Response IDの取り違えがないか確認し、通常のHTTP呼び出しでは返されたAPI errorと保存設定を確認して処理を止めます。公式guideが、解決できないIDに対してprevious_response_idnullとし全コンテキストを渡す方法を明記しているのはResponses APIのWebSocket modeです。通常HTTPの汎用フォールバック保証として読み替えず、手動履歴へ切り替える場合も入力token、秘密情報、context windowを検証してから実装します。

途中でやめて元に戻す

この記事のコードはローカルの入力ファイルを書き換えません。実行を止める場合はプロセスを終了し、作成した仮想環境をこの手順専用のディレクトリとして扱います。共有cacheや別プロジェクトの設定をまとめて削除しないでください。

保存期間を選ぶときの次の一歩

Response IDの継続は便利ですが、状態の寿命やアクセス境界を自動で決めるものではありません。手動で履歴を送る方法、previous_response_id、Conversations APIの使い分けは、保存範囲・再開性・入力token課金で判断します。詳しい比較は同日公開の玄人向け検証記事にまとめています。

参考資料