Retrieval (File Search) ツールの設定とインデックス作成の仕組み

ユーザーが自分のドキュメントに基づいて回答するチャットボットを作りたい場合、以前はEmbeddings APIを使って自前でベクトルデータベースを構築する必要がありました。

しかし、OpenAI Assistants APIの File Search Tool(旧Retrieval)の登場により、その手間は過去のものとなりました。PDFやMarkdownファイルをアップロードするだけで、OpenAI側が勝手にチャンク分割、ベクトル化、検索を行ってくれます。

「魔法のようだ」と言われますが、裏側の仕組みを理解していないと、思わぬ落とし穴(コスト増加や精度低下)にハマります。

仕組み:Vector Stores の自動管理

File Searchを有効にすると、バックエンドで以下の処理が行われます。

  1. アップロード: ファイルをOpenAIのストレージにアップロードします。
  2. Vector Storeの作成: ファイル群を管理するコンテナ(Vector Store)を作成します。
  3. チャンク分割とEmbedding: アップロードされたファイルを一定のルールで分割し、ベクトル化してインデックスを作ります。
  4. 検索(Hybrid Search): ユーザーの質問に対して、キーワード検索とベクトル検索を組み合わせたハイブリッド検索を実行し、関連する箇所を抽出します。

設定の勘所

1. Vector Storeは使い回す

Assistantを作成するたびに新しいVector Storeを作ってファイルをアップロードし直していませんか?それはコスト(Storage料金)の無駄です。

同じファイルセットを使うなら、一度作ったVector Store IDを複数のAssistantで共有できます。例えば、「社内規定」というVector Storeを作り、それを「人事ボット」「経理ボット」の両方に紐付ける運用が正解です。

2. ファイル形式はMarkdownが最強

PDFはレイアウト崩れのリスクがあります。Wordは解析が遅いです。 可能であれば、テキストベースの構造化フォーマットであるMarkdownに変換してからアップロードすることをお勧めします。見出し(#)によるセマンティックな分割が効きやすく、検索精度が向上します。

3. 最大ファイル数と有効期限

1つのVector Storeには最大10,000ファイルまで格納できます。また、不要になったVector Storeには有効期限(Expiration Policy)を設定し、自動削除するように設定しておくと、予期せぬストレージ課金を防げます。

まとめ

File Searchは強力ですが、ブラックボックスでもあります。「どのようなロジックで分割されたか」を細かい制御はできません。

プロトタイプや社内ツールならFile Searchで十分ですが、ミリ秒単位のレスポンスや厳密な検索精度が求められる本番サービスでは、やはりPineconeやWeaviateを使った自前RAGへの移行を検討すべきでしょう。