コンテンツにスキップ

アーキテクチャ - Kagura v4.0

Universal AI Memory Platform - システム設計

このドキュメントは、Phase C完了後のKagura v4.0のアーキテクチャを説明します。


🏗️ 高レベル概要

┌─────────────────────────────────────────────────────────────────┐
│                  AIプラットフォーム(MCPクライアント)              │
│      Claude Desktop • ChatGPT • Gemini • Cursor • Cline         │
└──────┬────────────────────────────────────────────────┬─────────┘
       │ stdio(ローカル)              HTTP/SSE(リモート)│
       │                                                   │
┌──────▼─────────────┐                    ┌──────────────▼────────┐
│  MCPサーバー       │                    │  MCP over HTTP/SSE    │
│  (ローカル)      │                    │  (/mcpエンドポイント)│
│                    │                    │                       │
│  全31ツール ✅     │                    │  24安全ツールのみ     │
│  ファイル操作 ✅   │                    │  ファイル操作 ❌      │
│  シェル実行 ✅     │                    │  シェル実行 ❌        │
└──────┬─────────────┘                    └──────────────┬────────┘
       │                                                   │
       │              内部Python API                       │
       └───────────────────────┬───────────────────────────┘
          ┌────────────────────▼─────────────────────┐
          │         メモリーマネージャー             │
          │   (src/kagura/core/memory/manager.py)    │
          │                                          │
          │  ┌──────────┬───────────┬─────────────┐ │
          │  │ Working  │ Context   │ Persistent  │ │
          │  │ Memory   │ Memory    │ Memory      │ │
          │  │(In-Mem)  │(Messages) │(SQLite)     │ │
          │  └──────────┴───────────┴─────────────┘ │
          │                                          │
          │  ┌────────────────────────────────────┐ │
          │  │  RAG (ChromaDB)                    │ │
          │  │  • Working RAG                     │ │
          │  │  • Persistent RAG                  │ │
          │  │  • セマンティック検索              │ │
          │  └────────────────────────────────────┘ │
          │                                          │
          │  ┌────────────────────────────────────┐ │
          │  │  グラフメモリー (NetworkX)         │ │
          │  │  • 関係性                          │ │
          │  │  • インタラクション履歴            │ │
          │  │  • ユーザーパターン                │ │
          │  └────────────────────────────────────┘ │
          └────────────────┬─────────────────────────┘
                  ┌────────▼────────┐
                  │    ストレージ   │
                  │  • SQLite       │
                  │  • ChromaDB     │
                  │  • Pickleファイル│
                  └─────────────────┘

🆕 Phase Cアーキテクチャ(リモートMCPサーバー)

リモートアクセスフロー

