1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenAI Responses APIのファイル検索機能をGoogle Colabで試してみよう

Posted at

こんにちは!今回はOpenAIの新しいResponses APIのファイル検索ツールをGoogle Colabで実際に試してみる方法を紹介します。カレーレシピ情報を活用したハンズオン形式で、実用的なデモを作っていきましょう。

1. はじめに: Responses APIとファイル検索ツールとは?

image.png

OpenAIが2025年3月に発表した新しい「Responses API」は、Chat Completions APIのシンプルさとAssistants APIのツール利用機能を統合したものです。

ファイル検索ツールはResponses APIの重要な機能の一つで、大量のドキュメントから関連情報を抽出できます。この仕組みは「RAG (Retrieval Augmented Generation)」と呼ばれる手法のOpenAI版実装です。複数のファイル形式に対応し、クエリ最適化、メタデータ絞り込み、カスタムリランキングなど高度な機能も提供されています。

今回は「カレーレシピ情報」をファイルとして用意し、そこから情報を検索・抽出する例を実装します。

2. Google Colabでの環境準備

まずはGoogle Colabで環境を整えましょう。

# OpenAI APIキーの設定
import os
from google.colab import userdata

# APIキーを設定(Colabのシークレット機能を使用)
api_key = userdata.get('OPENAI_API_KEY')
os.environ['OPENAI_API_KEY'] = api_key

# OpenAIライブラリのインストール
!pip install --upgrade openai

# クライアントの初期化
from openai import OpenAI
client = OpenAI(api_key=os.environ.get('OPENAI_API_KEY'))

注意: Google Colabでシークレット変数を設定するには、左側のメニューから「🔑シークレット」を選び、OPENAI_API_KEYという名前で自分のAPIキーを追加してください。

3. カレーレシピデータを準備する

image.png

まずは複数のカレーレシピを含むテキストファイルを作成し、それをOpenAIのシステムにアップロードします。

# カレーレシピのテキストファイルを作成
curry_recipes = """
# 基本のカレー
材料(4人前):
- 豚肉 300g
- たまねぎ 2個
- にんじん 1個
- じゃがいも 2個
- カレールー 1箱
- 水 800ml
- 油 大さじ1
- 塩こしょう 少々

作り方:
1. 野菜と肉を一口大に切る
2. 鍋に油をひき、肉を炒める
3. 肉の色が変わったら野菜を加えて炒める
4. 水を加えて20分煮込む
5. 火を止め、ルーを割り入れて溶かす
6. 弱火で5分煮込んで完成

# ベジタリアンカレー
材料(4人前):
- なす 2個
- ズッキーニ 1本
- パプリカ(赤・黄) 各1個
- たまねぎ 2個
- トマト 2個
- ココナッツミルク 200ml
- カレー粉 大さじ2
- クミン 小さじ1
- ターメリック 小さじ1
- 塩 小さじ1
- オリーブオイル 大さじ2

作り方:
1. 野菜を全て一口大に切る
2. 鍋にオリーブオイルを熱し、たまねぎを透き通るまで炒める
3. スパイス類を加えて香りが出るまで炒める
4. 他の野菜を加えて5分炒める
5. ココナッツミルクと水100mlを加え、15分煮込む
6. 塩で味を調えて完成

# チキンカレー
材料(4人前):
- 鶏もも肉 400g
- たまねぎ 2個
- にんにく 2片
- しょうが 1片
- トマト 2個
- プレーンヨーグルト 100g
- カレー粉 大さじ2
- ガラムマサラ 小さじ1
- クミン 小さじ1
- コリアンダー 小さじ1
- ターメリック 小さじ1/2
- 塩 小さじ1
- サラダ油 大さじ2

作り方:
1. 鶏肉を一口大に切る
2. たまねぎ、にんにく、しょうがをみじん切りにする
3. トマトは角切りにする
4. 鍋に油を熱し、たまねぎ、にんにく、しょうがを炒める
5. スパイス類を加えて香りが出るまで炒める
6. 鶏肉を加えて炒め、色が変わったらトマトを加える
7. 5分ほど炒めたらヨーグルトを加え、水100mlを足す
8. 弱火で20分煮込み、塩で味を調える
9. ガラムマサラを振りかけて完成

# シーフードカレー
材料(4人前):
- えび 200g
- いか 200g
- たまねぎ 1個
- にんじん 1本
- ピーマン 2個
- カレー粉 大さじ2
- ココナッツミルク 200ml
- レモングラス 1本
- にんにく 2片
- 魚醤 小さじ1
- 砂糖 小さじ1
- 塩 小さじ1/2
- オリーブオイル 大さじ2

作り方:
1. えびは殻をむき、いかは一口大に切る
2. 野菜も一口大に切る
3. レモングラスは軽くつぶし、にんにくはみじん切りにする
4. 鍋にオリーブオイルを熱し、レモングラスとにんにくを炒める
5. たまねぎを加えて透き通るまで炒め、カレー粉を加える
6. 他の野菜を加えて3分炒める
7. ココナッツミルクと水100mlを加え、10分煮込む
8. 魚醤、砂糖、塩で味を調える
9. えびといかを加え、3分煮込んで完成
"""

