Membuat kueri indeks publik untuk mendapatkan tetangga terdekat

Setelah membuat dan men-deploy indeks, Anda dapat menjalankan kueri untuk mendapatkan tetangga terdekat.

Berikut adalah beberapa contoh kueri pencocokan untuk menemukan tetangga terdekat teratas menggunakan algoritma k-nearest neighbors (k-NN).

Contoh kueri untuk endpoint publik

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

publicEndpointDomainName yang tercantum di bawah dapat ditemukan di Deploy dan diformat sebagai <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}]}'
  

Contoh curl ini menunjukkan cara melakukan panggilan dari klien http(s), walaupun endpoint publik mendukung protokol ganda untuk aktivitas RESTful dan 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"]}'
  

Contoh curl ini menunjukkan cara membuat kueri dengan batasan token dan numerik.


  $ 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"]}]}}]}'
  

Konsol

Gunakan petunjuk ini untuk membuat kueri indeks yang di-deploy ke endpoint publik dari konsol.

  1. Di bagian Vertex AI pada Konsol Google Cloud, buka bagian Deploy and Use. Pilih Vector Search.

    Buka Vector Search

  2. Pilih indeks yang ingin Anda buat kuerinya. Halaman Info indeks akan terbuka.
  3. Scroll ke bawah ke bagian Indeks yang di-deploy, lalu pilih indeks yang di-deploy yang ingin Anda buat kuerinya. Halaman Info indeks yang di-deploy akan terbuka.
  4. Dari bagian Indeks kueri, pilih apakah akan membuat kueri berdasarkan nilai penyematan padat, nilai penyematan jarang, nilai penyematan campuran (penyematan padat dan jarang), atau titik data tertentu.
  5. Masukkan parameter kueri untuk jenis kueri yang Anda pilih. Misalnya, jika Anda membuat kueri berdasarkan embedding padat, masukkan vektor embedding yang akan digunakan untuk membuat kueri.
  6. Jalankan kueri menggunakan perintah curl yang disediakan, atau dengan menjalankannya dengan Cloud Shell.
  7. Jika menggunakan Cloud Shell, pilih Run in Cloud Shell.
  8. Jalankan di Cloud Shell.
  9. Hasilnya akan menampilkan tetangga terdekat.

Untuk melihat contoh menyeluruh tentang cara membuat indeks, cara men-deploy-nya ke endpoint publik, dan cara membuat kueri, lihat notebook resmi: Menggunakan Vector Search dan Vertex AI Embeddings untuk Teks untuk StackOverflow Questions.

Setelan waktu kueri yang memengaruhi performa

Parameter waktu kueri berikut dapat memengaruhi latensi, ketersediaan, dan biaya saat menggunakan Penelusuran Vektor. Panduan ini berlaku untuk sebagian besar kasus. Namun, selalu bereksperimen dengan konfigurasi untuk memastikan konfigurasi tersebut berfungsi untuk kasus penggunaan Anda.

Untuk definisi parameter, lihat Parameter konfigurasi indeks.

Parameter Tentang Dampak performa
approximateNeighborsCount

Memberi tahu algoritma jumlah perkiraan hasil yang akan diambil dari setiap shard.

Nilai approximateNeighborsCount harus selalu lebih besar dari nilai setNeighborsCount. Jika nilai setNeighborsCount kecil, 10 kali nilai tersebut direkomendasikan untuk approximateNeighborsCount. Untuk nilai setNeighborsCount yang lebih besar, pengganda yang lebih kecil dapat digunakan.

Meningkatkan nilai approximateNeighborsCount dapat memengaruhi performa dengan cara berikut:

  • Recall: Meningkat
  • Latensi: Berpotensi meningkat
  • Ketersediaan: Tidak ada dampak
  • Biaya: Dapat meningkat karena lebih banyak data yang diproses selama penelusuran

Menurunkan nilai approximateNeighborsCount dapat memengaruhi performa dengan cara berikut:

  • Recall: Menurun
  • Latensi: Berpotensi menurun
  • Ketersediaan: Tidak ada dampak
  • Biaya: Dapat mengurangi biaya karena lebih sedikit data yang diproses selama penelusuran
setNeighborCount Menentukan jumlah hasil yang ingin ditampilkan oleh kueri.

Nilai kurang dari atau sama dengan 300 tetap berperforma baik dalam sebagian besar kasus penggunaan. Untuk nilai yang lebih besar, uji kasus penggunaan tertentu Anda.

fractionLeafNodesToSearch Mengontrol persentase node daun yang akan dikunjungi saat menelusuri tetangga terdekat. Hal ini terkait dengan leafNodeEmbeddingCount karena semakin banyak penyematan per node daun, semakin banyak data yang diperiksa per daun.

Meningkatkan nilai fractionLeafNodesToSearch dapat memengaruhi performa dengan cara berikut:

  • Recall: Meningkat
  • Latensi: Meningkat
  • Ketersediaan: Tidak ada dampak
  • Biaya: Dapat meningkat karena latensi yang lebih tinggi menggunakan lebih banyak resource mesin

Menurunkan nilai fractionLeafNodesToSearch dapat memengaruhi performa dengan cara berikut:

  • Recall: Menurun
  • Latensi: Menurun
  • Ketersediaan: Tidak ada dampak
  • Biaya: Dapat menurun karena latensi yang lebih rendah menggunakan lebih sedikit resource mesin

Langkah selanjutnya