今回は、OpenAIが開発者向けに発表した「Responses API」について確認していきます。
OpenAIは、従来のChat Completions APIやAssistants APIを拡張する形で、「Responses API」と、「Agents SDK」の発表を行いました。
Agents SDKについては、こちらの記事を参考にしてください。
Responses APIでは、各種AIモデルと組み込みツールを簡単に組み合わせてAIエージェントを構築するためのAPIとして発表されています。
そこで、Responses APIの各種機能について順に確認していきます。
Responses APIの主な機能と特徴
Responses APIは、OpenAIが提供する最新のAPIで、従来のAPIであるChat Completions APIやAssistants APIの機能を統合し、さらに拡張した形で提供されています。
Responses APIの主な機能や特徴は以下の通りです。
機能 | 概要 |
ツールの統合 | Responses APIは、Web検索、ファイル検索、コンピュータ操作などのツールを統合して提供している |
マルチステップ推論 | 複数の思考プロセスを一度のAPI呼び出しで処理することが可能 OpenAI Agents SDKと連携しエージェントシステムの作成ができる |
リアルタイムストリーミング | Responses APIは、応答を部分的に逐次受信することで、リアルタイム性の高いインタラクションを実現 |
会話の管理 | previous_response_idを使用して、サーバー側で会話のコンテキストを維持し、マルチターンの対話を自然に実現。 開発者は会話履歴全体を管理する手間を省くことができる |
組み込みツールの詳細
Responses APIは、AIエージェントの開発をより効率的かつ柔軟に行うための強力なツールを提供しています。
以下に、組み込みツールである「Web検索ツール」「ファイル検索ツール」「コンピュータ操作ツール」を順に確認していきます。
Web検索ツール
Web検索ツールは、エージェントがインターネット上の最新情報をリアルタイムで取得し、ユーザーの質問に対して最新のデータに基づいた回答を提供するための機能です。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
)
# Responses APIの呼び出し
response = client.responses.create(
model="gpt-4o",
tools=[{"type": "web_search_preview"}],
input="今日の大阪の天気を教えてください。"
)
# 応答の表示
print(response.output_text)
このコードでは、gpt-4o
モデルとweb_search_preview
ツールを使用して、今日の天気情報を取得しています。
結果としては、以下のように出力されました。
本日、2025年3月16日(日)の大阪の天気は、雨や霧雨が予想されています。最高気温は13℃、最低気温は4℃となる見込みです。現在の気温は9℃で、小雨が降っています。
また、明日3月17日(月)の午前0時から午後12時まで、吹田市では強風注意報と雷注意報が発表されています。これらの注意報は、気象庁によるもので、強風や雷に対する警戒が必要です。
全国的に雨や雪の降る日曜日となり、大雨や大雪となるおそれもあるため注意が必要です。夜は九州などで風も強く吹く予想です。 ([news.biglobe.ne.jp](https://news.biglobe.ne.jp/domestic/0316/wth_250316_3194893302.html?utm_source=openai))
お出かけの際は、傘や雨具をお持ちいただき、強風や雷にも十分ご注意ください。
ファイル検索ツール
ファイル検索ツールは、ベクトルストアに登録された大量のドキュメントやデータセットから、関連情報を効率的に抽出するための機能です。
ファイル検索ツールを試すためには、ベクトルストアにデータの登録が必要になります。
以下その手順を記載します。
①ベクトルストアにアップロードするファイルを準備します。
今回は、OpenAIのファイル検索に関するページをコピーし2つのファイルを準備しました。
https://platform.openai.com/docs/guides/tools-file-search
②OpenAIのダッシュボードにStrageからCreate a vector storeを実行します。
その後、ファイルを「Add files」からアップロードし「Create」を押します。


③ファイルの作成ができたら、IDの値をvector_store_idsに入れて、以下のコードを実行します。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
)
response = client.responses.create(
model='gpt-4o',
input='ファイル検索の制限事項を教えてください',
tools=[{'type': 'file_search', 'vector_store_ids': ['ベクトルストアのID']}],
store=True
)
print(response.output_text)
上記コードにより、作成したベクトルデータベースからユーザの質問に関係のあるドキュメントをベクトル検索し、回答を作成してくれます。
結果としては、以下のように出力されました。
ファイル検索の制限事項は以下の通りです:
1. **プロジェクト全体のファイルサイズ**: すべてのファイルの合計サイズは100GBに制限されています。
2. **ベクターストアのファイル数**: 合計で10,000ファイルまでに制限されています。
3. **個々のファイルサイズ**: 各ファイルは最大512MBまでです(おおよそ500万トークン)。
コンピュータ操作ツール
コンピュータ操作ツールは、エージェントがユーザーの代わりにコンピュータ上のタスクを実行するための機能です。
これには、Webブラウザの操作やアプリケーションの制御などが含まれます。
このツールを使用すれば、例えば、エージェントが自動的にWebサイトをナビゲートし、情報を入力したり、予約を行ったりすることが可能です。
3/11に発表された時点では、「Computer use」を使用できるのは、Tier 3以上となっています。
(こちらについて、また使用できるようになったら触ってみます。)
会話状態の管理
従来のAPIでは、以下のように開発者が会話の履歴を、交互にuser/assistantメッセージを使用して管理する必要がありました。
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-4o",
input=[
{"role": "user", "content": "日本の都道府県は全部で一番人口が多いのは?"},
{"role": "assistant", "content": "日本の都道府県で一番人口が多いのは東京都です。"},
{"role": "user", "content": "その都道府県の人口は?"},
],
)
print(response.output_text)
Responses APIでは、サーバー側で会話の状態を自動的に管理することが可能となりました。
具体的には、初回のリクエストでstore=Trueを設定すると、会話の状態がサーバー側に保存されます。次回以降のリクエストで、前回の応答IDをprevious_response_idとして指定することで、会話のコンテキストを維持しながら新たな入力を送信できます。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
)
# 初回のリクエスト
response1 = client.responses.create(
model="gpt-4o",
input="日本の都道府県は全部で一番人口が多いのは?",
store=True # 応答を保存
)
print(response1.output_text)
# 次回のリクエスト
response2 = client.responses.create(
model="gpt-4o",
input="その都道府県の人口は?",
previous_response_id=response1.id # 前回の応答IDを指定
)
print(response2.output_text)
上記実行すると、response1.output_textは以下のように出力されました。
日本の都道府県で一番人口が多いのは東京都です。
response1.output_textの会話状態を保持したままのため、response2の「その都道府県」を東京の事と理解して、response2.output_textの回答が以下のように出力されました。
最新のデータによると、東京都の人口はおおよそ1,400万人以上です。ただし、具体的な数字は最新の統計を確認することをお勧めします。
ストリーミング応答
ストリーミング応答とは、AIモデルが応答を生成する際に、その結果を部分的に逐次送信する機能です。
これにより、応答全体が完成するのを待つことなく、リアルタイムで結果を受け取ることができます。
具体的には、stream=Trueの設定を行い出力します。
チャットボットを作成する際、ChatGPTと同じようなストリーミングの挙動をさせるときに使用することになりそうです。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
)
# ストリーミング応答のリクエスト
response = client.responses.create(
model="gpt-4o",
input="AIの将来について教えてください。",
stream=True # ストリーミングモードを有効にする
)
for event in response:
if event.type == 'response.output_text.delta':
print(event.delta, end='')
Responses APIの価格
APIの価格については、OpenAI公式で公開されています。
https://platform.openai.com/docs/pricing
Web search
モデル | 検索コンテキストサイズ | 価格(1000回あたり) |
gpt-4o/gpt-4o-search-preview | low | $30.00 |
gpt-4o/gpt-4o-search-preview | medium (default) | $35.00 |
gpt-4o/gpt-4o-search-preview | high | $50.00 |
gpt-4o-mini/gpt-4o-mini-search-preview | low | $25.00 |
gpt-4o-mini/gpt-4o-mini-search-preview | medium (default) | $27.50 |
gpt-4o-mini/gpt-4o-mini-search-preview | high | $30.00 |
File Search
ツール | 価格 |
ファイル検索ツール | 1000回あたり$2.50 |
ファイルストレージ | 1GB/日あたり$0.10(最初の1GBは無料) |
Computer Use
モデル | 価格 |
computer-use-preview | 入力:$3.00(100万トークンあたり) 出力:$12.00(100万トークンあたり) |
※2025/3/11発表時点
まとめ
Responses APIの各種機能について確認しました。
今回紹介した以外にも、多数の機能があり順に確認していく必要があると考えています。
今回発表された、「Responses API」と「Agents SDK」が活用されることにより、今後、AIエージェントが普及し、業務の効率化/自動化がますます普及していきます。
OpenAIの動画内でも発表されていましたが、2025年はAIエージェントが広がっていく年になると感じています。