Pengembangan fitur baru SQLite untuk pencarian vektor
- sqlite-vec adalah ekstensi baru untuk pencarian vektor di SQLite dan akan menggantikan sqlite-vss yang ada.
- Akan menjadi alat pencarian vektor tertanam yang "cukup cepat" dan dapat dijalankan di semua lingkungan tempat SQLite berjalan, termasuk WASM.
- Meskipun masih dalam pengembangan, disarankan untuk mengecek repositori saat sudah siap.
Fitur sqlite-vec
- Ekstensi SQLite yang ditulis dalam C murni dan tanpa dependensi.
- Menyediakan fungsi SQL kustom dan tabel virtual untuk pencarian vektor yang cepat.
- Menyediakan alat dan utilitas lain untuk operasi vektor (kuantisasi, konversi JSON/BLOB/numpy, operasi vektor, dll.).
- Pencarian vektor dapat dilakukan hanya dengan SQL (menggunakan pernyataan
CREATE VIRTUAL TABLE, INSERT INTO, dan SELECT).
Kelebihan sqlite-vec
- Dibuat dalam C murni, sehingga dapat berjalan di semua platform (Linux/MacOS/Windows), browser web (WebAssembly), ponsel, Raspberry Pi, dan sebagainya.
- Ukuran biner kecil, hanya ratusan KB.
- Penggunaan memori lebih mudah dikontrol (menyimpan vektor dalam bentuk chunk dan membacanya per chunk saat pencarian KNN).
- Kecepatan in-memory dapat ditingkatkan dengan perintah
PRAGMA mmap_size.
- Dengan dukungan embedding panjang variabel seperti Matryoshka serta vektor int8/bit, memungkinkan kuantisasi biner dan skalar.
- Kontrol yang lebih besar atas kecepatan, akurasi, dan ruang disk.
- Pada awalnya hanya mendukung pencarian vektor brute force, tetapi ke depan akan menambahkan IVF + HNSW.
Demo
- sqlite-vec dapat dieksekusi langsung di browser (basis data SQLite
movies.bit.db dimuat).
- Tabel
articles berisi kolom seperti title, release_date, dan overview.
- Tabel virtual
vec_movies menyimpan vektor embedding dari kolom overview (vektor biner 768 dimensi, 96 byte).
- Pencarian bergaya KNN dapat menemukan 10 film paling mirip dengan film yang dipilih.
Masalah sqlite-vss
- Hanya berjalan di Linux + MacOS (tidak mendukung Windows, WASM, perangkat seluler, dan lain-lain).
- Menyimpan seluruh vektor di memori.
- Banyak bug dan isu terkait transaksi.
- Kompilasi sangat sulit dan memakan waktu lama.
- Tidak ada operasi vektor umum (kuantisasi skalar/biner).
- Masalah yang muncul karena ketergantungan pada Faiss.
Status pengembangan sqlite-vec
- Fungsi inti sudah berjalan, tetapi saat ini hampir tidak ada penanganan error dan pengujian.
- Terdapat 246 TODO pada file
sqlite-vec.c.
- Setelah semua TODO selesai, SQLite-vec v0.1.0 direncanakan dirilis bersama dokumentasi, demo, binding, dll. (target sekitar satu bulan).
Opini GN+
- Menarik karena menjadi alat pencarian vektor tersemat yang dapat berjalan di berbagai platform dan lingkungan, khususnya karena bisa dijalankan di browser web melalui WASM.
- Keunggulan lain adalah penerapan teknologi pencarian vektor terbaru seperti kontrol memori, embedding panjang variabel, dan kuantisasi. Ini tampak memungkinkan kontrol fleksibel atas kecepatan, akurasi, dan ruang penyimpanan.
- Namun, keterbatasannya adalah mendukung hanya pencarian brute force. Jika ukuran data membesar, masalah kecepatan pencarian bisa muncul. Dukungan algoritma ANN seperti IVF + HNSW tampak mendesak.
- Selain itu, karena masih tahap awal pengembangan, sepertinya belum siap untuk dipakai di lingkungan produksi. Masih diperlukan waktu lebih banyak agar stabil.
- Perbandingan benchmark dengan pustaka pencarian vektor yang sudah ada seperti Faiss juga tampak perlu. Meski keunggulannya adalah sebagai ekstensi SQLite murni, performanya perlu divalidasi.
1 komentar
Komentar Hacker News