# テキストファイルとして保存
with open('curry_recipes.txt', 'w', encoding='utf-8') as f:
    f.write(curry_recipes)

print("カレーレシピファイルを作成しました!")

4. ファイル検索ツールを使ってみる

次に、作成したレシピファイルをOpenAIにアップロードし、ベクトルストアを準備します。

import time

# テキストファイルをアップロード
file = client.files.create(
    file=open('curry_recipes.txt', 'rb'),
    purpose="assistants",
)

print(f"ファイルをアップロードしました: {file.id}")

# ベクトルストアを作成し、ファイルを登録
vector_store = client.vector_stores.create(
    name="curry-recipes",
    file_ids=[file.id],
)

print(f"ベクトルストアを作成しました: {vector_store.id}")

# ベクトルストアが利用可能になるまで待つ
while True:
    status = client.vector_stores.retrieve(vector_store.id).status
    print(f"ベクトルストア状態: {status}")
    if status == "completed":
        break
    time.sleep(2)

print("ベクトルストアの準備が完了しました!")

これで準備完了です。ファイル検索ツールを使って、レシピに関する質問をしてみましょう。

def ask_about_curry(question):
    """レシピに関する質問をする関数"""
    print(f"質問: {question}")
    print("回答を取得中...")
    
    response = client.responses.create(
        model="gpt-4o",
        tools=[{"type": "file_search", "vector_store_ids": [vector_store.id]}],
        input=question
    )
    
    print("\n回答:")
    print(response.output_text)
    return response.output_text

# いくつか質問してみる
ask_about_curry("ベジタリアン向けのカレーレシピはありますか?材料を教えてください。")

出力例:

image.png

質問: ベジタリアン向けのカレーレシピはありますか?材料を教えてください。
回答を取得中...

回答:
ベジタリアン向けのカレーの材料は以下の通りです:

- なす: 2個
- ズッキーニ: 1本
- パプリカ(赤・黄): 各1個
- たまねぎ: 2個
- トマト: 2個
- ココナッツミルク: 200ml
- カレー粉: 大さじ2
- クミン: 小さじ1
- ターメリック: 小さじ1
- 塩: 小さじ1
- オリーブオイル: 大さじ2

これで、美味しいベジタリアンカレーを作ることができます!
ベジタリアン向けのカレーの材料は以下の通りです:\n\n- なす: 2個\n- ズッキーニ: 1本\n- パプリカ(赤・黄): 各1個\n- たまねぎ: 2個\n- トマト: 2個\n- ココナッツミルク: 200ml\n- カレー粉: 大さじ2\n- クミン: 小さじ1\n- ターメリック: 小さじ1\n- 塩: 小さじ1\n- オリーブオイル: 大さじ2\n\nこれで、美味しいベジタリアンカレーを作ることができます!

5. 複数の質問を試してみる

様々な角度からカレーレシピについて質問してみましょう。

# 質問リスト
questions = [
    "シーフードカレーの作り方を教えてください。",
    "チキンカレーとシーフードカレーの違いは何ですか?",
    "全てのレシピに共通して使われるスパイスはありますか?",
    "カレーの種類の中で最も簡単に作れるのはどれですか?その理由も教えてください。",
    "ココナッツミルクを使うレシピはどれですか?"
]

