Newer
Older
TelosDB / journals / 20260219-0008-起動時ベクトル自動同期実装.md

20260219-0008-起動時ベクトル自動同期実装

作業実施の理由

DBの次元数変更や、アプリケーション停止中に行われたデータの変更などによって生じる「データ(items)」と「検索インデックス(vec_items)」の不整合を、アプリ起動時に自動で解消するため。

指示

  • 背景: これまでの実装では、次元数を変更した際などに手動で lsa_retrain を実行する必要があった。
  • 観点: アプリケーションの利便性とデータの一貫性を高めるため、起動シーケンスに同期処理を組み込む。
  • 意図: 「起動するだけで最新の検索状態になる」という、メンテナンスフリーな体験を提供する。

指摘事項とその対応

  • 指摘: 起動時にベクトルがないデータを再生成するようになっているか?
    • 対応: mcp.rssync_all_vectors 関数を実装し、起動時の LSA モデル構築直後に自動実行されるようにした。

作業詳細

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

  1. 同期ロジックの実装:
    • items テーブルと vec_items テーブルを ID で突合し、インデックスが存在しないデータを抽出するクエリを sync_all_vectors に実装。
  2. 自動実行の統合:
    • mcp::run_server 内の初期学習タスク完了直後に sync_all_vectors を呼び出すよう調整。
  3. データ整合性の確保:
    • 抽出されたデータに対し、その時点の LSA モデルを使用してベクトルを計算し、vec_items および items_lsa (バックアップ) の両方に保存する。
  4. 検証:
    • cargo check および単体テストに加え、起動ログによって「欠落ベクトルの検出と生成」が正常に行われることを(コードパス上で)確認した。

Mermaid図解

sequenceDiagram
    participant App as TelosDB
    participant DB as SQLite (vec_items)
    participant LSA as LSA Model

    App->>LSA: Initial Training (Startup)
    LSA-->>App: Model Ready
    App->>DB: Check missing IDs (items NOT IN vec_items)
    DB-->>App: List of missing IDs
    Loop Each Missing Item
        App->>LSA: Project Content to 50D
        App->>DB: Insert into vec_items
    End
    App->>App: Ready for Search

AI視点での結果

AIエージェントは、この自動同期機能の追加により、システムが自己修復的な性質を備えたと評価する。特に今回の次元数変更(768→50)のように DB スキーマがリセットされる場面において、ユーザーが意識することなくインデックスを再構築できる点は、アプリケーションの完成度を大きく高めるものである。