AI

【AIエージェント】Responses APIの使い方、料金のご紹介

今回は、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-previewlow$30.00
gpt-4o/gpt-4o-search-previewmedium (default)$35.00
gpt-4o/gpt-4o-search-previewhigh$50.00
gpt-4o-mini/gpt-4o-mini-search-previewlow$25.00
gpt-4o-mini/gpt-4o-mini-search-previewmedium (default)$27.50
gpt-4o-mini/gpt-4o-mini-search-previewhigh$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エージェントが広がっていく年になると感じています。