Mengupdate dan mem-build ulang indeks aktif

Ringkasan

Dengan kueri penelusuran yang besar, memperbarui indeks Anda penting untuk selalu memiliki informasi yang paling akurat. Sekarang, Anda dapat memperbarui indeks Vector Search menggunakan update batch, yang memungkinkan Anda menyisipkan dan menghapus titik data melalui jadwal batch, atau dengan update streaming, yang memungkinkan Anda memperbarui dan membuat kueri indeks dalam beberapa detik.

Selain itu, Anda dapat menggunakan UpdateIndex untuk memperbarui kolom metadata penting, seperti display_name, description, dan labels. Anda juga dapat menambahkan tag opsional ke indeks untuk membantu mendiversifikasi hasil atau memfilter kueri pra indeks.

Memperbarui indeks batch

Untuk memperbarui konten Index yang ada, gunakan metode IndexService.UpdateIndex.

Untuk mengganti konten yang ada dari Index yang ada:

  • Tetapkan Index.metadata.contentsDeltaUri ke Cloud Storage URI yang menyertakan vektor yang ingin Anda perbarui.
  • Tetapkan isCompleteOverwrite ke true.

Jika Anda menetapkan kolom contentsDeltaUri saat memanggil IndexService.UpdateIndex, tidak ada kolom indeks lain (seperti displayName, description, atau userLabels) yang juga dapat diperbarui sebagai bagian dari panggilan yang sama.

gcloud

  1. Perbarui file metadata indeks Anda.
  2. Gunakan perintah gcloud ai indexes update.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • LOCAL_PATH_TO_METADATA_FILE: Jalur lokal ke file metadata.
  • INDEX_ID: ID indeks.
  • LOCATION: Region tempat Anda menggunakan Vertex AI.
  • PROJECT_ID: ID project Google Cloud Anda.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud ai indexes update INDEX_ID \
    --metadata-file=LOCAL_PATH_TO_METADATA_FILE \
    --region=LOCATION \
    --project=PROJECT_ID

Windows (PowerShell)

