Suchergebnisse mit VertexRanker neu ordnen

Agent Retrieval (ehemals Vektorsuche 2.0) bietet VertexRanker für das semantische Ranking, das von der Ranking API unterstützt wird.

Nachdem Agent Retrieval Kandidatenergebnisse abgerufen und zusammengeführt hat (mithilfe von Reciprocal Rank Fusion (RRF)), bewertet VertexRanker die zusammengeführten Kandidaten anhand Ihrer Suchanfrage in natürlicher Sprache mit einem speziellen semantischen Modell neu. Dadurch wird die Relevanz der Top-k-Ergebnisse verbessert, insbesondere bei Suchanfragen, bei denen die Suche allein keine Nuancen berücksichtigt. Das Ranking erfolgt serverseitig mit Aufrufen von BatchSearchDataObjects. Es sind keine zusätzlichen clientseitigen Verbindungen oder zusätzlichen Roundtrips erforderlich.

VertexRanker

VertexRanker ist als Reranker für das Feld combine.ranker des Objekts BatchSearchDataObjectsRequest konfiguriert. Sie müssen einen primären Ranker konfigurieren (nur RRF wird unterstützt). Der Reranker wird nach dem RRF-Zusammenführungsschritt ausgeführt und ersetzt die Ausgabe durch die semantisch neu bewertete Liste.

In der folgenden Tabelle sind die Felder für die Ranker-Konfiguration aufgeführt.

Feld Erforderlich Beschreibung
combine.ranker.rrf.weights Ja Die Gewichtungen für die RRF-Zusammenführung der zugrunde liegenden Suchergebnisse.
combine.ranker.vertex_ranker.model Ja Der Name des Ranking-Modells. Unterstützte Werte: semantic-ranker-fast@latest, semantic-ranker-default@latest, semantic-ranker-fast-004, semantic-ranker-default-004. Weitere Informationen zu den einzelnen Modellen finden Sie unter Ranking API-Modelle.
combine.ranker.vertex_ranker.top_n Ja Die maximale Anzahl von Kandidaten aus der zusammengeführten Liste, die an den Ranker gesendet werden sollen. Gültige Werte sind 1 bis 1000.
combine.ranker.vertex_ranker.text_record_spec.query Ja Die Suchanfrage in natürlicher Sprache, die vom Ranker zum Bewerten von Datensätzen verwendet wird.
combine.ranker.vertex_ranker.text_record_spec.title_template Ja Der Vorlagenstring, z. B. {title}, der angibt, wie der Titel für jeden Datensatz extrahiert (erstellt) werden soll. Verwenden Sie Punktpfade, um Datenfelder anzugeben.
combine.ranker.vertex_ranker.text_record_spec.content_template Ja Der Vorlagenstring, z. B. {body.text}, der angibt, wie der Hauptinhalt für jeden Datensatz extrahiert (erstellt) werden soll. Verwenden Sie Punktpfade, um Datenfelder anzugeben.
combine.top_k Optional Die endgültige Anzahl der Ergebnisse, die nach dem Ranking zurückgegeben werden sollen. Dieser Wert muss kleiner oder gleich vertex_ranker.top_n und kleiner oder gleich 1000 sein.

Das folgende Beispiel zeigt den Text einer Anfrage.

{
  "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}"
        }
      }
    }
  }
}

Vorlagen verwenden Punktpfade zu Datenfeldern von Datenobjekten, z. B. {title} oder {nested.field}. Diese Felder müssen im Collections-Schema vorhanden sein. Andernfalls wird die Anfrage bei der Validierung abgelehnt. Wenn in einem Datenobjekt das angegebene Feld fehlt, ruft der Server den vollständigen Datensatz transparent aus dem Speicher ab, damit die Vorlage trotzdem ausgefüllt werden kann.

Kontingent und Preise

VertexRanker in Agent Retrieval verwendet ein kostenloses Kontingent mit nutzungsabhängiger Abrechnung bei Überschreitung. Jedes Projekt erhält ein kostenloses Kontingent für die Ranking-Nutzung pro 30-Tage-Zeitraum. Für die Nutzung innerhalb dieses Kontingents fallen keine Kosten an. Für die Nutzung über dieses Kontingent hinaus gelten die Standardpreise der Ranking API für das Nutzerprojekt.

