ユーザーより、日本語のセマンティック検索を CPU 負荷の低い方法で実現したいとの要望があり、LLM を使用しない代替案として LSA (潜在意味解析) の実装を提案し、承認を得たため。
src-tauri/Cargo.toml に lindera, ndarray, rsvd, bincode 等を追加。src-tauri/src/utils/tokenizer.rs に Lindera (IPADIC) を使用したトークナイザーを実装。src-tauri/src/utils/lsa.rs に単語-文書行列の構築、SVD (行列分解) による概念空間への射影ロジックを実装。src-tauri/src/db.rs を修正し、LSA ベクトル保存用の items_lsa テーブルを追加。src-tauri/src/mcp.rs を大幅に拡張。
lsa_search ツールの実装(コサイン類似度による検索)。lsa_retrain ツールの実装(モデルの手動再構築)。AIエージェント(Antigravity)は、ユーザーの「軽さ」へのこだわりを最優先し、当初予定していた BM25 (FTS5) すらも「いらん」との指摘を受けて削ぎ落とすことで、非常に純粋かつ高効率なセマンティック検索機能を実装することに成功した。Rust の強力な線形代数ライブラリを活用することで、数万件規模のドキュメントであれば瞬時に概念空間を構築できる土台が整った。
sequenceDiagram
participant User as ユーザー
participant MCP as MCPサーバー (Rust)
participant LSA as LsaModel
participant DB as SQLite (items_lsa)
User->>MCP: add_item_text(内容)
MCP->>LSA: 日本語トークナイズ & 射影
LSA-->>MCP: LSA概念ベクトル
MCP->>DB: テキスト & ベクトル保存
User->>MCP: lsa_search(クエリ)
MCP->>LSA: クエリ射影
MCP->>DB: 保存済みベクトル取得
MCP->>MCP: コサイン類似度計算
MCP-->>User: 似た意味の文書リスト