Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan indeks vektor di DynamoDB
Indeks vektor adalah jenis indeks di Amazon DynamoDB yang memungkinkan pencarian kesamaan pada penyematan vektor yang disimpan dalam item tabel Anda. Tidak seperti indeks sekunder global dan indeks sekunder lokal, yang mendukung kueri pencocokan dan rentang yang tepat menggunakan Query dan Scan operasi, indeks vektor menggunakan pencarian perkiraan tetangga terdekat (ANN) untuk menemukan item yang vektornya paling mirip dengan vektor kueri yang Anda berikan. Anda melakukan pencarian kesamaan ini dengan memanggil SearchVectors API, yang mengembalikan item paling mirip yang diberi peringkat berdasarkan skor kesamaan.
Dengan indeks vektor, Anda dapat menyimpan penyematan vektor bersama data operasional Anda di DynamoDB dan melakukan pencarian kesamaan tanpa memerlukan database vektor terpisah. Ini menghilangkan kebutuhan akan pipeline replikasi data yang kompleks antara DynamoDB dan penyimpanan vektor eksternal.
Indeks vektor dikelola melalui UpdateTable API yang sama CreateTable yang sudah Anda gunakan, dengan VectorIndexes parameter (forCreateTable) dan VectorIndexUpdates parameter (forUpdateTable).
Topik
Gunakan kasus untuk indeks vektor
Indeks vektor mendukung berbagai kasus penggunaan yang melibatkan menemukan item serupa berdasarkan representasi vektor:
-
Pencarian semantik — Membangun mesin pencari yang memahami arti kueri daripada kata kunci yang cocok. Simpan penyematan teks yang dihasilkan oleh model pembelajaran mesin dan temukan konten yang mirip secara semantik.
-
Retrieval Augmented Generation (RAG) — Hubungkan model bahasa besar (LLM) dengan basis pengetahuan yang relevan. Simpan penyematan dokumen di DynamoDB dan ambil konteks yang paling relevan untuk prompt LLM.
-
Sistem rekomendasi — Temukan produk, konten, atau pengguna serupa berdasarkan representasi vektor dari fitur atau perilaku mereka.
-
Memori agen AI — Simpan penyematan percakapan untuk mempertahankan konteks antar sesi dan meningkatkan kinerja agen AI.
-
Deteksi anomali dan penipuan — Bandingkan peristiwa baru dengan penyematan perilaku normal yang diketahui untuk menandai outlier, seperti transaksi yang tidak biasa atau aktivitas penipuan.
Membandingkan indeks vektor dengan indeks sekunder
Tabel berikut membandingkan indeks vektor dengan indeks sekunder global dan indeks sekunder lokal.
| Fitur | Vektor indeks | Indeks sekunder global | Indeks sekunder lokal |
|---|---|---|---|
| Jenis kueri | Pencarian kesamaan | Pencocokan dan jangkauan yang tepat | Pencocokan dan jangkauan yang tepat |
| Baca API | SearchVectors |
Query, Scan |
Query, Scan |
| Skema | Atribut vektor, ditambah opsional SearchSchema (kunci partisi, filter sebaris) | Kunci partisi dan kunci pengurutan opsional | Kunci partisi yang sama, kunci pengurutan yang berbeda |
| Maksimum per tabel | 5 | 20 | 5 |
| Mode kapasitas | On-demand hanya | On-demand atau disediakan | On-demand atau disediakan |
Fungsi jarak
Saat Anda membuat indeks vektor, Anda memilih fungsi jarak. Fungsi jarak menentukan bagaimana DynamoDB mengukur kesamaan antar vektor. Pilihan Anda memengaruhi kualitas peringkat dan akurasi pencarian. Amazon DynamoDB mendukung tiga fungsi jarak.
| Fungsi jarak | Interpretasi skor | Pertandingan terbaik |
|---|---|---|
COSINE |
Skor yang lebih rendah menunjukkan kesamaan yang lebih besar. Mengukur jarak kosinus (1 dikurangi kesamaan kosinus) antara dua vektor. Nilai berkisar dari 0 (arah identik) hingga 2 (arah berlawanan). | Skor terkecil |
DOT_PRODUCT |
Skor yang lebih tinggi menunjukkan kesamaan yang lebih besar. Mengukur produk titik antara dua vektor. | Skor tertinggi |
EUCLIDEAN |
Skor yang lebih rendah menunjukkan kesamaan yang lebih besar. Mengukur jarak garis lurus antara dua vektor. | Skor terkecil |
Untuk membandingkan bagaimana fungsi jarak memberi peringkat pada vektor kueri yang sama, lihatBagaimana fungsi jarak memberi peringkat hasil.
Panduan berikut membantu Anda memilih fungsi jarak yang tepat untuk beban kerja Anda.
COSINE-
Membandingkan arah dan mengabaikan magnitudo. Gunakan
COSINEuntuk kesamaan semantik dengan model penyematan teks. Model-model ini mengkodekan makna dalam arah, dan panjang vektor dapat bervariasi. Contohnya termasuk Amazon Titan Text Embeddings danCohere Embed.COSINEsangat cocok untuk kasus penggunaan berikut:-
Pencarian semantik atas deskripsi produk atau dokumen
-
Pengambilan Augmented Generation (RAG)
-
Pencocokan FAQ
COSINEadalah default yang aman ketika Anda tidak yakin fungsi mana yang akan digunakan. -
DOT_PRODUCT-
DOT_PRODUCTsensitif terhadap arah dan besaran (panjang vektor). PilihDOT_PRODUCTkapan dokumentasi model penyematan Anda merekomendasikan produk titik sebagai ukuran kesamaan, atau ketika Anda ingin panjang vektor memengaruhi peringkat.DOT_PRODUCTsangat cocok untuk kasus penggunaan berikut:-
Sistem rekomendasi yang menggunakan skor popularitas atau kepercayaan diri untuk menskalakan penyematan dan memengaruhi peringkat
-
Model yang dokumentasinya secara khusus merekomendasikan produk titik sebagai ukuran kesamaan
-
Magnitude-sensitive peringkat di mana panjang vektor membawa sinyal yang berarti
Sebaiknya menormalkan penyematan Anda ke panjang satuan. Ketika dinormalisasi,
DOT_PRODUCTperingkat menghasilkan cara yang sama sepertiCOSINE. Lewati normalisasi hanya jika Anda ingin besarnya memengaruhi peringkat.Contoh kasus penggunaan: sistem rekomendasi produk di mana Anda menskalakan setiap penyematan produk dengan skor popularitasnya. Produk yang lebih populer mendapatkan vektor yang lebih panjang dan peringkat lebih tinggi dalam hasil pencarian.
-
EUCLIDEAN-
Mengukur jarak garis lurus antara dua vektor.
EUCLIDEANPeka terhadap magnitudo Gunakan ketika posisi absolut di ruang penyematan penting.EUCLIDEANsangat cocok untuk kasus penggunaan berikut:-
Penyematan gambar atau audio di mana jarak spasial penting
-
Near-duplicate deteksi
-
Pengelompokan dan deteksi anomali
Contoh kasus penggunaan: menemukan gambar yang hampir duplikat dari penyematan gambar.
-
Pilih fungsi jarak yang cocok dengan model penyematan Anda
Jika Anda tidak yakin fungsi mana yang akan digunakan, periksa dokumentasi model penyematan Anda. Validasi pilihan Anda terhadap kumpulan data yang representatif. Anda tidak dapat mengubah fungsi jarak setelah pembuatan indeks. Untuk informasi selengkapnya, lihat Cocokkan fungsi jarak dengan penyematan Anda.
Bagaimana fungsi jarak memberi peringkat hasil
Fungsi jarak yang Anda pilih saat membuat indeks menentukan Score nilai dan urutan hasil. Kueri yang sama dapat memberi peringkat item yang sama secara berbeda di bawah fungsi jarak yang berbeda. Contoh berikut menggunakan vektor query [1, 0, 0, 0] terhadap empat vektor yang disimpan.
| Vektor yang disimpan | COSINE(lebih rendah lebih mirip) |
EUCLIDEAN(lebih rendah lebih mirip) |
DOT_PRODUCT(lebih tinggi lebih mirip) |
|---|---|---|---|
[1, 0, 0, 0] |
0,0 | 0,0 | 1.0 |
[10, 0, 0, 0] |
0,0 | 9.0 | 10.0 |
[0.7071, 0.7071, 0, 0] |
0.29 | 0.77 | 0.71 |
[-1, 0, 0, 0] |
2.0 | 2.0 | -1.0 |
Dua perilaku yang patut diperhatikan:
-
COSINEmengabaikan besarnya. Itu mencetak skor[1, 0, 0, 0]dan[10, 0, 0, 0]identik (keduanya0.0) karena mereka menunjuk ke arah yang sama.EUCLIDEANperingkat[10, 0, 0, 0]terakhir untuk kueri yang sama karena mengukur jarak absolut, yang meningkat dengan besarnya vektor. -
DOT_PRODUCTSkor bisa negatif. Vektor yang menunjuk ke arah yang berlawanan ([-1, 0, 0, 0]) mencetak skor-1.0. Jangan menganggap skor selalu non-negatif ketika Anda mengurutkan atau menerapkan ambang batas untuk hasil.
SearchSchema
Saat Anda membuat indeks vektor, Anda dapat secara opsional menentukan kunci partisi indeks vektor dan atribut filter sebaris. SearchSchema
HASH(kunci partisi indeks vektor)-
Kunci partisi indeks vektor mempartisi data indeks Anda untuk penskalaan independen. Ketika Anda menentukan kunci partisi indeks vektor, item dengan nilai kunci partisi yang sama disimpan bersama, yang memungkinkan sistem untuk mencari hanya data yang relevan. Pada skala tinggi, ini menurunkan latensi pencarian karena pencarian hanya memeriksa subset dari ruang vektor alih-alih seluruh indeks. Gunakan atribut dengan kardinalitas rendah hingga sedang, seperti atau.
CategoryCountryAnda dapat menentukan paling banyak satu kunci partisi indeks vektor.Jika Anda menentukan kunci partisi indeks vektor di SearchSchema, Anda harus memberikan nilainya
SearchConditionExpressionsaat Anda memanggilSearchVectors.Gunakan kunci partisi untuk menskalakan throughput pencarian
Tentukan kunci partisi indeks vektor ketika Anda mengharapkan indeks besar atau volume pencarian tinggi. Karena setiap
SearchVectorspanggilan dicakup ke nilai kunci partisi tunggal, mendistribusikan data Anda di banyak nilai kunci partisi memungkinkan Anda menjalankan lebih banyak operasi pencarian per detik dan mengurangi jumlah data yang diteliti setiap pencarian. Lihat Pilih kunci partisi yang cocok dengan pola kueri Anda. INLINE_FILTER-
Atribut filter sebaris diproyeksikan ke indeks vektor sehingga DynamoDB dapat memfilter selama pencarian di lapisan penyimpanan.
Filter sebaris mendukung operator kesetaraan (
=) diSearchConditionExpression. Operator perbandingan, jangkauan, dan set-keanggotaan (<><<=>,>=,,,,IN) belum tersedia. Tidak seperti kunci partisi indeks vektor, filter inline adalah opsional selama pencarian.
Anda dapat membuat indeks vektor tanpa mendefinisikan kunci partisi di SearchSchema. Dalam hal ini, setiap SearchVectors panggilan mencari seluruh indeks. Ini lebih sederhana karena Anda tidak perluSearchConditionExpression, tetapi tidak berskala secara horizontal. Seiring pertumbuhan indeks Anda, setiap pencarian memeriksa lebih banyak data, meningkatkan latensi dan biaya. Jika beban kerja Anda memerlukan throughput tinggi atau indeks Anda berisi sejumlah besar vektor, tentukan kunci partisi untuk mendistribusikan data di seluruh partisi dan skala secara independen. Lihat Pilih kunci partisi yang cocok dengan pola kueri Anda.
Proyeksi
Seperti indeks sekunder global, indeks vektor mendukung proyeksi yang mengontrol atribut mana dari tabel dasar yang disalin ke dalam indeks. Anda menentukan proyeksi saat Anda membuat indeks vektor.
-
KEYS_ONLY- Hanya atribut kunci utama tabel dasar, atribut vektor, dan atribut filter sebaris apa pun yang ditentukan dalam yang SearchSchema diproyeksikan ke dalam indeks. -
INCLUDE— SelainKEYS_ONLYatribut, Anda menentukan atribut non-kunci tambahan untuk proyek. Anda tidak dapat mengubah kumpulan atribut yang disertakan setelah indeks vektor dibuat. Untuk memproyeksikan serangkaian atribut yang berbeda, hapus indeks dan buat kembali dengan proyeksi yang Anda inginkan. -
ALLSemua atribut dari tabel dasar diproyeksikan ke dalam indeks.
Proyeksi membatasi apa yang SearchVectors bisa kembali
Atribut yang tidak diproyeksikan ke indeks vektor tidak dapat dikembalikan dalam SearchVectors respons. Jika Anda memerlukan atribut tertentu dalam hasil pencarian, sertakan dalam proyeksi atau penggunaanALL.
Menggunakan indeks vektor dengan fitur DynamoDB lainnya
- DynamoDB Streams
-
Anda dapat mengaktifkan Streams DynamoDB pada tabel yang memiliki indeks vektor, baik dengan
StreamSpecificationparameter saat Anda membuat tabel atau melalui.UpdateTableStream menangkap perubahan tingkat item ke tabel dasar, dan beroperasi secara independen dari indeks vektor. - Tabel global
-
Anda dapat menambahkan indeks vektor ke tabel global, dan Anda dapat mengonversi tabel yang memiliki indeks vektor menjadi tabel global dengan menambahkan replika dengan
UpdateTable. Definisi indeks vektor, termasuk dimensi, fungsi jarak, dan proyeksi SearchSchema, direplikasi secara otomatis ke setiap Wilayah replika baru. Anda tidak membuat indeks vektor secara terpisah di Wilayah replika.Item yang Anda tulis di Wilayah replika apa pun direplikasi ke Wilayah lain dan diindeks di sana. Setelah replikasi selesai,
SearchVectorsdi setiap Wilayah mencari set vektor yang sama. Karena pencarian vektor menggunakan perkiraan tetangga terdekat (ANN), pencarian terpisah di Wilayah yang berbeda mungkin mengembalikan hasil atau urutan yang sedikit berbeda untuk kueri yang sama, bahkan di atas data yang identik. Replikasi dan pengindeksan vektor di Wilayah lain tidak sinkron, bahkan untuk tabel global konsistensi kuat Multi-wilayah (MRSC). Vektor yang baru saja Anda tulis di satu Wilayah mungkin belum muncul dalamSearchVectorshasil di Wilayah lain sampai perubahan menyebar.On-demand kapasitas yang dibutuhkan
Indeks vektor memerlukan mode kapasitas sesuai permintaan, yang juga didukung tabel global. Buat indeks vektor dan replika pada tabel yang sudah menggunakan kapasitas on-demand.
- Point-in-time pemulihan (PITR) dan cadangan
-
Saat Anda memulihkan tabel dari pemulihan point-in-time atau cadangan sesuai permintaan, DynamoDB mengembalikan data tabel dasar dan definisi indeks vektor. Seperti indeks sekunder global, DynamoDB membangun kembali indeks vektor dari data tabel dasar yang dipulihkan alih-alih menyalinnya byte-for-byte, sehingga indeks melewati pengisian ulang sebelum siap untuk dicari. Tunggu sampai
IndexStatusadaACTIVEdanBackfillingberadafalsedi indeks yang dipulihkan sebelum Anda menjalankannyaSearchVectors. - Waktu untuk Hidup (TTL)
-
Anda dapat menggunakan DynamoDB TTL pada tabel yang memiliki indeks vektor. Saat TTL menghapus item kedaluwarsa dari tabel dasar, DynamoDB menghapus entri yang sesuai dari indeks vektor, dengan cara yang sama dilakukan penghapusan manual. Oleh karena itu, item kedaluwarsa berhenti muncul dalam
SearchVectorshasil setelah penghapusan menyebar ke indeks. - Mengimpor dan mengekspor data tabel
-
Anda dapat mengekspor tabel yang memiliki indeks vektor ke Amazon S3; ekspor berisi item tabel dasar, termasuk atribut vektor yang disimpan di dalamnya. Saat Anda mengimpor data dari Amazon S3 ke tabel baru, tentukan indeks vektor dalam permintaan impor dengan cara yang sama seperti yang Anda lakukan
CreateTable. DynamoDB mengindeks item yang diimpor saat ditulis, dan indeks vektor tersedia setelah impor selesai. - DAX
-
DynamoDB Accelerator (DAX) tidak mendukung operasi.
SearchVectorsKirimSearchVectorspermintaan langsung ke DynamoDB, bahkan ketika aplikasi Anda menggunakan DAX untuk operasi baca lainnya. Caching DAX dari pembacaan tabel dasar tidak terpengaruh oleh keberadaan indeks vektor.