Newer
Older
TelosDB / journals / 20260208-Review_and_Stabilization.md
@楽曲作りまくりおじさん 楽曲作りまくりおじさん 9 hours ago 4 KB refactor(journals): mask absolute paths and update environment docs

20260208 開発レビュー: 機能強化と安定化

概要

本日 (2026-02-08) は、MCP サーバーとしての機能強化(長文対応、ツール拡充)と、配布に向けたインストーラーおよびサイドカー起動の安定化を集中的に行った。また、クライアントからの接続安定性を確保するための SSE 通信の改善と、サーバー状態の可視化を行った。


1. 長文データの埋め込み対応 (Long Text Chunking)

案件: 2048トークンを超える長文データの埋め込み対応

実施内容

  • llama-server および埋め込みモデルのコンテキスト制限を超える長文を扱うため、バックエンド (llama.rs) にチャンキングと平均プーリング (Mean Pooling) を実装。
  • Axum設定: DefaultBodyLimit::disable() を追加し、巨大なリクエストを許容。
  • 処理ロジック:
    1. 4000文字を超える文章を分割。
    2. 各チャンクに対して埋め込みを取得。
    3. 各ベクトルの平均を計算し、最終的な文書ベクトルとする。

検証

  • 5250文字〜21000文字のテキストで動作確認済み。

2. MCP ツールの改善とスキーマ変更

案件: MCPツールの充実とテーブル構造の変更

変更点

  • スキーマ: items テーブルの path カラムを document_name に変更 (意味を明確化)。
  • ベクトル次元: Gemma 3 300M に合わせ、384次元から 768次元 に変更。
  • 新規ツール: delete_item, get_vector, get_document, list_documents 等を追加し、CRUD を完全サポート。
  • SSE 対応: .copilot/config.jsonstdio 形式から url (http://localhost:3000/sse) 形式に変更し、複数クライアントからの同時接続を可能にした。

3. インストーラーとサイドカー起動の安定化

案件: MSI インストーラー環境でのクラッシュ修正とパス解決

問題と対応の履歴

配布用 MSI パッケージにおける、サイドカー (llama-server) の起動失敗や DLL 読み込みエラーに対し、以下の対策を実施した。

  1. パス解決の厳密化: Tauri の app_handle.shell().sidecar() API を使用し、正規の方法でバイナリを呼び出すように修正。手動でのパス結合ロジックを廃止。

  2. DLL 検索パスの修正 (Searching Logic): Windows は実行ファイル (llama-server.exe) と同じディレクトリにある DLL を最優先で読み込むため、Resources ディレクトリ内に DLL を配置し、サイドカー起動時のカレントディレクトリ (current_dir) を Resources に設定することで解決。 念のため PATH 環境変数にも Resources を追加。

  3. リソース配置: tauri.conf.json の設定を見直し、models ディレクトリや mcp.json が正しくインストーラーに含まれ、かつプログラムから参照できるように修正 (resource_dir() の再帰的探索)。


4. サーバー状態の可視化と接続安定化

案件: MCP クライアントからの接続安定化と UI 改善

実施内容 (可視化)

  • SSE Keep-Alive: 15秒間隔の Keep-Alive を実装し、アイドルタイムアウトを防止。
  • ブロードキャスト: クライアントへの通知を tokio::sync::broadcast で非同期に行うようにし、レスポンス待ちでのデッドロックを回避。
  • UI 機能:
    • Health Check: llama-server の稼働状態をポーリングし、ヘッダーにステータスを表示。
    • 統計情報: 接続クライアント数、登録ドキュメント数をリアルタイム表示。

成果

  • 長文ドキュメントのベクトル化が可能になった。
  • MSI インストーラーでインストールした環境でも、サイドカー (Local LLM) が正常に起動し、MCP サーバーとして機能するようになった。
  • ユーザーは Web UI を通じて、サーバーの稼働状況や接続数を一目で確認できるようになった。