Newer
Older
TelosDB / journals / 20260220-0002-LLM排除とHNSW統合による検索強化.md

20260220-0002-LLM排除とHNSW統合による検索強化

作業実施の理由

LSA実装における静的な語彙制限と、LLMコンポーネントによる巨大なビルドサイズを解消するため。ユーザーの指示に基づき、LLM依存を完全に排除し、Rustネイティブな近似近傍検索(ANN)ライブラリ hnsw_rs を導入して、軽量かつ安定した検索エンジンへ移行した。

観点・意図

  • 軽量化: 数GBのLLMモデルと関連バイナリを削除し、配布・実行コストを最小化する。
  • 検索の安定化: 未知語が含まれても検索が停止(零ベクトル化)しないよう LSA の射影ロジックを堅牢にする。
  • 高速化: sqlite-vec による線形走査に近い検索から、HNSWによるグラフベースの高速な ANN 検索に切り替える。

作業詳細

  1. LLMコンポーネントの排除
    • AIエージェントは tauri.conf.json から externalBin (llama-server) および resources (model, dll) を削除した。
    • AIエージェントは build.rs を修正し、bin/ 以下のDLLを一括コピーする処理を廃止、必須の vec0.dll のみに限定した。
    • AIエージェントは rebuild_vecs.rs を削除し、bin/ 内の巨大な .gguf ファイルを物理削除した。
  2. MCPサーバーのクリーンアップ
    • AIエージェントは mcp.rs から llama-server のステータス監視ループおよび get_embedding 関数を削除した。
  3. HNSW (ANN) の統合
    • AIエージェントは Cargo.tomlhnsw_rs を追加した。
    • AIエージェントは AppStatehnsw_index を追加し、起動時の LSA トレーニング後に全ベクトルをインメモリの HNSW 構造にロードするよう実装した。
    • AIエージェントは search_text ツールを更新し、HNSW インデックスが存在する場合に優先的に使用するよう変更した。
  4. LSAロジックの改善
    • AIエージェントは lsa.rs において、クエリベクトルの正規化時に微小値を許容するようにし、未知語のみのクエリに対しても安全に零ベクトルを返すよう堅牢化した。

指摘事項とその対応

  • 指摘: LLM ライブラリは組み込まなくて良い(軽量化の意向)。
  • 対応: モデルファイル(2.5GB+)、サイドカー(llama-server)、および不要なDLL群を完全に排除し、hnsw_rs (純粋なRust) による実装へ切り替えた。

結果

  • ビルド環境から数GBのデータが削除され、起動およびビルドの効率が劇的に向上。
  • LSA+HNSWによる、外部サービスに依存しない高速な意味検索基盤が整った。
graph TD
    A[MCP Request: add_item] --> B[Tokenizer]
    B --> C[LSA Projection]
    C --> D[SQLite Insert]
    C --> E[HNSW Incremental Insert]
    
    F[MCP Request: search_text] --> G[LSA Projection]
    G --> H{HNSW Index exists?}
    H -- Yes --> I[HNSW ANN Search]
    H -- No --> J[sqlite-vec Linear Search]
    I --> K[Result Formatting]
    J --> K