In der folgenden Tabelle sind die Kontingentwerte aufgeführt.

Element Wert
Kostenloses Kontingent 80.000 Ranking-Einheiten pro Nutzerprojekt und 30-Tage-Zeitraum.
Überschreitung Wird zum Standardpreis der Ranking API für das Nutzerprojekt in Rechnung gestellt.
Maximale Anzahl von Datensätzen pro Ranking-Aufruf 1000 (top_n muss im Bereich [1, 1000] liegen und top_k <= top_n).

Wenn Sie das kostenlose Kontingent erreichen, schlagen Ihre Anfragen nicht fehl. Nachdem das Kontingent von 80.000 Ranking-Einheiten aufgebraucht ist, wird die weitere Nutzung von VertexRanker weiterhin erfolgreich ausgeführt und als Überschreitung in Rechnung gestellt. Das Kontingent wird 30 Tage nach der ersten Nutzung zurückgesetzt.

Ranking-Einheiten werden anhand der Anzahl der an den Ranker gesendeten Datensätze und der Größe der Titel- und Inhaltsvorlagen berechnet. Dabei wird dieselbe Abrechnung wie bei der eigenständigen Ranking API verwendet. Ausführliche Informationen finden Sie unter Preise für die Ranking API.

Bevor Sie VertexRanker verwenden können, muss die Discovery Engine im Nutzerprojekt aktiviert sein. Weitere Informationen finden Sie unter Fehlerbedingungen.

Fehlerbehandlung und Warnungen

VertexRanker ist ein Reranker, bei dem das Best-Effort-Prinzip gilt. Wenn der Ranking-Aufruf fehlschlägt, wird der BatchSearchDataObjects-RPC trotzdem erfolgreich ausgeführt und gibt die RRF-zusammengeführten Ergebnisse zurück, die auf top_k gekürzt wurden. Der Fehler wird im Feld search_response_metadata.warnings in der Antwort gemeldet. Der vollständige Statuscode der Ranking API bleibt erhalten. Der Warnungscode für unerwartete Status ist UNAVAILABLE mit der Warnmeldung: "Reranking is temporarily unavailable. Returning fused (RRF) results without semantic reranking."

Fehlerbedingungen

Der gesamte BatchSearchDataObjects-RPC schlägt mit FAILED_PRECONDITION fehl (kein Fallback auf RRF) in den folgenden Fällen.

  • Discovery Engine API nicht aktiviert : Die Ranking API gibt FAILED_PRECONDITION mit der Meldung Discovery Engine API is not enabled for the consumer project /<N/>. Please enable the API and try again." zurück. Lösung: Aktivieren Sie die Discovery Engine API im Nutzerprojekt.

Der Kunde muss die Discovery Engine für das Nutzerprojekt aktivieren, damit das Ranking erfolgen kann.

In der folgenden Tabelle sind Warnungscodes, die typischen Ursachen für die Warnungen und die Meldung zur Erklärung der Warnung aufgeführt.

Warnungscode Typische Ursache Warnmeldung
RESOURCE_EXHAUSTED Ein Kontingent der Ranking API für das Nutzerprojekt wurde überschritten. Hinweis: Wenn Sie das Kontingent von 80.000 Ranking-Einheiten überschreiten,wird diese Warnung nicht ausgelöst. Stattdessen wird die Überschreitung in Rechnung gestellt. <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 wurde nicht innerhalb der Frist der Anfrage abgeschlossen. <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 hat entweder UNAVAILABLE zurückgegeben oder einen nicht beibehaltenen Code (z. B. INTERNAL), der auf UNAVAILABLE reduziert wird. Wenn der zugrunde liegende Code UNAVAILABLE ist: "RankService.Rank call failed for consumer project...

Andernfalls: "Reranking is temporarily unavailable. Returning fused (RRF) results without semantic reranking."
FAILED_PRECONDITION Alle von der Ranking API zurückgegebenen 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 Der Aufrufer hat den BatchSearchDataObjects-RPC abgebrochen, bevor das Ranking abgeschlossen war. <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>