Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Cosmos DB di Fabric sekarang menawarkan pengindeksan dan pencarian vektor yang efisien. Fitur ini dirancang untuk menangani vektor multi-modal, dimensi tinggi, memungkinkan pencarian vektor yang efisien dan akurat dalam skala apa pun. Sekarang Anda dapat menyimpan vektor langsung di dokumen bersama data Anda. Setiap dokumen dalam database Anda tidak hanya dapat berisi data bebas skema tradisional, tetapi juga vektor dimensi tinggi multi-modal sebagai properti dokumen lainnya. Kolokasi data dan vektor ini memungkinkan pengindeksan dan pencarian yang efisien, karena vektor disimpan dalam unit logis yang sama dengan data yang mereka wakili. Menjaga vektor dan data bersama-sama menyederhanakan manajemen data, arsitektur aplikasi AI, dan efisiensi operasi berbasis vektor.
Cosmos DB in Fabric menawarkan fleksibilitas yang ditawarkannya dalam memilih metode pengindeksan vektor:
Pencarian persis tetangga "datar" atau k-terdekat (kadang-kadang disebut brute-force) dapat memberikan 100% pengenalan pengambilan untuk pencarian vektor yang lebih kecil dan berfokus. terutama ketika dikombinasikan dengan filter kueri dan kunci partisi.
Indeks datar terukur yang mengompresi vektor menggunakan metode kuantisasi berbasis DiskANN untuk efisiensi yang lebih baik dalam pencarian kNN.
DiskANN, serangkaian algoritma pengindeksan vektor canggih yang dikembangkan oleh Microsoft Research untuk mendukung pencarian vektor multi-modal akurasi tinggi yang efisien dalam skala apa pun.
Pencarian vektor di Cosmos DB dapat dikombinasikan dengan semua filter dan indeks kueri NoSQL lain yang didukung menggunakan WHERE klausa. Kombinasi ini memungkinkan pencarian vektor Anda menjadi data yang paling relevan untuk aplikasi Anda.
Fitur ini meningkatkan kemampuan inti Cosmos DB, membuatnya lebih serbaguna untuk menangani data vektor dan persyaratan pencarian dalam aplikasi AI.
Apa itu penyimpanan vektor?
Penyimpanan vektor atau database vektor adalah database yang dirancang untuk menyimpan dan mengelola penyematan vektor, yang merupakan representasi matematika data dalam ruang dimensi tinggi. Dalam ruang ini, setiap dimensi sesuai dengan fitur data, dan puluhan ribu dimensi mungkin digunakan untuk mewakili data canggih. Posisi vektor dalam ruang ini mewakili karakteristiknya. Kata, frasa, atau seluruh dokumen, dan gambar, audio, dan jenis data lainnya semuanya dapat di-vektorisasi.
Bagaimana cara kerja penyimpanan vektor?
Di penyimpanan vektor, algoritma pencarian vektor digunakan untuk mengindeks dan meminta embedding. Beberapa algoritma pencarian vektor terkenal termasuk Hierarkis Navigable Small World (HNSW), Inverted File (IVF), DiskANN, dll. Pencarian vektor adalah metode yang membantu Anda menemukan item serupa berdasarkan karakteristik datanya daripada dengan kecocokan yang tepat pada bidang properti. Teknik ini berguna dalam aplikasi seperti mencari teks serupa, menemukan gambar terkait, membuat rekomendasi, atau bahkan mendeteksi anomali. Ini digunakan untuk melakukan kueri penyematan vektor dari data Anda yang dibuat dengan menggunakan model pembelajaran mesin melalui API penyematan. Contoh API penyematan adalah Azure OpenAI Embeddings atau Hugging Face di Azure. Pencarian vektor mengukur jarak antara vektor data dan vektor kueri Anda. Vektor data yang paling dekat dengan vektor kueri Anda adalah vektor yang ditemukan paling mirip secara semantik.
Dalam Database Vektor Terintegrasi di Cosmos DB di Fabric, penyematan dapat disimpan, diindeks, dan dikueri bersama data asli. Pendekatan ini menghilangkan biaya tambahan untuk mereplikasi data dalam database vektor murni terpisah. Selain itu, arsitektur ini menjaga penyematan vektor dan data asli bersama-sama, yang lebih memfasilitasi operasi data multi-modal, dan memungkinkan konsistensi, skala, dan performa data yang lebih besar.
Kebijakan vektor kontainer
Melakukan pencarian vektor dengan Cosmos DB di Fabric mengharuskan Anda menentukan kebijakan vektor untuk kontainer. Kebijakan ini memberikan informasi penting bagi mesin database untuk melakukan pencarian kesamaan yang efisien untuk vektor yang ditemukan dalam dokumen kontainer. Konfigurasi ini juga menginformasikan kebijakan pengindeksan vektor informasi yang diperlukan, jika Anda memilih untuk menentukannya. Informasi berikut disertakan dalam kebijakan vektor yang terkandung:
path: properti yang berisi vektor (diperlukan).datatype: jenis data properti vektor. Jenis yang didukung adalahfloat32(default),int8, danuint8.dimensions: Dimensi atau panjang setiap vektor di jalur. Semua vektor dalam jalur harus memiliki jumlah dimensi yang sama. (bawaan1536).distanceFunction: Metrik yang digunakan untuk menghitung jarak/kesamaan. Metrik yang didukung adalah:cosine, yang memiliki nilai dari $-1$ (paling tidak mirip) dengan $+1$ (paling mirip).dot product, yang memiliki nilai dari $-\infty$ (paling tidak mirip) dengan $+\infty$ (paling mirip).euclidean, yang memiliki nilai dari $0$ (paling mirip) dengan $+\infty$ (paling sedikit serupa).
Nota
Setiap jalur unik dapat memiliki paling banyak satu kebijakan. Namun, beberapa kebijakan dapat ditentukan jika semuanya menargetkan jalur yang berbeda.
Kebijakan vektor kontainer dapat dijelaskan sebagai objek JSON. Berikut adalah dua contoh kebijakan vektor kontainer yang valid:
Kebijakan dengan satu jalur vektor
{
"vectorEmbeddings": [
{
"path": "/vector1",
"dataType": "float32",
"distanceFunction": "cosine",
"dimensions": 1536
}
]
}
Kebijakan dengan dua jalur vektor
{
"vectorEmbeddings": [
{
"path": "/vector1",
"dataType": "float32",
"distanceFunction": "cosine",
"dimensions": 1536
},
{
"path": "/vector2",
"dataType": "int8",
"distanceFunction": "dotproduct",
"dimensions": 100
}
]
}
Untuk informasi selengkapnya dan contoh pengaturan kebijakan vektor kontainer, lihat sampel kebijakan pengindeksan vektor.
Kebijakan pengindeksan vektor
Indeks vektor meningkatkan efisiensi saat melakukan pencarian vektor menggunakan VectorDistance fungsi sistem. Pencarian vektor memiliki latensi yang lebih rendah, throughput yang lebih tinggi, dan konsumsi RU yang lebih sedikit saat menggunakan indeks vektor. Anda dapat menentukan jenis kebijakan indeks vektor ini:
| Deskripsi | Dimensi maks | |
|---|---|---|
flat |
Menyimpan vektor pada indeks yang sama dengan properti terindeks lainnya. | 505 |
quantizedFlat |
Mengukur (mengompresi) vektor sebelum menyimpan pada indeks. Kebijakan ini dapat meningkatkan latensi dan throughput dengan biaya akurasi dalam jumlah kecil. | 4096 |
diskANN |
Membuat indeks berdasarkan DiskANN untuk perkiraan pencarian yang cepat dan efisien. | 4096 |
Nota
Indeks quantizedFlat dan diskANN mengharuskan setidaknya 1.000 vektor dimasukkan. Minimum ini untuk memastikan akurasi proses kuantisasi. Jika ada kurang dari 1.000 vektor, pemindaian penuh dijalankan sebagai gantinya dan mengarah ke biaya RU yang lebih tinggi untuk kueri pencarian vektor.
Beberapa poin yang perlu diperhatikan:
Jenis
flatindeks danquantizedFlatmenggunakan indeks Cosmos DB untuk menyimpan dan membaca setiap vektor selama pencarian vektor. Pencarian vektor denganflatindeks adalah pencarian brute-force dan menghasilkan akurasi atau pengenalan 100%. Artinya, mereka dijamin menemukan vektor yang paling mirip dalam himpunan data. Namun, ada batasan505dimensi untuk vektor pada indeks datar.Indeks
quantizedFlatmenyimpan vektor kuantisasi (terkompresi) pada indeks. Pencarian vektor denganquantizedFlatindeks juga merupakan pencarian brute-force, namun akurasinya mungkin sedikit kurang dari 100% karena vektor diukur sebelum ditambahkan ke indeks. Namun, pencarian vektor denganquantized flatharus memiliki latensi yang lebih rendah, throughput yang lebih tinggi, dan biaya RU yang lebih rendah daripada pencarian vektor padaflatindeks. Indeks ini adalah opsi yang baik untuk skenario yang lebih kecil, atau skenario di mana Anda menggunakan filter kueri untuk mempersempit pencarian vektor ke sekumpulan vektor yang relatif kecil.quantizedFlatdisarankan ketika jumlah vektor yang akan diindeks berada di sekitar 50.000 atau lebih sedikit per partisi fisik. Namun, rekomendasi ini hanyalah pedoman umum dan performa aktual harus diuji karena setiap skenario bisa berbeda.Indeks
diskANNadalah indeks terpisah yang didefinisikan khusus untuk vektor yang menggunakan DiskANN, serangkaian algoritma pengindeksan vektor performa tinggi yang dikembangkan oleh Microsoft Research. Indeks DiskANN dapat menawarkan latensi terendah, throughput tertinggi, serta biaya RU terendah untuk kueri, sambil tetap mempertahankan akurasi yang tinggi. Secara umum, DiskANN adalah yang paling berkinerja dari semua jenis indeks jika ada lebih dari 50.000 vektor per partisi fisik.
Berikut adalah contoh kebijakan indeks vektor yang valid:
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*"
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "diskANN"
}
]
}
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*",
},
{
"path": "/vector2/*",
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
},
{
"path": "/vector2",
"type": "diskANN"
}
]
}
Penting
Jalur vektor ditambahkan ke bagian excludedPaths kebijakan pengindeksan untuk memastikan performa yang dioptimalkan untuk penyisipan. Tidak menambahkan path vektor ke excludedPaths mengakibatkan biaya satuan permintaan dan latensi yang lebih tinggi untuk penyisipan vektor.
Penting
Karakter wildcard (*, []) tidak didukung dalam kebijakan vektor atau indeks vektor.
Melakukan pencarian vektor dengan kueri menggunakan VECTORDISTANCE
Setelah Anda membuat kontainer dengan kebijakan vektor yang diinginkan, dan menyisipkan data vektor ke dalam kontainer, Anda dapat melakukan pencarian vektor menggunakan fungsi bawaan VECTORDISTANCE dalam kueri. Contoh kueri NoSQL yang memproyeksikan skor kesamaan sebagai alias score, dan mengurutkan dalam urutan yang paling mirip dengan yang paling tidak serupa:
SELECT TOP 10
c.title,
VECTORDISTANCE(c.contentVector, [1,2,3]) AS score
FROM
container c
ORDER BY
VECTORDISTANCE(c.contentVector, [1,2,3])
Penting
Selalu gunakan TOP N klausa dalam SELECT pernyataan kueri. Jika tidak, pencarian vektor mencoba mengembalikan lebih banyak hasil yang menyebabkan kueri menelan biaya lebih banyak unit permintaan (RU) dan memiliki latensi yang lebih tinggi dari yang diperlukan.