概要
生成されたEmbeddingベクトルをSQLite(symbols.db)に格納し、ベクトル検索(コサイン類似度)を実行できるようにする。
背景・動機
Semantic Searchを実現するために、生成されたembeddingを永続化し、高速なベクトル類似度検索ができるストレージ層が必要。
提案する解決策
スキーマ
CREATE TABLE embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL,
section_heading TEXT, -- 見出し(NULL = ファイル全体)
embedding BLOB NOT NULL, -- f32配列をバイナリ格納
dimension INTEGER NOT NULL, -- ベクトル次元数
model_name TEXT NOT NULL, -- 生成に使用したモデル名
file_hash TEXT NOT NULL, -- キャッシュ用ハッシュ
created_at TEXT NOT NULL
);
CREATE INDEX idx_embeddings_path ON embeddings(file_path);
CREATE INDEX idx_embeddings_hash ON embeddings(file_hash);
ベクトル格納方式
Vec<f32> を byteorder crateで BLOB に変換して格納
- 読み出し時に
BLOB → Vec<f32> に復元
- 次元数は
dimension カラムで管理(モデル変更時の検出用)
コサイン類似度検索
pub fn search_similar(
&self,
query_embedding: &[f32],
top_k: usize,
) -> Result<Vec<(String, String, f32)>> // (file_path, section, similarity)
- 全ベクトルをメモリにロードし、コサイン類似度を計算
- 想定規模(1500ファイル × 数セクション = 数千ベクトル)ではブルートフォースで十分
- 将来的にANN(近似最近傍)が必要になれば別途対応
スキーマバージョン
CURRENT_SYMBOL_SCHEMA_VERSION をインクリメント
- 既存DBはバージョン不一致時に
clean & rebuild で対応
delete/update連携
SymbolStore::delete_by_file() に embeddings の DELETE を追加
- ファイル更新時は delete-before-insert パターン
受け入れ基準
依存 Issue
概要
生成されたEmbeddingベクトルをSQLite(symbols.db)に格納し、ベクトル検索(コサイン類似度)を実行できるようにする。
背景・動機
Semantic Searchを実現するために、生成されたembeddingを永続化し、高速なベクトル類似度検索ができるストレージ層が必要。
提案する解決策
スキーマ
ベクトル格納方式
Vec<f32>をbyteordercrateでBLOBに変換して格納BLOB→Vec<f32>に復元dimensionカラムで管理(モデル変更時の検出用)コサイン類似度検索
スキーマバージョン
CURRENT_SYMBOL_SCHEMA_VERSIONをインクリメントclean & rebuildで対応delete/update連携
SymbolStore::delete_by_file()にembeddingsの DELETE を追加受け入れ基準
依存 Issue