データベースは単一の SQLite ファイル (telos.db) として管理されます。メタデータ管理用の標準テーブルと、sqlite-vec によるベクトル演算用の仮想テーブルの 2 つで構成されます。
erDiagram
items ||--|| vec_items : "1:1 Mapping (id)"
items {
integer id PK "Primary Key (Autoincrement)"
text content "文書本文"
text path "ファイルパス / 出典識別子"
datetime created_at "作成日時"
datetime updated_at "更新日時 (Auto-trigger)"
}
vec_items {
integer id PK "items.id と同一"
blob embedding "640-dim Vector (f32)"
}
items テーブル| カラム | 型 | NULL | 初期値 | 説明 |
|---|---|---|---|---|
id |
INTEGER | NO | AUTOINC | 保存文書のユニーク ID |
content |
TEXT | NO | - | 元のテキストデータ |
path |
TEXT | YES | - | ドキュメントの出典メタデータ |
vec_items (Virtual Table)sqlite-vec (vec0) モジュールを使用した仮想テーブルです。
items.id と同期。FLOAT[640] (内部的には BLOB)MATCH 演算子による高速な近傍探索。SELECT i.id, i.content, v.distance FROM items i JOIN vec_items v ON i.id = v.id WHERE v.embedding MATCH :query_vector -- ベクトル近傍マッチング AND k = :k -- 返却件数 (LIMIT とは別に必要) ORDER BY distance;
LLM サーバーが停止している場合、sqlite-vec による検索が不可能なため、content LIKE %?% による全文検索へ自動的にフォールバックします。
vec_items 側のデータが不足している、または次元が異なる場合、バックグラウンドで items からベクトルを再生成し修復します(db::sync_vectors)。items と vec_items への登録はアトミックに行われ、片方のみの登録が残らないよう制御されています。