VertexRanker を使用して検索結果を再ランキングする

Agent Retrieval(以前の ベクトル検索 2.0)は、セマンティック再ランク付けに VertexRanker を提供します。これは Ranking API を利用しています。

Agent Retrieval が候補の結果を取得して統合(Reciprocal Rank Fusion(RRF)を使用)すると、VertexRanker は専用のセマンティック モデルを使用して、統合された候補を自然言語クエリに対して再スコアリングします。これにより、特に検索だけではニュアンスが欠落するクエリの場合に、上位 k 個の結果の関連性が向上します。再ランク付けは、BatchSearchDataObjects の呼び出しを使用してサーバーサイドで行われます。追加のクライアントサイド配線や追加のラウンドトリップは必要ありません。

VertexRanker

VertexRanker は、BatchSearchDataObjectsRequest オブジェクトの combine.ranker フィールドの再ランク付けツールとして構成されます。プライマリ ランク付けツール(RRF のみサポート)を構成する必要があります。再ランク付けツールは RRF 統合ステップの後に実行され、出力がセマンティックに再スコアリングされたリストに置き換えられます。

次の表に、ランク付けツールの構成フィールドを示します。

フィールド 必須 説明
combine.ranker.rrf.weights はい 基盤となる検索結果の RRF 統合の重み。
combine.ranker.vertex_ranker.model はい ランキング モデル名。サポートされている値は、semantic-ranker-fast@latest、semantic-ranker-default@latest、semantic-ranker-fast-004、semantic-ranker-default-004 です。詳細については、Ranking API モデルをご覧ください。
combine.ranker.vertex_ranker.top_n はい ランク付けツールに送信する統合リストの候補の最大数。有効な値は 1~1000 です。
combine.ranker.vertex_ranker.text_record_spec.query はい ランク付けツールがレコードのスコアリングに使用する自然言語クエリ。
combine.ranker.vertex_ranker.text_record_spec.title_template はい テンプレート文字列(例: {title})。各レコードのタイトルを抽出(構築)する方法を指定します。ドットパスを使用してデータ フィールドを指定します。
combine.ranker.vertex_ranker.text_record_spec.content_template はい テンプレート文字列(例: {body.text})。各レコードのメイン コンテンツを抽出(構築)する方法を指定します。ドットパスを使用してデータ フィールドを指定します。
combine.top_k 省略可 再ランク付け後に返される結果の最終的な数。これは、vertex_ranker.top_n 以下で、1,000 以下にする必要があります。

次の例は、リクエストの本文を示しています。

{
  "searches": [
    { "semantic_search": { "search_text": "running shoes", "search_field": "embedding", "task_type": "RETRIEVAL_QUERY", "top_k": 50 } },
    { "text_search":     { "search_text": "running shoes", "data_field_names": ["title"], "top_k": 50 } }
  ],
  "combine": {
    "top_k": 10,
    "ranker": {
      "rrf": { "weights": [1.0, 1.0] },
      "vertex_ranker": {
        "model": "semantic-ranker-fast@latest",
        "top_n": 50,
        "text_record_spec": {
          "query": "running shoes",
          "title_template": "{title}",
          "content_template": "{body.text}"
        }
      }
    }
  }
}

テンプレートでは、データ オブジェクトのデータ フィールドにドットパス({title} や {nested.field} など)を使用します。これらのフィールドはコレクション スキーマに存在する必要があります。存在しない場合、検証中にリクエストが拒否されます。データ オブジェクトに指定されたフィールドがない場合、サーバーはストレージから完全なレコードを透過的に再取得するため、テンプレートに値を設定できます。

割り当てと料金

Agent Retrieval の VertexRanker は、使用量ベースの超過料金が請求される無料枠 を使用します。各プロジェクトには、30 日ごとにランキングの使用量の無料枠が付与されます。この割り当て内の使用量には料金はかかりません。この割り当てを超える使用量については、コンシューマ プロジェクトに標準のRanking API 料金 が適用されます。