# 全ての質問を順番に実行
for q in questions:
    print("\n" + "="*50)
    ask_about_curry(q)
    print("="*50)

image.png

6. カレーレシピアシスタントを作る

次に、ユーザーが対話形式で質問できる簡単なアシスタントを作ってみましょう。

def curry_recipe_assistant():
    """カレーレシピについて対話形式で質問できるアシスタント"""
    print("🍛 カレーレシピアシスタントへようこそ!")
    print("カレーレシピについて質問してください。終了するには 'exit' と入力してください。")
    
    while True:
        user_input = input("\n質問を入力してください: ")
        
        if user_input.lower() in ['exit', 'quit', '終了']:
            print("アシスタントを終了します。お役に立てて嬉しかったです!")
            break
            
        response = client.responses.create(
            model="gpt-4o",
            tools=[{"type": "file_search", "vector_store_ids": [vector_store.id]}],
            input=user_input
        )
        
        print("\n回答:")
        print(response.output_text)

# アシスタントを起動
curry_recipe_assistant()

image.png

7. 応用: より複雑な質問と検索

より複雑な質問をして、AIがどのように情報を抽出するか試してみましょう。

# より複雑な質問のリスト
advanced_questions = [
    "どのカレーレシピが最も短時間で作れますか?調理時間を教えてください。",
    "ココナッツミルクを使っているレシピは何種類ありますか?それぞれの名前を教えてください。",
    "材料リストでスパイスの種類が最も多いレシピはどれですか?",
    "全ての種類のカレーでよく使われている食材トップ3は何ですか?",
    "肉を使わないレシピはありますか?もしあれば、その代わりに何を使っていますか?"
]

# 複雑な質問を試す
for question in advanced_questions:
    print("\n" + "="*60)
    ask_about_curry(question)
    print("="*60)

image.png

この実行結果から、ファイル検索ツールがいかに柔軟に情報を抽出できるかがわかります。特に注目すべきなのは:

  1. カレーの種類ごとの特徴の比較
  2. 複数のレシピにまたがる共通点の抽出
  3. レシピの内容を理解した上での質問応答

これは、単純なキーワード検索ではなく、文脈を理解した検索が行われていることを示しています。

# カレーレシピ情報分析の例
def analyze_curry_recipes():
    """カレーレシピの全体的な分析をする関数"""
    print("カレーレシピの分析を行います...")
    
    response = client.responses.create(
        model="gpt-4o",
        tools=[{"type": "file_search", "vector_store_ids": [vector_store.id]}],
        input="""
        アップロードされたカレーレシピについて包括的な分析をしてください。
        以下の点について詳しく説明してください:
        1. 各レシピの主な特徴と違い
        2. 使用されるスパイスの共通点と相違点
        3. 調理時間の違い
        4. 栄養面での比較(可能であれば)
        5. どのレシピが初心者向けか、上級者向けか
        """
    )
    
    print("\n分析結果:")
    print(response.output_text)
    return response.output_text

# 分析を実行
analyze_curry_recipes()

8. まとめ

image.png

OpenAI Responses APIのファイル検索ツールは、ドキュメントに含まれる情報を効率的に検索・活用できる強力な機能です。今回はカレーレシピという親しみやすいテーマで試しましたが、この技術は以下のような実用的なシナリオで活用できます:

  • カスタマーサポートFAQボット
  • 社内マニュアル検索システム
  • 製品仕様書のインタラクティブナビゲーション
  • 研究論文や技術文書の検索・要約

主なメリット:

  • シンプルな API で複雑な RAG を実装可能
  • メタデータを使った高度な検索フィルタリング
  • クエリ最適化による精度の高い検索結果
  • 複数のファイル形式に対応

詳細な料金や制限については、OpenAI公式ドキュメントを参照してください。


参考リンク

注: この記事は2025年3月時点の情報に基づいています。APIの仕様は変更される可能性があるため、最新の公式ドキュメントを確認することをお勧めします。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?