Öffentlichen Index abfragen, um nächste Nachbarn abzurufen

Nachdem Sie den Index erstellt und bereitgestellt haben, können Sie Abfragen ausführen, um die nächsten Nachbarn zu ermitteln.

Im Folgenden finden Sie einige Beispiele für die Übereinstimmungsabfrage, um die nächstgelegenen Nachbarn mit dem Algorithmus „k-Nearest Neighbor“ (k-NN) zu finden.

Beispielabfragen für öffentlichen Endpunkt

Python

Python

def vector_search_find_neighbors(
    project: str,
    location: str,
    index_endpoint_name: str,
    deployed_index_id: str,
    queries: List[List[float]],
    num_neighbors: int,
) -> None:
    """Query the vector search index.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        index_endpoint_name (str): Required. Index endpoint to run the query
        against.
        deployed_index_id (str): Required. The ID of the DeployedIndex to run
        the queries against.
        queries (List[List[float]]): Required. A list of queries. Each query is
        a list of floats, representing a single embedding.
        num_neighbors (int): Required. The number of neighbors to return.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create the index endpoint instance from an existing endpoint.
    my_index_endpoint = aiplatform.MatchingEngineIndexEndpoint(
        index_endpoint_name=index_endpoint_name
    )

    # Query the index endpoint for the nearest neighbors.
    resp = my_index_endpoint.find_neighbors(
        deployed_index_id=deployed_index_id,
        queries=queries,
        num_neighbors=num_neighbors,
    )
    print(resp)

Curl

Die unten aufgeführte publicEndpointDomainName finden Sie unter Bereitstellen.


  $ curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" http://1957880287.us-central1-181224308459.vdb.vertexai.goog/v1/projects/181224308459/locations/us-central1/indexEndpoints/3370566089086861312:findNeighbors -d '{deployed_index_id: "test_index_public1", queries: [{datapoint: {datapoint_id: "0", feature_vector: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}, neighbor_count: 5}]}'
  

Dieses curl-Beispiel zeigt, wie von http(s)-Clients aufgerufen wird, wobei der öffentliche Endpunkt das Dual-Protokoll für "RESTful" und grpc_cli unterstützt.


  $ curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" http://1957880287.us-central1-181224308459.vdb.vertexai.goog/v1/projects/${PROJECT_ID}/locations/us-central1/indexEndpoints/${INDEX_ENDPOINT_ID}:readIndexDatapoints -d '{deployed_index_id:"test_index_public1", ids: ["606431", "896688"]}'
  

Console

Folgen Sie dieser Anleitung, um einen Index, der auf einem öffentlichen Endpunkt bereitgestellt wird, über die Console abzufragen.

  1. Wechseln Sie im Abschnitt „Vertex AI“ der Google Cloud Console zum Abschnitt Bereitstellen und verwenden. Wählen Sie Vektorsuche aus.

    Zur Vektorsuche

  2. Wählen Sie den Index aus, den Sie abfragen möchten. Die Seite Indexinformationen wird geöffnet.
  3. Scrollen Sie nach unten zum Abschnitt Bereitgestellte Indexe und wählen Sie den bereitgestellten Index aus, den Sie abfragen möchten. Die Seite Informationen zum bereitgestellten Index wird geöffnet.
  4. Wählen Sie im Abschnitt Abfrageindex Ihre Abfrageparameter aus. Sie können nach einem Vektor oder einem bestimmten Datenpunkt abfragen.
  5. Führen Sie die Abfrage mit dem bereitgestellten curl-Befehl oder mit Cloud Shell aus.
  6. Wenn Sie Cloud Shell verwenden, wählen Sie In Cloud Shell ausführen aus.
  7. In Cloud Shell ausführen
  8. Die Ergebnisse geben die nächsten Nachbarn zurück.

Ein End-to-End-Beispiel als Anleitung zum Erstellen eines Index, zum Bereitstellen auf einem öffentlichen Endpunkt und zum Abfragen finden Sie im offiziellen Notebook: Vektorsuche und Vertex AI Embeddings für Text bei StackOverflow-Fragen verwenden.

Einstellungen beim Abfragezeitpunkt, die sich auf die Leistung auswirken

Die folgenden Parameter für die Abfragezeit können sich bei der Verwendung der Vektorsuche auf Latenz, Verfügbarkeit und Kosten auswirken. Diese Empfehlung gilt in den meisten Fällen. Testen Sie jedoch immer mit Ihren Konfigurationen, ob sie sich für Ihren Anwendungsfall eignen.

Informationen zu Parameterdefinitionen finden Sie unter Parameter für die Indexkonfiguration.

Parameter Info Auswirkungen auf die Leistung
approximateNeighborsCount Gibt dem Algorithmus die Anzahl der ungefähren Ergebnisse an, die von jedem Shard abgerufen werden sollen.

Das Erhöhen des Werts von approximateNeighborsCount kann sich auf folgende Weise auf die Leistung auswirken:

  • Recall: Erhöht
  • Latenz: Möglicherweise erhöht
  • Verfügbarkeit: Keine Auswirkung
  • Kosten: Kann steigen, da während einer Suche mehr Daten verarbeitet werden

Wenn Sie den Wert von approximateNeighborsCount verringern, kann sich das so auf die Leistung auswirken:

  • Recall: Verringert
  • Latenz: Verringert sich möglicherweise
  • Verfügbarkeit: Keine Auswirkung
  • Kosten: Kann die Kosten senken, da während einer Suche weniger Daten verarbeitet werden
setNeighborCount Gibt die Anzahl der Ergebnisse an, die durch die Abfrage zurückgegeben werden sollen.

Werte unter oder gleich 300 bleiben in den meisten Anwendungsfällen leistungsfähig. Bei größeren Werten sollten Sie für Ihren spezifischen Anwendungsfall testen.

approximateNeighborsCount sollte immer größer als setNeighborsCount sein. Wenn der Wert von setNeighborsCount klein ist, wird für approximateNeighborsCount das 10-Fache dieses Werts empfohlen. Für größere setNeighborsCount-Werte kann ein kleinerer Multiplikator verwendet werden.

fractionLeafNodesToSearch Steuert den Prozentsatz der Blattknoten, die bei der Suche nach nächsten Nachbarn besucht werden. Dies steht in Bezug auf leafNodeEmbeddingCount insofern, als je mehr Einbettungen pro Blattknoten umso mehr Daten pro Blatt untersucht werden.

Das Erhöhen des Werts von fractionLeafNodesToSearch kann die Leistung auf folgende Weise beeinflussen:

  • Recall: Erhöht
  • Latenz: Erhöht
  • Verfügbarkeit: Keine Auswirkung
  • Kosten: Kann steigen, da eine höhere Latenz mehr Maschinenressourcen belegt

Das Verringern des Werts von fractionLeafNodesToSearch kann sich auf folgende Weise auf die Leistung auswirken:

  • Recall: Verringert
  • Latenz: Verringert
  • Verfügbarkeit: Keine Auswirkung
  • Kosten: Kann sich verringern, da eine geringere Latenz weniger Maschinenressourcen belegt

Nächste Schritte