次の表に、割り当て値を示します。

項目 値
無料枠 コンシューマ プロジェクトごとに 30 日あたり 80,000 ランキング ユニット。
超過料金 コンシューマ プロジェクトで標準の Ranking API 料金で請求されます。
再ランク付け呼び出しあたりの最大レコード数 1,000(top_n は [1, 1000] の範囲内、top_k <= top_n である必要があります)。

無料枠に達しても、リクエストは失敗しません。80,000 ランキング ユニットの割り当てが消費された後も、VertexRanker の使用は成功し、超過料金として請求されます。割り当ては、最初の使用から 30 日後にリセットされます。

ランキング ユニットは、ランク付けツールに送信されたレコードの数 と、タイトル テンプレートとコンテンツ テンプレートのサイズから、スタンドアロンの Ranking API と同じ 方法で計算されます。 詳細については、Ranking API の料金 をご覧ください。

VertexRanker を使用するには、コンシューマ プロジェクトで Discovery Engine を有効にする必要があります。詳細については、 失敗条件をご覧ください。

エラー処理と警告

VertexRanker はベスト エフォート型の再ランク付けツールです。ランキングの呼び出しが失敗した場合でも、BatchSearchDataObjects RPC は成功し、RRF で統合された結果が top_k に切り捨てられて返されます。失敗は、レスポンスの search_response_metadata.warnings フィールドで報告されます。Ranking API からの完全なステータス コードが保持されます。予期しないステータスの警告コードは UNAVAILABLEで、警告メッセージは "Reranking is temporarily unavailable. Returning fused (RRF) results without semantic reranking."です。

失敗条件

次の場合、BatchSearchDataObjects RPC 全体が FAILED_PRECONDITION で失敗します(RRF へのフォールバックはありません)。

  • Discovery Engine API が有効になっていない : Ranking API は FAILED_PRECONDITION を返します。 Discovery Engine API is not enabled for the consumer project /<N/>. Please enable the API and try again." 修正: コンシューマ プロジェクトで Discovery Engine API を有効にします。

再ランク付けを行うには、コンシューマ プロジェクトで Discovery Engine を有効にする必要があります。

次の表に、警告コード、警告を生成する一般的な原因、警告を説明するメッセージを示します。

警告コード 一般的な原因 警告メッセージ
RESOURCE_EXHAUSTED コンシューマ プロジェクトで Ranking API の割り当てを超過しました。注: 80,000 ランキング ユニットの割り当てを超過しても、この警告は発生しません。代わりに超過料金が請求されます。 <Quota exceeded message>; RankService.Rank call failed for consumer project <N> with request query: <query> and <model>: semantic-ranker-fast@latest number of records: <N>
DEADLINE_EXCEEDED Ranker.Rank がリクエストの期限内に完了しませんでした。 <deadline-exceeded message from Ranker.Rank>; RankService.Rank call failed for consumer project <N> with request query: <query> and <model>: semantic-ranker-fast@latest number of records: <N>
UNAVAILABLE Ranker.Rank が UNAVAILABLE を返したか、保持されていないコード(INTERNAL など)を返しました。これは UNAVAILABLE に折りたたまれます。 基盤となるコードが UNAVAILABLE の場合: "RankService.Rank call failed for consumer project...

それ以外の場合: "Reranking is temporarily unavailable. Returning fused (RRF) results without semantic reranking."
FAILED_PRECONDITION Ranking API から返された FAILED_PRECONDITION。 RankService.Rank call failed for consumer project <N> with request query: <query> and <model>: semantic-ranker-fast@latest number of records: <N>
CANCELLED 呼び出し元が、再ランク付けが完了する前に BatchSearchDataObjects RPC をキャンセルしました。 <cancellation message from the cancelled RankService.Rank RPC>; RankService.Rank call failed for consumer project <N> with request query: <query> and <model>: semantic-ranker-fast@latest number of records: <N>