การพัฒนา SQLite extension ใหม่สำหรับการค้นหาเวกเตอร์
- sqlite-vec เป็นส่วนขยายใหม่สำหรับการค้นหาเวกเตอร์ใน SQLite และมีแผนจะมาแทนที่ sqlite-vss เดิม
- จะเป็นเครื่องมือค้นหาเวกเตอร์แบบฝังที่ทำงานได้ในทุกสภาพแวดล้อมที่รัน SQLite (รวมถึง WASM) และถูกออกแบบให้ "เร็วพอใช้"
- แม้ยังอยู่ระหว่างการพัฒนา แต่แนะนำให้เช็ก repository เมื่อพร้อมใช้งานแล้ว
ลักษณะของ sqlite-vec
- ส่วนขยายของ SQLite ที่เขียนด้วยภาษา C ล้วนและไม่มี dependency
- มี SQL function แบบ custom และ virtual table สำหรับการค้นหาเวกเตอร์ที่เร็ว
- มีเครื่องมือและยูทิลิตีอื่น ๆ สำหรับการทำงานกับเวกเตอร์ (quantization, การแปลง JSON/BLOB/numpy, การคำนวณเวกเตอร์ ฯลฯ)
- ค้นหาเวกเตอร์ได้ด้วย SQL อย่างเดียว (โดยใช้ CREATE VIRTUAL TABLE, INSERT INTO, SELECT)
จุดเด่นของ sqlite-vec
- เขียนด้วย C ล้วน ทำให้รันได้บนทุกแพลตฟอร์ม (Linux/MacOS/Windows), เว็บเบราว์เซอร์ (WebAssembly), มือถือ และ Raspberry Pi
- ขนาดไบนารีเล็ก อยู่ในระดับเพียงไม่กี่ร้อย KB
- ควบคุมการใช้หน่วยความจำได้ดีกว่า (เก็บเวกเตอร์เป็นชิ้นย่อย แล้วอ่านเป็นทีละชิ้นในระหว่างการค้นหา KNN)
- ใช้คำสั่ง PRAGMA mmap_size เพื่อเพิ่มความเร็วแบบ in-memory ได้
- รองรับ Matryoshka embeddings และการเข้ารหัสเวกเตอร์ความยาวแปรผัน รวมถึง int8/bit vectors เพื่อทำ binary และ scalar quantization ได้
- ควบคุมความเร็ว ความแม่นยำ และพื้นที่ดิสก์ได้มากขึ้น
- เริ่มต้นรองรับเฉพาะการค้นหาแบบ full scan เท่านั้น แต่มีแผนจะเพิ่ม IVF + HNSW ในอนาคต
สาธิต
- รัน sqlite-vec ได้โดยตรงในเบราว์เซอร์ (โหลดฐานข้อมูล
movies.bit.db ของ SQLite)
- ตาราง
articles มีคอลัมน์เช่น title, release_date, overview
- ตารางเสมือน
vec_movies เก็บเวกเตอร์ฝังของคอลัมน์ overview (เวกเตอร์ไบนารี 768 มิติ ขนาด 96 ไบต์)
- สามารถค้นหาภาพยนตร์ที่คล้ายกับภาพยนตร์ที่เลือกได้ 10 เรื่องด้วยการค้นหาแบบ KNN
ปัญหาของ sqlite-vss
- ใช้งานได้เฉพาะบน Linux + MacOS (ไม่รองรับ Windows, WASM, และอุปกรณ์มือถือ)
- เก็บเวกเตอร์ทั้งหมดไว้ในหน่วยความจำ
- มีบักและปัญหาหลายอย่างเกี่ยวกับ transaction
- คอมไพล์ยากมากและใช้เวลานาน
- ขาดการทำงานเวกเตอร์พื้นฐานทั่วไป (scalar/binary quantization)
- เกิดปัญหาจากการพึ่งพา Faiss
สถานะการพัฒนา sqlite-vec
- ฟังก์ชันหลักทำงานได้ แต่ยังแทบไม่มีระบบจัดการข้อผิดพลาดและการทดสอบ
- ไฟล์
sqlite-vec.c มี TODO อยู่ 246 รายการ
- หลังจากแก้ TODO ทั้งหมดเสร็จพร้อมเอกสาร เดโม บันเดิง และองค์ประกอบประกอบอื่น ๆ จะปล่อย
sqlite-vec v0.1.0 (เป้าหมายประมาณหนึ่งเดือน)
ความคิดเห็นของ GN⁺
- เสน่ห์ของโครงการคือเป็นเครื่องมือค้นหาเวกเตอร์แบบฝังที่รันได้บนหลายแพลตฟอร์มและสภาพแวดล้อม โดยเฉพาะที่สามารถรันด้วย WASM ในเว็บเบราว์เซอร์ได้ ซึ่งน่าสนใจมาก
- จุดเด่นอีกอย่างคือการควบคุมหน่วยความจำ, เวกเตอร์ความยาวแปรผัน และ quantization ที่สะท้อนเทคโนโลยีการค้นหาเวกเตอร์ล่าสุด ทำให้ดูเป็นการควบคุมความเร็ว ความแม่นยำ และพื้นที่เก็บข้อมูลได้อย่างยืดหยุ่น
- อย่างไรก็ตาม การรองรับเฉพาะการค้นหาแบบ full scan ถือเป็นข้อจำกัด หากข้อมูลมีขนาดใหญ่ขึ้นความเร็วในการค้นหาอาจลดลง จึงจำเป็นที่ต้องรองรับอัลกอริทึม ANN อย่าง IVF+HNSW โดยเร่งด่วน
- แม้ว่าโครงการยังอยู่ในช่วงต้น จึงดูว่ายังไม่เหมาะสมสำหรับใช้ใน production จริง ต้องใช้เวลาเพิ่มเพื่อให้เสถียรขึ้น
- นอกจากนี้ยังควรมีการเปรียบเทียบ benchmark กับไลบรารีค้นหาเวกเตอร์แบบเดิม เช่น Faiss ด้วย เพราะแม้ข้อดีคือเป็น SQLite extension แบบ pure SQLite ก็ยังต้องยืนยันด้านประสิทธิภาพ
1 ความคิดเห็น
ความคิดเห็นบน Hacker News