ChatGPT                         あなたのサーバー
┌─────────┐                     ┌──────────────┐
│ ChatGPT │  HTTPS/SSE          │    Caddy     │
│Connector├────────────────────►│ (Port 443)   │
└─────────┘                     └──────┬───────┘
                               ┌───────▼───────┐
                               │  Kagura API   │
                               │  (Port 8000)  │
                               │               │
                               │  /mcp         │◄─ HTTP/SSE
                               │  /api/v1/*    │◄─ REST
                               └───────┬───────┘
                              ┌────────▼────────┐
                              │メモリーマネージャー│
                              │  + グラフ       │
                              └────────┬────────┘
                              ┌────────▼────────┐
                              │ PostgreSQL      │
                              │ + pgvector      │
                              └─────────────────┘

セキュリティレイヤー

1. APIキー認証
   ├─ SHA256ハッシュストレージ
   ├─ オプショナルな有効期限
   └─ 監査証跡(last_used_at)

2. ツールアクセス制御
   ├─ ローカルコンテキスト: 全31ツール ✅
   ├─ リモートコンテキスト: 24安全ツールのみ
   └─ 危険なツールをフィルタリング:
      • file_read, file_write
      • shell_exec
      • media_open_*

3. ネットワークセキュリティ
   ├─ Caddyリバースプロキシ
   ├─ 自動HTTPS(Let's Encrypt)
   ├─ CORS設定
   └─ セキュリティヘッダー(HSTS、XSS)

📦 コンポーネント詳細

1. MCPサーバー (src/kagura/mcp/)

stdioトランスポート(ローカル): - ファイル: src/kagura/cli/mcp.py - コマンド: kagura mcp serve - コンテキスト: local(全ツール利用可能) - クライアント: Claude Desktop、Cursor、Cline

HTTP/SSEトランスポート(リモート): - ファイル: src/kagura/api/routes/mcp_transport.py - エンドポイント: /mcp - コンテキスト: remote(安全なツールのみ) - クライアント: ChatGPTコネクタ、ウェブブラウザ

ツールパーミッション: - ファイル: src/kagura/mcp/permissions.py - ロジック: is_tool_allowed(tool_name, context) - デフォルト: 未知のツールを拒否(フェイルセーフ)


2. メモリーマネージャー (src/kagura/core/memory/)

コンポーネント: - manager.py - メインコーディネーター - working.py - インメモリー一時ストレージ - persistent.py - SQLiteベースの長期ストレージ - rag.py - ChromaDBベクトル検索 - export.py - JSONLエクスポート/インポート

ストレージスコープ: - Working: セッションのみ、使用後にクリア - Persistent: 再起動後も存続、SQLiteストレージ - 両方: セマンティック検索のためRAGにインデックス


3. グラフメモリー (src/kagura/core/graph/)

実装: NetworkXベース

ノードタイプ: - user - ユーザープロファイル - topic - ディスカッショントピック - memory - メモリー参照 - interaction - AI-ユーザーインタラクション

エッジタイプ: - related_to - 関連メモリー - depends_on - 依存関係 - learned_from - 学習関係 - works_on - ユーザーアクティビティ

ストレージ: Pickleファイル (~/.local/share/kagura/graph.pkl)


4. REST API (src/kagura/api/)

フレームワーク: FastAPI

エンドポイント: - /api/v1/memory - メモリーCRUD - /api/v1/recall - セマンティック検索 - /api/v1/search - 全文検索 - /api/v1/graph/* - グラフ操作 - /api/v1/health - ヘルスチェック - /api/v1/metrics - システムメトリクス - /mcp - MCP over HTTP/SSE ⭐ 新機能

認証: - ファイル: src/kagura/api/auth.py - メソッド: Bearerトークン(APIキー) - ストレージ: SQLite (~/.local/share/kagura/api_keys.db) - ハッシング: SHA256


🔄 データフロー

メモリー保存フロー

1. MCPクライアント(Claude/ChatGPT)
   └─► MCPツール呼び出し: memory_store(...)

2. MCPサーバー(stdioまたはHTTP/SSE)
   └─► tool_registryにルーティング

3. 組み込みツール (src/kagura/mcp/builtin/memory.py)
   └─► MemoryManager.store()を呼び出し

4. メモリーマネージャー
   ├─► Workingメモリー(scope="working"の場合)
   ├─► Persistentメモリー(scope="persistent"の場合)
   └─► RAGインデックス(両方のスコープ)

5. ストレージ
   ├─► SQLite(persistent)
   ├─► ChromaDB(ベクトル)
   └─► インメモリーdict(working)

メモリー呼び出しフロー

1. MCPツール呼び出し: memory_recall(query="Python tips", k=5)

2. メモリーマネージャー
   └─► RAGをクエリ(ベクトル類似度)

3. RAG検索
   ├─► クエリを埋め込み(text-embedding-3-small)
   ├─► ChromaDBコレクションを検索
   └─► トップk結果を返す

4. クライアントに返す
   └─► スコア付きでフォーマットされた結果

🔐 セキュリティアーキテクチャ

認証フロー

1. クライアントリクエスト
   └─► Authorization: Bearer kagura_abc123...

2. APIゲートウェイ(/mcpまたは/api/v1/*)
   └─► Bearerトークンを抽出

3. APIキーマネージャー (src/kagura/api/auth.py)
   ├─► 提供されたキーをハッシュ(SHA256)
   ├─► api_keys.dbをクエリ
   ├─► 有効期限と無効化をチェック
   └─► user_idを抽出

4. リクエスト処理
   └─► メモリー操作に認証されたuser_idを使用

ツールフィルタリング(リモートコンテキスト)

1. create_mcp_server(context="remote")

2. handle_list_tools()
   ├─► 登録された全ツールを取得(合計31)
   ├─► TOOL_PERMISSIONSでフィルタリング
   └─► 安全なツールのみを返す(24)

3. クライアントが見るもの:
   ✅ memory_*ツール
   ✅ web_*ツール
   ❌ file_*ツール(ブロック)
   ❌ shell_exec(ブロック)

💾 データモデル

メモリーレコード

{
    "key": str,                  # 一意の識別子
    "value": Any,                # 保存データ(JSONシリアライズ可能)
    "user_id": str,              # オーナー(v4.0+)
    "agent_name": str,           # エージェントスコープ
    "scope": "working|persistent",
    "tags": List[str],           # カテゴリー化
    "importance": float,         # 0.0-1.0
    "created_at": datetime,
    "updated_at": datetime,
    "metadata": Dict[str, Any]   # 追加メタデータ
}

グラフノード

{
    "id": str,                   # ノード識別子
    "type": str,                 # ノードタイプ(user、topic、memory、interaction)
    "data": Dict[str, Any],      # ノード属性
}

グラフエッジ

{
    "src": str,                  # ソースノードID
    "dst": str,                  # デスティネーションノードID
    "type": str,                 # 関係タイプ
    "weight": float,             # 0.0-1.0
}

📊 デプロイメントアーキテクチャ

ローカル開発

開発者マシン
├── SQLite (~/.local/share/kagura/memory.db)
├── ChromaDB (~/.local/share/kagura/chromadb/)
├── グラフpickle (~/.local/share/kagura/graph.pkl)
└── APIキー (~/.local/share/kagura/api_keys.db)

本番デプロイメント

Dockerスタック (docker-compose.prod.yml)

┌─────────────────────────────────────────┐
│            Caddy (Port 443)             │
│     自動HTTPS、リバースプロキシ        │
└──────────────────┬──────────────────────┘
┌──────────────────▼──────────────────────┐
│       Kagura API (Port 8000)            │
│    FastAPI + MCP over HTTP/SSE          │
└──────┬──────────────────────┬───────────┘
       │                      │
┌──────▼──────────┐   ┌──────▼──────────┐
│   PostgreSQL    │   │     Redis       │
│   + pgvector    │   │   (キャッシング)│
└─────────────────┘   └─────────────────┘

ボリューム:
├── postgres_data  - データベース永続化
├── redis_data     - Redis永続化
├── kagura_data    - メモリーエクスポートなど
└── caddy_data     - SSL証明書

🔄 エクスポート/インポートシステム

エクスポート形式(JSONL)

backup/
├── memories.jsonl      # 全メモリーレコード
├── graph.jsonl         # グラフノード & エッジ
└── metadata.json       # エクスポートメタデータ

レコード例:

{"type":"memory","scope":"persistent","key":"python_tips","value":"Use type hints","user_id":"jfk","agent_name":"global","tags":["python"],"importance":0.8,"exported_at":"2025-10-27T10:00:00Z"}


📐 設計原則

1. MCP-First

すべての機能をまずMCPツール経由で公開し、その後REST API。

2. 最初からマルチユーザー

すべての操作はuser_idでスコープ(Phase Cの基盤)。

3. デフォルトでセキュア

リモートアクセスは安全性のために自動的にフィルタリング。

4. データポータビリティ

人間が読めるJSONL形式での完全なエクスポート/インポート。

5. フェイルセーフ

リモートコンテキストでは未知のツールをデフォルトで拒否。


🔗 関連ドキュメント


最終更新: 2025-10-27 バージョン: 4.0.0 フェーズ: C完了