Esegui una query sull'indice pubblico per ottenere i vicini più vicini

Dopo aver creato l'indice ed eseguito il deployment, puoi eseguire query per ottenere i vicini più prossimi.

Ecco alcuni esempi di query di corrispondenza per trovare i primi vicini più prossimi utilizzando l'algoritmo k- Nearest Yin (k-NN).

Esempi di query per l'endpoint pubblico

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)

    # Query hybrid datapoints, sparse-only datapoints, and dense-only datapoints.
    hybrid_queries = [
        aiplatform.matching_engine.matching_engine_index_endpoint.HybridQuery(
            dense_embedding=[1, 2, 3],
            sparse_embedding_dimensions=[10, 20, 30],
            sparse_embedding_values=[1.0, 1.0, 1.0],
            rrf_ranking_alpha=0.5,
        ),
        aiplatform.matching_engine.matching_engine_index_endpoint.HybridQuery(
            dense_embedding=[1, 2, 3],
            sparse_embedding_dimensions=[10, 20, 30],
            sparse_embedding_values=[0.1, 0.2, 0.3],
        ),
        aiplatform.matching_engine.matching_engine_index_endpoint.HybridQuery(
            sparse_embedding_dimensions=[10, 20, 30],
            sparse_embedding_values=[0.1, 0.2, 0.3],
        ),
        aiplatform.matching_engine.matching_engine_index_endpoint.HybridQuery(
            dense_embedding=[1, 2, 3]
        ),
    ]

    hybrid_resp = my_index_endpoint.find_neighbors(
            deployed_index_id=deployed_index_id,
            queries=hybrid_queries,
            num_neighbors=num_neighbors,)
    print(hybrid_resp)

Curl

Il publicEndpointDomainName elencato di seguito è disponibile all'indirizzo Esegui il deployment ed è formattato come <number>.<region>-<number>.vdb.vertexai.goog.


  $ curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://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}]}'
  

Questo esempio curl mostra come chiamare dai client http(s), anche se l'endpoint pubblico supporta il doppio protocollo grpc_cli.


  $ curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://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"]}'
  

Questo esempio di curl mostra come eseguire query con token e limitazioni numeriche.


  $ curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`"  https://${PUBLIC_ENDPOINT_DOMAIN}/v1/projects/${PROJECT_ID}/locations/${LOCATION}/indexEndpoints/${INDEX_ENDPOINT_ID}:findNeighbors -d '{deployed_index_id:"${DEPLOYED_INDEX_ID}", queries: [{datapoint: {datapoint_id:"x", feature_vector: [1, 1], "sparse_embedding": {"values": [111.0,111.1,111.2], "dimensions": [10,20,30]}, numeric_restricts: [{namespace: "int-ns", value_int: -2, op: "GREATER"}, {namespace: "int-ns", value_int: 4, op: "LESS_EQUAL"}, {namespace: "int-ns", value_int: 0, op: "NOT_EQUAL"}], restricts: [{namespace: "color", allow_list: ["red"]}]}}]}'
  

Console

Usa queste istruzioni per eseguire query su un indice di cui è stato eseguito il deployment in un endpoint pubblico dalla console.

  1. Nella sezione Vertex AI della console Google Cloud, vai a nella sezione Deployment e utilizzo. Seleziona Ricerca vettoriale.

    Vai a Vector Search

  2. Seleziona l'indice su cui eseguire la query. Si apre la pagina Informazioni indice.
  3. Scorri verso il basso fino alla sezione Indici di cui è stato eseguito il deployment e seleziona l'indice di cui hai eseguito la query su cui vuoi eseguire la query. Si apre la pagina Informazioni sull'indice di cui è stato eseguito il deployment.
  4. Nella sezione Indice query, scegli se eseguire una query in base a un valore di embedding denso, a un valore di embedding sparso, a un valore di embedding ibrido (embedding densi e sparsi) o a un punto dati specifico.
  5. Inserisci i parametri di ricerca per il tipo di query selezionato. Ad esempio, se esegui la query in base a un incorporamento denso, inserisci il vettore di incorporamento in base al quale eseguire la query.
  6. Esegui la query utilizzando il comando curl fornito o eseguendo la query con Cloud Shell.
  7. Se utilizzi Cloud Shell, seleziona Esegui in Cloud Shell.
  8. Esegui in Cloud Shell.
  9. I risultati restituiscono i vicini più prossimi.

Per un esempio end-to-end di come creare un indice, eseguirne il deployment in una dell'endpoint pubblico e su come eseguire query, consulta il blocco note ufficiale: Using Vector Search and Vertex AI Embeddings for Text for StackOverflow Domande.

Impostazioni relative al tempo di query che influiscono sulle prestazioni

I seguenti parametri relativi al momento della query possono influire su latenza, disponibilità quando utilizzi Vector Search. Queste linee guida si applicano alla maggior parte dei casi. Tuttavia, fai sempre esperimenti con le configurazioni per assicurarti che funzionino per il tuo caso d'uso.

Per le definizioni dei parametri, consulta la sezione Configurazione dell'indice. parametri.

Parametro Informazioni Impatto sulle prestazioni
approximateNeighborsCount

Indica all'algoritmo il numero di risultati approssimativi da cui recuperare per ogni shard.

Il valore di approximateNeighborsCount deve essere sempre maggiore di il valore di setNeighborsCount. Se il valore di setNeighborsCount è piccolo, è consigliato 10 volte questo valore per approximateNeighborsCount. Per valori di setNeighborsCount più elevati, è possibile utilizzare un moltiplicatore più piccolo.

L'aumento del valore di approximateNeighborsCount può influisce sulle prestazioni nei seguenti modi:

  • Richiamo: aumentato
  • Latenza: potenzialmente aumentata
  • Disponibilità: nessun impatto
  • Costo: può aumentare perché durante una ricerca vengono elaborati più dati

La riduzione del valore di approximateNeighborsCount può influisce sulle prestazioni nei seguenti modi:

  • Richiamo: diminuito
  • Latenza: riduzioni potenzialmente
  • Disponibilità: nessun impatto
  • Costo: può ridurre i costi perché vengono elaborati meno dati durante una ricerca
setNeighborCount Specifica il numero di risultati che vuoi che la query restituisca.

Valori inferiori o uguali a 300 rimangono efficaci nella maggior parte dei casi d'uso. Per valori più alti, esegui il test in base al tuo caso d'uso specifico.

fractionLeafNodesToSearch Controlla la percentuale di nodi foglia da visitare quando si cercano i nodi foglia più vicini vicini. È correlato a leafNodeEmbeddingCount in che più incorporamenti per nodo foglia, più dati esaminati per foglia.

L'aumento del valore di fractionLeafNodesToSearch può influisce sulle prestazioni nei seguenti modi:

  • Richiamo: aumentato
  • Latenza: aumentata
  • Disponibilità: nessun impatto
  • Costo: può aumentare perché una latenza più elevata occupa più risorse della macchina

La diminuzione del valore di fractionLeafNodesToSearch può influisce sulle prestazioni nei seguenti modi:

  • Richiamo: diminuito
  • Latenza: diminuita
  • Disponibilità: nessun impatto
  • Costo: può diminuire perché una latenza più bassa occupa meno risorse della macchina

Passaggi successivi