Newer
Older
TelosDB / document / overview.md
@楽曲作りまくりおじさん 楽曲作りまくりおじさん 7 days ago 3 KB chore: move src-tauri to src/backend for better logical structure

システム詳細概要 (Tauri 2 Edition)

📌 はじめに

本ドキュメントでは、SQLite Vector MCP Server の内部構造、各コンポーネントの責務、および最新のアーキテクチャに基づいたデータフローについて詳細に解説します。

🏗️ 主要コンポーネントと役割

Tauri v2 への移植に伴い、システムのコアロジックは高性能かつ型安全な Rust 側に集約されました。

1. Tauri Backend (Rust / src/backend)

モジュール 責務 使用技術
src/backend/src/lib.rs アプリケーションのライフサイクル、Sidecar 起動、システムトレイ制御。 tauri, tokio
src/backend/src/mcp.rs MCP プロトコル(JSON-RPC / SSE)の実装、ツールハンドリング。 axum, serde_json
src/backend/src/db.rs データベース接続管理、スキーマ初期化、トリガー設定。 sqlx, rusqlite
src/backend/src/entities/ データベーステーブルの Rust 構造体マッピング。 sea-orm
src/backend/src/llama.rs llama-server と整合した HTTP 通信、Embedding/Completion 依頼。 reqwest

2. Sidecar (LLM Server)

llama.cpp プロジェクトの llama-server を外部プロセスとして実行します。

  • Embedding: テキストを 384次元(Gemma 3 300M のデフォルト)のベクトルに変換。
  • Completion: 指定されたコンテキストに基づくテキスト生成。

3. Frontend (Webview2)

ユーザーへの状態通知(Sidecar の稼働状況、ログ出力のモニタリングなど)を行う軽量な UI です。

  • Status Hub: バックエンドからのイベントを受信し、GUI に反映。

🔄 詳細なデータフロー

1. 文書の登録 (add_item_text)

sequenceDiagram
    participant User as MCP Client
    participant Axum as MCP Handler (Axum)
    participant Llama as Llama Client
    participant Sidecar as llama-server
    participant SeaORM as SeaORM / DB
    
    User->>Axum: Call Tool: add_item_text(content)
    Axum->>Llama: generate_embedding(content)
    Llama->>Sidecar: POST /embedding
    Sidecar-->>Llama: [f32; 384]
    Llama-->>Axum: Vector Result
    Axum->>SeaORM: Transaction: Insert into items & vec_items
    SeaORM-->>Axum: Success (ID)
    Axum-->>User: JSON Response (ID, Datetime)

2. 日時管理と自動更新

データの一貫性と追跡可能性を確保するため、データベースレベルで以下の処理が行われます。

  • INSERT 時: created_at, updated_atlocaltime が自動付与。
  • UPDATE 時: トリガーにより updated_at が現在の時刻に自動更新。

🛠️ 技術スタックの選定理由

なぜ Electron ではなく Tauri なのか?

  1. ランタイムサイズ: Node.js を内蔵しないため、インストーラーサイズが 1/10 以下に。
  2. メモリ効率: Rust によるメモリ管理により、常駐時のオーバーヘッドを最小化。
  3. 並列処理: tokio ランタイムを活用し、複数の MCP リクエストや Sidecar 管理を非同期で効率的に処理。

なぜ Knex ではなく SeaORM なのか?

  • 型安全: コンパイル時にクエリの整合性を確認可能。
  • 非同期対応: Rust の async/await にネイティブ対応しており、Tauri との相性が抜群。

📈 拡張性と今後の展望

  1. マルチベクトル検索: 異なるモデル(例:画像・テキストのマルチモーダル)への対応。
  2. 全文検索 (FTS5) 統合: ベクトル検索とキーワード検索を組み合わせたハイブリッド検索の実装。
  3. リモート LLM 対応: ローカル Sidecar だけでなく、OpenAI 互換 API へのフォールバック機能。