OpenAI File Searchは、アップロードしたドキュメントをベクトルストアに格納し、モデルの回答に関連する箇所を自動で引っ張ってくるOpenAI公式のマネージドRAG(検索拡張生成)機能です。自前で埋め込み計算やベクトルデータベースを組まなくても、数十行のコードで社内文書に基づく回答を返せます。ただし2024年に登場したAssistants API版のFile Searchは2026年8月26日に廃止され、現在の実装先はResponses APIのfile_searchツールへ移っています。この記事では、仕組み・実装コード・対応ファイル形式・料金・上限を一次情報ベースで整理し、自前RAGとどちらを選ぶべきかまで踏み込みます。
まとめ:OpenAI File Searchの要点
- 実体はResponses APIの
file_searchツール。ファイルアップロード→ベクトルストア登録→ツール指定の3ステップで動く。 - Assistants API版は2026年8月26日に廃止。新規実装はResponses APIで組み、既存のAssistants連携は移行が必要。
- 対応は文書・コード系のテキストのみ。PDF・Word・PowerPoint・Markdown・主要言語のソースは可。画像・音声・動画・Excel(.xlsx)・CSVは非対応。
- 料金は保管$0.10/GB/日(最初の1GBは無料)+ツール呼び出し$2.50/1,000回(Responses API)。
- 上限は1ファイル512MB・500万トークン。1ベクトルストアのファイル数は従来10,000だが、2025年11月以降に作成したストアは最大1億ファイルまで拡大された。既定チャンクは800トークン・重複400トークン。
- チャンク戦略やリランクを細かく制御したい、既存のpgvector資産を使いたい場合は自前RAGが向く。
OpenAI File Searchの仕組みとResponses APIへの移行
File Searchは「セマンティック検索(意味の近さ)」と「キーワード検索」を組み合わせ、質問に関連するチャンクを取り出してモデルへ渡します。開発者が用意するのは検索対象のファイルだけで、チャンク分割・埋め込み計算・インデックス作成・リランク・引用付与はOpenAI側が担います。これがLangChainなどで自前構築するRAGとの最大の違いです。
アップロードから引用までのデータフロー
処理の流れは4段階です。第一に、ファイルをFiles APIへアップロードします。第二に、ベクトルストアを作成してファイルを登録すると、内部で既定800トークン単位のチャンクに分割され、埋め込みベクトルが生成されます。第三に、Responses APIのfile_searchツールにベクトルストアIDを渡して質問を投げると、関連チャンクが検索されモデルの入力に補われます。第四に、回答にはどのファイルのどの位置を根拠にしたかがannotations(引用)として返り、出典表示に使えます。
Assistants API版の廃止スケジュール(2026年8月26日サンセット)
File Searchは当初Assistants API(ベータ)のツールとして2024年に提供されましたが、OpenAIは2025年8月26日にAssistants APIの廃止を告知し、ちょうど1年後の2026年8月26日にすべてのAssistants APIエンドポイントを停止します。停止後は/v1/assistantsや/v1/threadsへの呼び出しが失敗するため、これから作るなら最初からResponses APIで実装すべきです。Chat Completions APIとの違いや移行の判断軸はOpenAI Responses APIとは|Chat Completions APIとの違いと移行判断で詳しく整理しています。
File Searchの実装手順(Responses API)
Python SDKでの最小構成を示します。SDKのインストールやクライアント初期化はOpenAI Python SDKの使い方を参照してください。
ベクトルストアの作成とファイルアップロード
from openai import OpenAI
client = OpenAI()
# 1. ファイルをアップロード
f = client.files.create(file=open("manual.pdf", "rb"), purpose="user_data")
# 2. ベクトルストアを作成し、ファイルを登録
vs = client.vector_stores.create(name="support_docs")
client.vector_stores.files.create(vector_store_id=vs.id, file_id=f.id)
登録直後はチャンク化と埋め込み生成が非同期で走ります。処理完了前に検索すると結果が空になるため、vector_stores.files.listでstatusがcompletedになるのを確認してから検索へ進むのが安全です。
file_searchツールの呼び出しと引用の取得
res = client.responses.create(
model="gpt-5.6",
input="返品ポリシーを教えて",
tools=[{"type": "file_search", "vector_store_ids": [vs.id]}],
)
print(res.output_text)
回答本文はoutput_text、根拠となったファイルと位置は出力メッセージのannotationsに入ります。検索でヒットしたチャンクの中身まで確認したいときは、リクエストにinclude=["file_search_call.results"]を付けると検索結果が展開されて返ります。
メタデータ属性による絞り込み
ファイル登録時に付与した属性(年度・部署・カテゴリなど)で検索範囲を限定できます。全社のベクトルストアから特定年度だけを引く、といった制御に有効です。
res = client.responses.create(
model="gpt-5.6",
input="2025年度の就業規程は?",
tools=[{
"type": "file_search",
"vector_store_ids": [vs.id],
"filters": {"type": "eq", "key": "year", "value": "2025"},
}],
)
対応ファイル形式と上限
File Searchが読めるのはテキスト抽出できる文書とソースコードのみです。旧来「画像・音声・動画も検索できる」と説明されることがありますが、公式の対応一覧にこれらは含まれません。画像や音声を扱うにはVision入力や音声認識APIを別途組み合わせる必要があります。表計算の.xlsxや.csvも対応外なので、表データはPDFやMarkdownに変換してから登録します。
| 区分 | 対応拡張子 |
|---|---|
| 文書 | .pdf / .docx / .doc / .pptx / .md / .txt / .tex / .html |
| ソースコード | .py / .js / .ts / .java / .c / .cpp / .cs / .go / .php / .rb / .sh / .css / .json |
| 非対応(主なもの) | 画像(.jpg .png) / 音声(.mp3) / 動画(.mp4) / 表計算(.xlsx .csv) |
テキストファイルの文字コードはUTF-8・UTF-16・ASCIIのいずれかである必要があります。容量とチャンクの上限は次のとおりです。
| 項目 | 上限・既定値 |
|---|---|
| 最大ファイルサイズ | 512 MB |
| 1ファイルの最大トークン | 500万トークン |
| 1ベクトルストアの最大ファイル数 | 従来10,000(2025年11月以降作成のストアは最大1億) |
| チャンクサイズ(既定) | 800トークン(指定可能範囲 100〜4,096) |
| チャンク重複(既定) | 400トークン(チャンクサイズの半分以下) |
File Searchの料金
課金は「ベクトルストアの保管量」と「検索ツールの呼び出し回数」の2本立てです。Assistants API時代は保管料のみでしたが、Responses APIでは呼び出しにも課金される点が実装コストの見積もりで見落としやすいポイントです。
| 項目 | 料金 |
|---|---|
| ベクトルストア保管 | $0.10 / GB / 日(最初の1GBは無料) |
| file_searchツール呼び出し(Responses API) | $2.50 / 1,000回 |
| Assistants API版の呼び出し | 追加課金なし(保管のみ・2026年8月廃止) |
保管料は無料枠1GBを超えた分に$0.10/GB/日がかかり、「量×日数」で毎日発生します。使い終わったベクトルストアを消さずに放置すると無駄なコストが積み上がるため注意が必要です。課金対象が1GB分あれば月あたり約$3、検索を月10万回呼べばツール料が$250という規模感で、呼び出し回数が多いサービスでは呼び出し料が支配的になります。最新の単価は変動しうるため、本番前にOpenAI公式の料金ページで確認してください。
File Searchを使うべき場面・自前RAGにすべき場面
File Searchの価値は「RAGの面倒な部分を丸ごと肩代わりしてくれる」ことに尽きます。逆に言えば、その肩代わりされた部分を自分で握りたいケースには向きません。判断軸をはっきりさせます。
File Searchが向く場面。社内マニュアルやFAQに基づくチャットボットを短期間で立ち上げたい、検索精度のチューニングよりも運用の手離れを優先したい、ドキュメント量が数千ファイル規模に収まる——こうした「標準的なRAGを素早く動かす」用途では、埋め込みモデルの選定もインフラ運用も不要なFile Searchが最短です。
自前RAGにすべき場面。チャンク分割のロジックを文書構造に合わせて作り込みたい、リランクや検索アルゴリズムを差し替えたい(たとえば複数の検索結果を統合するRRF(Reciprocal Rank Fusion)や、検索と生成を反復するAgentic RAGの構成)、すでにpgvectorやElasticsearchなどのベクトル基盤に投資している、画像・音声を含む——これらはFile Searchの抽象化がかえって制約になります。ベクトルストアの中身やチャンク境界を細かく制御できないため、精度の最後の数%を詰める段階では自前実装に軍配が上がります。迷ったら、まずFile Searchで最小構成を作り、精度要件を満たせない部分だけ自前に置き換える二段構えが現実的です。
よくある質問
OpenAI File Searchとは何ですか?
アップロードした文書をベクトルストアに格納し、質問に関連する箇所を自動検索してモデルの回答に補うOpenAI公式のマネージドRAG機能です。現在はResponses APIのfile_searchツールとして提供されています。
Assistants APIのFile Searchは今後も使えますか?
使えません。Assistants APIは2026年8月26日に廃止され、以降はエンドポイントが停止します。新規はResponses APIで実装し、既存のAssistants連携はResponses API・Conversations APIへ移行してください。
画像やExcelファイルも検索できますか?
できません。対応するのはPDF・Word・PowerPoint・Markdown・テキストと主要言語のソースコードで、画像・音声・動画・Excel(.xlsx)・CSVは対応外です。表データはPDFやMarkdownへ変換して登録します。
料金はいくらかかりますか?
ベクトルストアの保管が$0.10/GB/日(最初の1GBは無料)、Responses APIでのツール呼び出しが$2.50/1,000回です。呼び出し回数が多いサービスほど呼び出し料が中心になります。
ベクトルストアとは何ですか?
ファイルをチャンクに分割し、埋め込みベクトルとして保存する検索用のデータストアです。File Searchはこのベクトルストアを検索対象として、意味の近い箇所を取り出します。1ストアあたりのファイル数上限は従来10,000でしたが、2025年11月以降に作成したストアでは最大1億ファイルまで引き上げられています。