Closed3

SQLiteでベクトル検索が可能な「sqlite-vec」を試す

kun432kun432

SQLiteのベクトル検索拡張は、以前は「sqlite-vss」というものがあったが、同じ作者の方が新たに「sqlite-vec」を作成されており、現在はこちらに力を入れているらしい。

https://alexgarcia.xyz/blog/2024/building-new-vector-search-sqlite/index.html

ざっくりまとめるとこんな感じ?

  • sqlite-vssに[多くの問題がある。
  • これらの問題のほとんどはsqlite-vssがFaissに依存していることから来ており修正が困難。
  • sqlite-vecはこれらの依存関係をなくした上で、純粋なCで書き直されている。これにより:
    • Linux、MacOS、Windows、WebAssembly、スマホ、Raspberry Piなど、どこでも実行できるようになった。
    • メモリ使用量や埋め込み量子化など、より細かく制御できるようになった。

制限としてはこのあたりかな?

  • まだpre-v1であり、今後破壊的変更が行われる可能性がある
  • 現時点ではフルスキャンベクトル検索しかサポートしていない。
kun432kun432

GitHubレポジトリ

https://github.com/asg017/sqlite-vec?tab=readme-ov-file

sqlite-vec

非常に小さく、どこでも動作する「十分に速い」ベクトル検索 SQLite 拡張!sqlite-vss の後継

  • 浮動小数点数、int8、バイナリベクトルを vec0 仮想テーブルに格納し、問い合わせる。
  • 純粋なC言語で書かれており、依存関係がなく、SQLiteが動作する場所であればどこでも動作する(Linux/MacOS/Windows、WASMを使ったブラウザ、Raspberry Pisなど)。
  • rowid IN (...) サブクエリでベクトルをプレフィルターする。

公式ドキュメント

https://alexgarcia.xyz/sqlite-vec/

sqlite-vec

どこでも動くベクトル検索 SQLite 拡張!

  • どこでも動く
    • ラップトップ、サーバ、モバイルデバイス、WASM 搭載ブラウザ、Raspberry Pis などで動作する!
  • 多くの言語のバインディング
    • Python、Ruby、Node.js/Deno/Bun、Go、Rustなど!
  • 純粋なSQL
    • 余分な設定やサーバーは必要ない - CREATE、INSERT、SELECT文のみ
kun432kun432

現状で使うならば、sqlite-vssのほうが情報も多くて良さそう。ただしその場合、今後のメンテはなさそう。sqlite-vecの開発に期待。

このスクラップは25日前にクローズされました