gcloud ai indexes update INDEX_ID `
    --metadata-file=LOCAL_PATH_TO_METADATA_FILE `
    --region=LOCATION `
    --project=PROJECT_ID

Windows (cmd.exe)

gcloud ai indexes update INDEX_ID ^
    --metadata-file=LOCAL_PATH_TO_METADATA_FILE ^
    --region=LOCATION ^
    --project=PROJECT_ID

REST

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • INPUT_DIR: Jalur direktori Cloud Storage dari konten indeks.
  • INDEX_ID: ID indeks.
  • LOCATION: Region tempat Anda menggunakan Vertex AI.
  • PROJECT_ID: ID project Google Cloud Anda.
  • PROJECT_NUMBER: Nomor project yang dibuat secara otomatis untuk project Anda.

Metode HTTP dan URL:

PATCH https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID

Meminta isi JSON:

{
 "metadata": {
   "contentsDeltaUri": "INPUT_DIR",
   "isCompleteOverwrite": true
 }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON yang mirip seperti berikut:

{
 "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexes/INDEX_ID/operations/OPERATION_ID",
 "metadata": {
   "@type": "type.googleapis.com/google.cloud.aiplatform.v1.UpdateIndexOperationMetadata",
   "genericMetadata": {
     "createTime": "2022-01-12T23:56:14.480948Z",
     "updateTime": "2022-01-12T23:56:14.480948Z"
   }
 }
}

Konsol

Gunakan petunjuk ini untuk mengupdate konten indeks batch.

  1. Di bagian Vertex AI pada Konsol Google Cloud, buka bagian Deploy dan Gunakan. Pilih Cari Vektor

    Buka Cari Vektor

  2. Pilih indeks yang ingin Anda perbarui. Halaman Info indeks akan terbuka.
  3. Pilih Edit Indeks. Panel indeks edit akan terbuka.
  4. Di kolom Cloud Storage, telusuri dan pilih folder Cloud Storage tempat data vektor Anda disimpan.
  5. (Opsional) Centang kotak penimpaan lengkap jika Anda ingin menimpa semua data yang ada.
  6. Klik Perbarui
  7. Klik Selesai untuk menutup panel.

Jika Index memiliki deployment terkait (lihat kolom Index.deployed_indexes) lalu ketika ada perubahan tertentu pada Index asli selesai, DeployedIndex otomatis diperbarui secara asinkron di latar belakang untuk mencerminkan perubahan ini.

Untuk memeriksa apakah perubahan telah diterapkan, bandingkan waktu selesai operasi indeks update dan DeployedIndex.index_sync_time.

Memperbarui indeks streaming

Dengan update streaming, Anda dapat memperbarui dan membuat kueri indeks dalam beberapa detik. Saat ini, Anda tidak dapat menggunakan update streaming pada indeks update batch yang ada. Anda harus membuat indeks baru. Lihat Membuat indeks untuk update streaming guna mempelajari lebih lanjut.

Anda dikenai biaya $0,45 per GB yang digunakan untuk update streaming. Untuk mempelajari harga lebih lanjut, lihat halaman harga Vertex AI. Update streaming diterapkan langsung ke indeks yang di-deploy dalam memori, yang kemudian tercermin dalam hasil kueri setelah penundaan singkat.

Memperbarui dan menyisipkan titik data

Gunakan contoh ini untuk mengetahui cara memperbarui dan menyisipkan titik data. Ingat, upsert-datapoints hanya menerima JSON dalam format array.

Python

Python

def stream_update_vector_search_index(
    project: str, location: str, index_name: str, datapoints: Sequence[dict]
) -> None:
    """Stream update an existing vector search index

    Args:
      project (str): Required. The Project ID
      location (str): Required. The region name, e.g. "us-central1"
      index_name (str): Required. The index to update. A fully-qualified index
        resource name or a index ID.  Example:
        "projects/123/locations/us-central1/indexes/my_index_id" or
        "my_index_id".
      datapoints: Sequence[dict]: Required. The datapoints to be updated. The dict
        element should be of the IndexDatapoint type.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create the index instance from an existing index with stream_update
    # enabled
    my_index = aiplatform.MatchingEngineIndex(index_name=index_name)

    # Upsert the datapoints to the index
    my_index.upsert_datapoints(datapoints=datapoints)

Curl

Batas kuota throughput berkaitan dengan jumlah data yang disertakan dalam upsert. Jika ID titik data ada dalam indeks, embedding akan diperbarui. Jika tidak, embedding baru akan ditambahkan.

  
  DATAPOINT_ID_1=
  DATAPOINT_ID_2=
  curl -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/indexes/${INDEX_ID}:upsertDatapoints \
  -d '{datapoints: [{datapoint_id: "'${DATAPOINT_ID_1}'", feature_vector: [...]},
  {datapoint_id: "'${DATAPOINT_ID_2}'", feature_vector: [...]}]}'
  
  

Konsol

Konsol

Gunakan petunjuk ini untuk memperbarui konten ke indeks streaming.

  1. Di bagian Vertex AI pada Konsol Google Cloud, buka bagian Deploy dan Gunakan. Pilih Cari Vektor

    Buka Cari Vektor

  2. Pilih indeks yang ingin Anda perbarui. Halaman Info indeks akan terbuka.
  3. Pilih Edit Indeks. Panel indeks edit akan terbuka.
  4. Dari panel, pilih Perbarui dan masukkan titik data untuk menambahkan konten.
  5. Masukkan ID titik data.
  6. Masukkan nilai vektor fitur untuk titik data yang ingin Anda perbarui. Kolom ini harus berupa angka yang dipisahkan koma (misalnya: 9.32, 0.12, -2.35).
  7. Masukkan string.
  8. Klik Upsert
  9. Klik Selesai untuk menutup panel.

Batas kuota throughput berkaitan dengan jumlah data yang disertakan dalam upsert. Jika ID titik data ada dalam indeks, embedding akan diperbarui. Jika tidak, embedding baru akan ditambahkan.

Memperbarui metadata dinamis

Ada banyak alasan mengapa Anda mungkin perlu memperbarui pembatasan streaming atau pembatasan numerik. Misalnya, saat menangani data yang bervolume tinggi dan bergerak cepat, Anda mungkin ingin memprioritaskan aliran data tertentu. Dengan memperbarui secara langsung pembatasan atau pembatasan numerik, Anda dapat mempertajam fokus secara real time, sehingga data yang paling penting diproses atau ditandai segera.

Anda dapat langsung memperbarui pembatasan titik data dan batasan numerik dalam indeks streaming tanpa biaya pemadatan update penuh.

Untuk melakukan pembaruan khusus metadata ini, Anda harus menambahkan kolom update_mask ke permintaan. Nilai update_mask harus ditetapkan ke all_restricts. Nilai batasan dan batasan numerik yang ditetapkan dalam titik data harus berupa nilai baru yang ingin Anda terapkan dalam update.

Contoh berikut menunjukkan cara menambahkan batasan ke dua titik data yang ada.

DATAPOINT_ID_1=
DATAPOINT_ID_2=

curl -H "Content-Type: application/json" -H "Authorization: Bearer gcloud auth print-access-token" https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/indexes/${INDEX_ID}:upsertDatapoints \
-d '{datapoints:
[{datapoint_id: "'${DATAPOINT_ID_1}'", feature_vector: [...],  restricts:[{namespace: "color", allow_list: ["red"]}]},
{datapoint_id: "'${DATAPOINT_ID_2}'", feature_vector: [...],  restricts:[{namespace: "color", allow_list: ["red"]}]}
], update_mask: "all_restricts"}'

Menghapus titik data

Anda mungkin perlu menghapus titik data dari indeks streaming. Anda dapat melakukannya menggunakan curl atau dari konsol Google Cloud.

Kasus penggunaan utama untuk menghapus titik data dari indeks adalah untuk mempertahankan paritas antara indeks dan sumbernya di dunia nyata. Pertimbangkan penjual buku yang menggunakan penyematan vektor untuk merepresentasikan inventaris buku mereka untuk tujuan penelusuran dan rekomendasi. Jika buku terjual habis atau dihapus, menghapus titik data buku tersebut dari indeks akan memastikan hasil penelusuran dan rekomendasi tetap akurat dan terbaru.

Curl


curl -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://{LOCATION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{REGION}/indexes/{INDEX_ID}:removeDatapoints -d '{datapoint_ids: ["'{DATAPOINT_ID_1}'", "'{DATAPOINT_ID_2}'"]}'

Konsol

Konsol

Gunakan petunjuk ini untuk menghapus titik data dari indeks streaming.

  1. Di bagian Vertex AI pada Konsol Google Cloud, buka bagian Deploy dan Gunakan. Pilih Cari Vektor

    Buka Cari Vektor

  2. Pilih indeks streaming yang ingin diperbarui. Halaman Info indeks akan terbuka.
  3. Pilih Edit Indeks. Panel indeks edit akan terbuka.
  4. Dari panel, pilih tab Hapus titik data.
  5. Tambahkan hingga 20 titik data dengan memberikan daftar ID titik data yang dipisahkan koma
  6. Klik Hapus.
  7. Klik Selesai untuk menutup panel.

Pemadatan

Secara berkala, indeks Anda di-build ulang untuk memperhitungkan semua update baru sejak build ulang terakhir. Build ulang ini, atau "pemadatan", meningkatkan performa kueri dan keandalan. Pemadatan terjadi untuk update streaming dan update batch.

  • Update streaming: Vector Search menggunakan metrik berbasis heuristik untuk menentukan kapan memicu pemadatan. Jika data terlama yang tidak dikomposisi sudah berusia lima hari, pemadatan akan selalu dipicu. Anda akan dikenai biaya untuk mem-build ulang indeks pada tingkat update batch yang sama, selain biaya update streaming.

  • Update batch: Terjadi saat ukuran set data inkremental > 20% dari ukuran set data dasar.

Mem-build ulang dan membuat kueri untuk indeks Anda

Anda dapat mengirim permintaan pencocokan atau batch pencocokan seperti biasa dengan cli grpc, library klien, atau Vertex AI SDK untuk Python. Saat mem-build ulang kueri, Anda mungkin akan melihat update dalam beberapa detik. Untuk mempelajari cara membuat kueri indeks, lihat Indeks kueri untuk mendapatkan tetangga terdekat.

Kolom opsional

Saat membuat indeks, ada beberapa kolom opsional yang dapat Anda gunakan untuk menyesuaikan kueri.

Melakukan upsert dengan batasan

Melakukan upsert indeks dan menambahkan batasan adalah cara memberi tag pada titik data sehingga titik data tersebut sudah teridentifikasi untuk difilter pada waktu kueri. Anda mungkin ingin menambahkan tag pembatasan untuk membatasi hasil yang ditampilkan di data sebelum kueri dikirim. Misalnya, pelanggan ingin menjalankan kueri pada indeks, tetapi ingin memastikan hasilnya hanya menampilkan item yang cocok dengan "merah" dalam penelusuran untuk alas kaki. Pada contoh berikut, indeks diperbarui dan difilter di semua sepatu merah, tetapi menolak yang biru. Hal ini memastikan filter penelusuran dalam opsi spesifik terbaik dari indeks yang besar dan bervariasi sebelum dijalankan.

Selain pembatasan token, contoh ini menggunakan pembatasan numerik. Dalam hal ini, titik data dikaitkan dengan harga 20, panjang 0,3, dan lebar 0,5. Pada saat kueri, Anda dapat menggunakan pembatasan numerik ini untuk memfilter hasil guna membatasi hasil kueri pada nilai harga, panjang, dan lebar. Misalnya, titik data ini akan muncul dalam kueri yang memfilter harga > 25, panjang < 1, dan lebar < 1.

Untuk mempelajari pemfilteran lebih lanjut, lihat Penelusuran Vektor untuk Pengindeksan.

curl -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://${ENDPOINT}/v1/projects/${PROJECT_ID}/locations/us-central1/indexes/${INDEX_ID}:upsertDatapoints \
-d '{
datapoints: [
  {
    datapoint_id: "'${DATAPOINT_ID_1}'",
    feature_vector: [...],
    restricts: { namespace: "color", allow_list: ["red"], deny_list: ["blue"]},
    numeric_restricts: [{namespace: "price", value_int: 20}, {namespace: "length", value_float: 0.3}, {namespace: "width", value_double: 0.5}]
  }
]}'

Melakukan upsert dengan crowding

Crowding tag membatasi hasil yang serupa dengan meningkatkan keragaman hasil. Crowding adalah batasan pada daftar tetangga yang dihasilkan oleh penelusuran tetangga terdekat yang mengharuskan tidak lebih dari beberapa nilai, dari grup hasil, yang menampilkan nilai crowding_attribute yang sama. Misalnya, katakanlah Anda kembali berbelanja sepatu secara online. Anda ingin melihat berbagai macam warna dalam hasil penelusuran, tetapi mungkin ingin menggunakannya dalam satu gaya, seperti sepatu bola. Anda dapat meminta agar tidak lebih dari 3 pasang sepatu dengan warna yang sama ditampilkan dengan menetapkan per_crowding_attribute_num_neighbors = 3 dalam kueri, dengan asumsi Anda menetapkan crowding_attribute ke warna sepatu saat memasukkan titik data.

Kolom ini menunjukkan jumlah maksimum kecocokan yang diizinkan dengan tag kerumunan yang sama.

curl -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://${ENDPOINT}/v1/projects/${PROJECT_ID}/locations/us-central1/indexes/${INDEX_ID}:upsertDatapoints \
-d '{
datapoints: [
  {
    datapoint_id: "'${DATAPOINT_ID_1}'",
    feature_vector: [...],
    restricts: { namespace: "type", allow_list: ["cleats"]}
    crowding_tag: { crowding_attribute: "red-shoe"},
  }
]}'

Langkah selanjutnya