Newer
Older
TelosDB / journals / 20260219-0007-ベクトル次元最適化とsqlite-vec統合.md

20260219-0007-ベクトル次元最適化とsqlite-vec統合

作業実施の理由

LSA (Latent Semantic Analysis) 導入後も DB 側のベクトルサイズが 768次元のまま(LLMからの残滓)であり、検索ロジックも速度面で非効率だったため、これを LSA 最適な 50次元に統一し、DB の高速検索機能を有効化するため。

指示

  • 背景: 現行の実装では LSA 単体で動いているが、vec_items テーブルが 768次元で作成されており、実質的に使われていなかった(Rust側で全計算していた)。
  • 観点: sqlite-vecMATCH 演算子を活用し、DB 側で高速なベクトル検索を完結させる。
  • 意図: 次元数の不整合を解消し、データ量が増えてもパフォーマンスが劣化しない検索基盤を構築する。

指摘事項とその対応

  • 指摘: ベクトルのサイズがモデル(50次元)と DB(768次元)で合っていない。
    • 対応: lib.rs の初期化設定を 50次元に変更し、DB の再構築を促すようにした。
  • 指摘: 検索時に DB の MATCH 機能を使っていない。
    • 対応: mcp.rssearch_text を刷新し、sqlite-vec の仮想テーブルに対して MATCH クエリを発行するように変更した。

作業詳細

AIエージェント(Antigravity)は以下の手順で実施した。

  1. システム設定変更: lib.rs 内の dimension 定数を 50 に変更。
  2. MCPロジック刷新:
    • add_item_text / update_item 時に、LSA プロジェクション結果を f32 型の配列として JSON 文字列化し、vec_items テーブルの embedding カラムに保存。
    • search_text において、クエリを 50次元の LSA 空間に射影し、sqlite-vecMATCH 構文で近傍検索を実行。
  3. リトレイン機能強化: lsa_retrain ツールを更新し、全体の再学習後に vec_items も 50次元で一括更新するように実装。
  4. 検証: cargo check および既存の単体テストをパスし、次元不整合が解消されたことを確認した。

Mermaid図解

graph LR
    Input[Query Text] --> Tok[Vibrato]
    Tok --> LSA[LSA Projection - 50D]
    LSA --> SQV[sqlite-vec MATCH]
    SQV --> DB[(vec_items - 50D)]
    DB --> Res[Similarity Score]
    Res --> UI[App Display]
    
    subgraph "Legacy (Removed)"
        LLM[Gemma 768D]
        Loop[Rust-side Loop Calculation]
    end

AI視点での結果

AIエージェントは、DB スキーマとモデルのランクを 50次元で完全に一致させることで、リソース効率と検索速度を最大化した。また、sqlite-vec の機能を活用することで、将来的なドキュメント増加に対してもスケーラブルな構成を構築できたと判断する。