Skip to main content
Vertex AI 上の Gemini は、独自に用意した検索APIを呼び出し、その結果をグラウンディングのソースとして使用できます。このガイドでは、Gemini のリクエストを Firecrawl 検索 に変換し、Gemini が想定する形式で結果を返す簡単なアダプターを Cloud Run にデプロイします。
Google ではこの機能を Grounding with your search API として紹介しています。このガイドのアダプターはご自身の Google Cloud プロジェクト内で動作し、アダプターが実行する検索の料金はご自身の Firecrawl アカウントに請求されます。

仕組み

  1. Gemini へのリクエストには、アダプターを指す externalApi 型の取得 (retrieval) ツールを含めます。
  2. Gemini は情報が必要になると、キーを ?key= として付加し、アダプターに POST {"query": "..."} を送信します。
  3. アダプターは Firecrawl の /v2/search を呼び出し、snippet と uri を持つオブジェクトの JSON 配列を返します。空の配列は結果がないことを示します。
  4. Gemini はスニペットをグラウンディングのソースとして使用し、レスポンスの groundingMetadata に一覧で示します。

前提条件

  • Firecrawl APIキー
  • 課金、Vertex AI、Cloud Run が有効化され、gcloud CLI にサインイン済みの Google Cloud プロジェクト
  • 独自の検索APIによるグラウンディングに対応した Gemini モデル。対応モデルの一覧は上記リンク先のページで Google が公開しており、gemini-2.5-flash もそのひとつです。

アダプターをビルドする

フォルダーを作成し、次の 3 つのファイルを配置します。
アダプターは ?key= からキーを読み取り、そのキーをベアラートークンとして Firecrawl に送信します。そのため、Gemini に渡す apiKeyString には Firecrawl APIキーを指定します。キーが指定されていない場合や拒否された場合は 401 を返します。アクセスログを有効にすると ?key= の値が記録されてしまうため、Dockerfile ではアクセスログを無効にした状態で gunicorn を起動します。アダプターがクエリやキーを書き出すことはありません。

Cloud Run へのデプロイ

このコマンドを実行すると、サービスの URL が出力されます。エンドポイントは、その URL の末尾に /v0/search を付けたものです。Gemini はこの呼び出しに Google の ID トークンを付与できないため、サービスでは認証なしのリクエストを許可し、?key= による確認でアクセスを制御します。

Firecrawl キーを URL に含めない

Cloud Run はサービスごとにリクエストログを保持しており、そこにはリクエスト URL も記録されます。Firecrawl キーがログに残らないようにするには、アダプターを gateway モードで実行してください。このモードでは、Gemini が送信する共有シークレットを自分で選択し、アダプターは Secret Manager に保存された Firecrawl キーを使用します。
サービスのランタイムサービスアカウントに、両方のシークレットに対する roles/secretmanager.secretAccessor ロールを付与します。このモードでは apiKeyString はゲートウェイのシークレットとなり、gcloud secrets versions access latest --secret grounding-gateway-key で取得できます。

エンドポイントを確認する

snippet と uri を含むオブジェクトの配列が返されます。?key= を付けずにリクエストすると、サービスは 401 を返します。

Gemini リクエストをグラウンディングする

YOUR_SERVICE_URL はサービスのホストに、YOUR_KEY は Firecrawl APIキー(gateway モードでデプロイした場合は ゲートウェイシークレット)に置き換えてください。global 以外のリージョンを使用する場合は、Google のリファレンスと同様に LOCATION-aiplatform.googleapis.com をホストに指定します。 Gemini が使用したソースは、レスポンスの candidates[0].groundingMetadata.groundingChunks に格納されます。REST レスポンスでは、各チャンクの retrievedContext に、アダプターが返した uri と snippet が含まれます。

オプション

これらは Cloud Run サービスの環境変数として設定します (例: gcloud run services update firecrawl-grounding --update-env-vars RESULT_LIMIT=5) 。

スニペットの選択

Gemini はスニペットのテキストに基づいてグラウンディングを行うため、リンクよりもスニペットの内容のほうが重要です。デフォルトでは、Firecrawl の検索が返す説明を使用します。検索はデフォルトでこのフィールドに query に関連するハイライト を返し、ハイライトを生成できない場合はページの通常の説明にフォールバックします。そのため、各スニペットは query に合わせて選ばれた本文箇所になります。markdown モードは各結果のメインコンテンツの先頭部分を取得しますが、サイトによっては記事の前にバナーやメニューが配置されているため、通常はデフォルトより不利な選択肢です。また、Firecrawl の各レスポンスのサイズも大幅に増加します。対象とする結果に有用な説明がない場合に使用してください。

制限と動作

  • Google では、1 回の生成リクエストで最大 10 個のグラウンディングソースを使用でき、このツールを Google Search などの他のツールと組み合わせることもできます。
  • Google のページには、エンドポイントの最大レスポンスサイズやタイムアウトは記載されていません。アダプターの処理は高速に保ち、スニペットは短くしてください。デフォルト設定では、1 つのレスポンスに含まれるスニペットは最大 10 件で、各 1,200 文字までです。
  • Firecrawl の検索で受け付けるクエリは最大 500 文字です。これより長いクエリは、アダプターによって 500 文字に切り詰められます。
  • 1 つのクエリが 1 件の Firecrawl 検索リクエストになるため、Gemini が行う検索のすべてに レート制限 と 課金 が適用されます。
  • Gemini は、実行すると判断した検索ごとにアダプターを 1 回呼び出します。1 つのリクエストで複数回呼び出されることもあります。