vectordb
adalah database vektor Pythonic yang menawarkan rangkaian operasi CRUD (Buat, Baca, Perbarui, Hapus) yang komprehensif dan opsi skalabilitas yang kuat, termasuk sharding dan replikasi. Ini mudah diterapkan di berbagai lingkungan, dari lokal hingga on-premise dan cloud. vectordb
memberikan apa yang Anda butuhkan - tidak lebih, tidak kurang. Ini adalah bukti desain Pythonic yang efektif tanpa rekayasa berlebihan, menjadikannya solusi yang ramping namun kuat untuk semua kebutuhan Anda.
vectordb
memanfaatkan kehebatan pengambilan DocArray dan skalabilitas, keandalan, dan kemampuan penyajian Jina. Inilah keajaibannya: DocArray berfungsi sebagai mesin yang menggerakkan logika pencarian vektor, sementara Jina menjamin penyajian indeks yang efisien dan terukur. Sinergi ini menghasilkan pengalaman database vektor yang kuat namun mudah digunakan - itulah vectordb
untuk Anda.
pip instal vektordb
vectordb
secara lokalMulailah dengan mendefinisikan skema Dokumen dengan sintaks kelas data DocArray:
dari docarray impor BaseDocdari docarray.mengetik impor NdArrayclass ToyDoc(BaseDoc): teks: str = '' menyematkan: NdArray[128]
Pilih database yang sudah dibuat sebelumnya (seperti InMemoryExactNNVectorDB
atau HNSWVectorDB
), dan terapkan skema:
from docarray import DocListimport numpy as npfrom vectordb import InMemoryExactNNVectorDB, HNSWVectorDB# Tentukan pathdb ruang kerja Anda = InMemoryExactNNVectorDB[ToyDoc](workspace='./workspace_path')# Indeks daftar dokumen dengan embeddings acakdoc_list = [ToyDoc(text=f'toy doc {Saya}', embedding=np.random.rand(128)) untuk saya dalam rentang(1000)]db.index(inputs=DocList[ToyDoc](doc_list))# Melakukan pencarian queryquery = ToyDoc(text='query', embedding=np .random.rand(128))hasil = db.pencarian(inputs=DocList[ToyDoc]([kueri]), limit=10)# Cetak kecocokan untuk m di hasil[0].cocok: print(m)
Karena kami mengeluarkan satu kueri, results
hanya berisi satu elemen. Hasil pencarian tetangga terdekat disimpan dengan mudah di atribut .matches
.
vectordb
sebagai layanan vectordb
dirancang agar mudah disajikan sebagai layanan, mendukung protokol komunikasi gRPC
, HTTP
, dan Websocket
.
Di sisi server, Anda akan memulai layanan sebagai berikut:
dengan db.serve(protocol='grpc', port=12345, replicas=1, shards=1) sebagai layanan: service.block()
Perintah ini memulai vectordb
sebagai layanan pada port 12345
, menggunakan protokol gRPC
dengan 1
replika dan 1
shard.
Di sisi klien, Anda dapat mengakses layanan dengan perintah berikut:
dari vectordb import Client# Membuat instance klien yang terhubung ke server. Dalam prakteknya, ganti 0.0.0.0 dengan alamat IP server.client = Client[ToyDoc](address='grpc://0.0.0.0:12345')# Lakukan pencarian queryresults = client.search(inputs=DocList[ToyDoc] ([kueri]), batas=10)
Hal ini memungkinkan Anda untuk melakukan permintaan pencarian, menerima hasilnya langsung dari layanan vectordb
jarak jauh.
vectordb
di Jina AI Cloud Anda dapat dengan mudah menerapkan instance vectordb
Anda ke Jina AI Cloud, yang menjamin akses ke database Anda dari lokasi mana pun.
Mulailah dengan menyematkan instance atau kelas database Anda ke dalam file Python:
# example.pyfrom docarray import BaseDocfrom vectordb import InMemoryExactNNVectorDBdb = InMemoryExactNNVectorDB[ToyDoc](workspace='./vectordb') # perhatikan bagaimana `db` adalah instance yang ingin kita layani jika __name__ == '__main__':# PENTING: pastikan untuk melindungi bagian kode ini menggunakan __main__ guardwith db.serve() sebagai layanan:layanan.blok()
Selanjutnya, ikuti langkah-langkah berikut untuk men-deploy instans Anda:
Jika Anda belum melakukannya, daftar akun Jina AI Cloud.
Gunakan baris perintah jc
untuk masuk ke akun Jina AI Cloud Anda:
jc masuk
Terapkan instans Anda:
penerapan vectordb --db contoh:db
Setelah penerapan, gunakan Klien vectordb
untuk mengakses titik akhir yang ditetapkan:
from vectordb import Client# ganti ID dengan ID DB yang Anda terapkan seperti yang ditunjukkan pada gambar di atasc = Client(address='grpcs://ID.wolf.jina.ai')
Anda kemudian dapat membuat daftar, menjeda, melanjutkan, atau menghapus DB yang Anda terapkan dengan perintah jc
:
jcloud list ID
jcloud pause ID
atau jcloud resume ID
jcloud remove ID
Basis data vektor berfungsi sebagai repositori canggih untuk penyematan, menangkap esensi kesamaan semantik di antara objek yang berbeda. Basis data ini memfasilitasi pencarian kesamaan di berbagai tipe data multimodal, membuka jalan bagi era baru pengambilan informasi. Dengan memberikan pemahaman kontekstual dan memperkaya hasil generasi, database vektor sangat meningkatkan kinerja dan kegunaan Model Pembelajaran Bahasa (LLM). Hal ini menggarisbawahi peran penting mereka dalam evolusi ilmu data dan aplikasi pembelajaran mesin.
Penggunaan perpustakaan lokal dan interaksi klien-server di vectordb
berbagi API yang sama. Ini menyediakan fungsionalitas index
, search
, update
, dan delete
:
index
: Menerima DocList
untuk diindeks.
search
: Mengambil DocList
dari kumpulan kueri atau satu BaseDoc
sebagai satu kueri. Ini mengembalikan hasil tunggal atau ganda, masing-masing dengan atribut matches
dan scores
yang diurutkan berdasarkan relevance
.
delete
: Menerima DocList
dokumen untuk dihapus dari indeks. Hanya atribut id
yang diperlukan, jadi pastikan untuk melacak IDs
indexed
jika Anda perlu menghapus dokumen.
update
: Menerima DocList
dokumen untuk diperbarui dalam indeks. Operasi update
akan mengganti dokumen indexed
dengan indeks yang sama dengan atribut dan muatan dari dokumen masukan.
Anda dapat melayani vectordb
dan mengaksesnya dari klien dengan parameter berikut:
protokol: Protokol penyajian. Bisa berupa gRPC
, HTTP
, websocket
atau kombinasi keduanya, disediakan sebagai daftar. Standarnya adalah gRPC
.
port: Port akses layanan. Dapat berupa daftar port untuk setiap protokol yang disediakan. Standarnya adalah 8081.
ruang kerja: Jalur di mana VectorDB menyimpan data yang diperlukan. Standarnya adalah '.' (direktori saat ini).
Anda dapat mengatur dua parameter penskalaan saat melayani atau menyebarkan Database Vektor Anda dengan vectordb
:
Pecahan: Jumlah pecahan data. Hal ini meningkatkan latensi, karena vectordb
memastikan Dokumen diindeks hanya di salah satu pecahan. Permintaan pencarian dikirim ke semua pecahan dan hasilnya digabungkan.
Replika: Jumlah replika DB. vectordb
menggunakan algoritma RAFT untuk menyinkronkan indeks antara replika setiap pecahan. Hal ini meningkatkan ketersediaan layanan dan throughput pencarian, karena beberapa replika dapat merespons lebih banyak permintaan pencarian secara paralel sekaligus memungkinkan operasi CRUD. Catatan: Dalam penerapan JCloud, jumlah replika diatur ke 1. Kami sedang berupaya mengaktifkan replikasi di cloud.
Berikut adalah parameter untuk setiap tipe VectorDB
:
Basis data ini melakukan pencarian menyeluruh pada penyematan dan memiliki pengaturan konfigurasi terbatas:
workspace
: Folder tempat data yang diperlukan disimpan.
InMemoryExactNNVectorDB[MyDoc](workspace='./vectordb')InMemoryExactNNVectorDB[MyDoc].serve(workspace='./vectordb')
Database ini menggunakan algoritma HNSW (Hierarchical Navigable Small World) dari HNSWLib untuk pencarian Approximate Nearest Neighbor. Ini menyediakan beberapa opsi konfigurasi:
workspace
: Menentukan direktori tempat data yang diperlukan disimpan dan dipertahankan.
Selain itu, HNSWVectorDB menawarkan serangkaian konfigurasi yang memungkinkan penyesuaian kinerja dan akurasi algoritma pencarian Nearest Neighbor. Penjelasan rinci tentang konfigurasi ini dapat ditemukan di README HNSWLib:
space
: Menentukan metrik kesamaan yang digunakan untuk spasi (pilihan adalah "l2", "ip", atau "cosine"). Standarnya adalah "l2".
max_elements
: Menetapkan kapasitas awal indeks, yang dapat ditingkatkan secara dinamis. Standarnya adalah 1024.
ef_construction
: Parameter ini mengontrol trade-off kecepatan/akurasi selama pembuatan indeks. Standarnya adalah 200.
ef
: Parameter ini mengontrol trade-off waktu/akurasi kueri. Standarnya adalah 10.
M
: Parameter ini menentukan jumlah maksimum koneksi keluar dalam grafik. Standarnya adalah 16.
allow_replace_deleted
: Jika disetel ke True
, ini memungkinkan penggantian elemen yang dihapus dengan elemen yang baru ditambahkan. Standarnya adalah False
.
num_threads
: Ini menetapkan jumlah thread default yang akan digunakan selama operasi index
dan search
. Standarnya adalah 1.
vectordb
menyertakan CLI sederhana untuk melayani dan menyebarkan database Anda:
Keterangan | Memerintah |
---|---|
Sajikan DB Anda secara lokal | vectordb serve --db example:db |
Terapkan DB Anda di Jina AI Cloud | vectordb deploy --db example:db |
Antarmuka yang Ramah Pengguna: Dengan vectordb
, kesederhanaan adalah kuncinya. Antarmuka intuitifnya dirancang untuk mengakomodasi pengguna di berbagai tingkat keahlian.
Desain Minimalis: vectordb
mengemas semua hal penting, tanpa kerumitan yang tidak perlu. Hal ini memastikan transisi yang mulus dari penerapan lokal ke server dan cloud.
Dukungan CRUD Penuh: Dari pengindeksan dan pencarian hingga pembaruan dan penghapusan, vectordb
mencakup seluruh spektrum operasi CRUD.
DB sebagai Layanan: Manfaatkan kekuatan protokol gRPC, HTTP, dan Websocket dengan vectordb
. Ini memungkinkan Anda untuk melayani database Anda dan melakukan operasi penyisipan atau pencarian secara efisien.
Skalabilitas: Rasakan kekuatan kemampuan penerapan vectordb
, termasuk fitur skalabilitas yang kuat seperti sharding dan replikasi. Tingkatkan latensi layanan Anda dengan sharding, sementara replikasi meningkatkan ketersediaan dan throughput.
Penerapan Cloud: Menerapkan layanan Anda di cloud sangatlah mudah dengan Jina AI Cloud. Opsi penerapan lainnya akan segera hadir!
Kemampuan Tanpa Server: vectordb
dapat diterapkan dalam mode tanpa server di cloud, memastikan pemanfaatan sumber daya dan ketersediaan data yang optimal sesuai kebutuhan Anda.
Algoritma Multiple ANN: vectordb
menawarkan beragam implementasi algoritma Approximate Nearest Neighbors (ANN). Berikut adalah penawaran saat ini, dengan lebih banyak integrasi yang akan dilakukan:
InMemoryExactNNVectorDB (Pencarian NN Tepat): Mengimplementasikan Algoritma Tetangga Terdekat Sederhana.
HNSWVectorDB (berdasarkan HNSW): Memanfaatkan HNSWLib
Masa depan Vector Database tampak cerah, dan kami mempunyai rencana ambisius! Berikut sekilas fitur yang sedang kami kembangkan:
Lebih Banyak Algoritma Pencarian ANN: Tujuan kami adalah untuk mendukung algoritma pencarian ANN yang lebih luas.
Kemampuan Penyaringan yang Ditingkatkan: Kami sedang berupaya menyempurnakan solusi Pencarian ANN kami untuk mendukung pemfilteran tingkat lanjut.
Kemampuan untuk disesuaikan: Kami bertujuan untuk membuat vectordb
sangat dapat dikustomisasi, memungkinkan pengembang Python untuk menyesuaikan perilakunya dengan kebutuhan spesifik mereka dengan mudah.
Memperluas Kapasitas Tanpa Server: Kami berupaya meningkatkan kapasitas vectordb
tanpa server di cloud. Meskipun saat ini kami mendukung penskalaan antara 0 dan 1 replika, tujuan kami adalah memperluasnya hingga 0 hingga N replika.
Opsi Penerapan yang Diperluas: Kami secara aktif berupaya memfasilitasi penerapan vectordb
di berbagai platform cloud, dengan beragam opsi.
Butuh bantuan dengan vectordb
? Tertarik untuk menggunakannya tetapi memerlukan fitur tertentu untuk memenuhi kebutuhan unik Anda? Jangan ragu untuk menghubungi kami. Bergabunglah dengan komunitas Discord kami untuk mengobrol dengan kami dan anggota komunitas lainnya.
Proyek VectorDB didukung oleh Jina AI dan dilisensikan di bawah Apache-2.0. Kontribusi dari komunitas sangat dihargai! Jika Anda memiliki ide untuk fitur baru atau peningkatan, kami akan senang mendengar pendapat Anda. Kami selalu mencari cara untuk membuat vectordb
lebih ramah pengguna dan efektif.