Đang phát triển một tiện ích mở rộng mới để tìm kiếm vector trên SQLite
- sqlite-vec là một tiện ích mở rộng mới cho SQLite nhằm hỗ trợ tìm kiếm vector và dự kiến thay thế sqlite-vss hiện tại.
- Sẽ là công cụ tìm kiếm vector nhúng "đủ nhanh" có thể chạy được trên mọi môi trường chạy SQLite (kể cả WASM).
- Dù vẫn đang trong quá trình phát triển, bài viết khuyên nên xem repository ngay khi nó đã sẵn sàng.
Đặc điểm của sqlite-vec
- Tiện ích mở rộng SQLite viết bằng C thuần túy và không có phụ thuộc.
- Cung cấp hàm SQL tùy chỉnh và bảng ảo để thực hiện tìm kiếm vector nhanh.
- Cung cấp thêm các công cụ và tiện ích cho các tác vụ vector (lượng tử hóa, chuyển đổi JSON/BLOB/numpy, phép toán vector, v.v.).
- Có thể thực hiện tìm kiếm vector chỉ bằng SQL (sử dụng câu lệnh CREATE VIRTUAL TABLE, INSERT INTO, SELECT)
Ưu điểm của sqlite-vec
- Viết bằng C thuần túy nên có thể chạy trên mọi nền tảng (Linux/MacOS/Windows), trình duyệt web (WebAssembly), điện thoại di động, Raspberry Pi, v.v.
- Kích thước nhị phân chỉ ở mức vài trăm KB.
- Kiểm soát tốt hơn việc sử dụng bộ nhớ (lưu vector theo từng chunk và đọc theo từng chunk khi tìm kiếm KNN).
- Có thể cải thiện tốc độ in-memory bằng lệnh PRAGMA mmap_size.
- Hỗ trợ embedding độ dài biến thiên như Matryoshka, cũng như vector int8/bit, cho phép lượng tử hóa nhị phân và lượng tử hóa vô hướng.
- Có thể kiểm soát tốt hơn về tốc độ, độ chính xác và dung lượng đĩa.
- Ban đầu chỉ hỗ trợ tìm kiếm vector toàn bộ (brute-force), nhưng dự kiến sẽ bổ sung IVF + HNSW sau này.
Demo
- Có thể chạy sqlite-vec ngay trên trình duyệt (cơ sở dữ liệu SQLite movies.bit.db đã được tải).
- Bảng articles có các cột như title, release_date, overview.
- Bảng ảo vec_movies lưu vector nhúng của cột overview (vector nhị phân 768 chiều, 96 byte).
- Có thể tìm 10 bộ phim có độ tương đồng cao nhất với bộ phim đã chọn bằng tìm kiếm kiểu KNN.
Vấn đề của sqlite-vss
- Chỉ hoạt động trên Linux + MacOS (không hỗ trợ Windows, WASM, thiết bị di động, v.v.)
- Lưu toàn bộ vector trong bộ nhớ.
- Có nhiều lỗi và sự cố liên quan đến transaction.
- Việc biên dịch rất khó và tốn thời gian.
- Thiếu các phép toán vector phổ thông (lượng tử hóa vô hướng/nhị phân).
- Các vấn đề phát sinh do việc phụ thuộc vào Faiss.
Tiến độ phát triển của sqlite-vec
- Chức năng cốt lõi đã hoạt động, nhưng hiện tại gần như chưa có xử lý lỗi và thử nghiệm.
- Tệp sqlite-vec.c có 246 TODO.
- Sau khi hoàn tất toàn bộ TODO, dự kiến ra mắt sqlite-vec v0.1.0 cùng tài liệu, demo, binding, v.v. (mục tiêu khoảng một tháng).
Ý kiến của GN⁺
- Việc là một công cụ tìm kiếm vector nhúng chạy được trên nhiều nền tảng và môi trường khác nhau rất đáng chú ý. Đặc biệt, khả năng chạy bằng WASM ngay trong trình duyệt web là rất thú vị.
- Việc phản ánh các kỹ thuật tìm kiếm vector mới như kiểm soát bộ nhớ, embedding độ dài biến thiên, lượng tử hóa cũng là điểm mạnh; có vẻ có thể kiểm soát linh hoạt tốc độ, độ chính xác và dung lượng lưu trữ.
- Tuy nhiên, đây chỉ là hạn chế là hiện mới hỗ trợ tìm kiếm toàn bộ. Khi dữ liệu tăng lên, có thể xuất hiện vấn đề tốc độ. Hỗ trợ các thuật toán ANN như IVF+HNSW dường như rất cấp thiết.
- Ngoài ra, đây vẫn ở giai đoạn phát triển đầu nên chưa phù hợp để sử dụng trong môi trường production thực tế. Có vẻ còn cần thêm thời gian để ổn định.
- Cần xem xét so sánh benchmark với các thư viện tìm kiếm vector truyền thống như Faiss. Dù có lợi thế là một tiện ích mở rộng SQLite thuần túy, hiệu năng vẫn cần được xác thực.
1 bình luận
Ý kiến trên Hacker News