アーキテクチャ概要
Project N.E.K.O. は、3つの主要サーバーがWebSocket、HTTP、ZeroMQメッセージングを通じて連携するマルチプロセスマイクロサービスシステムとして構築されています。
システム図
3サーバー構成
| サーバー | ポート | エントリーポイント | 役割 |
|---|---|---|---|
| メインサーバー | 48911 | main_server.py | Web UI、REST API、WebSocketチャット、TTS |
| メモリサーバー | 48912 | memory_server.py | セマンティック検索、時間インデックス付き履歴、メモリ圧縮 |
| エージェントサーバー | 48915 | agent_server.py | バックグラウンドタスク実行(MCP、Computer Use、Browser Use) |
メインサーバーはユーザー向けのエントリーポイントです。Web UIの提供、すべてのREST APIリクエストの処理、リアルタイム音声/テキストチャットのためのWebSocket接続の維持を行います。メモリサーバーとエージェントサーバーは、メインサーバーが通信する内部サービスです。
通信パターン
┌──────────────────────────────────────────┐
│ Main Server (:48911) │
│ │
│ FastAPI ─── REST Routers │
│ WebSocket ─── LLMSessionManager │
│ ZeroMQ PUB ───┐ │
│ ZeroMQ PULL ──┼── AgentEventBridge │
│ HTTP Client ──┤ │
└────────────────┼─────────────────────────┘
│
┌────────┼────────┐
│ │ │
▼ ▼ ▼
Memory Agent Monitor
Server Server Server
(:48912) (:48915) (:48913)- Main ↔ Memory: メモリの保存/クエリ用HTTPリクエスト
- Main ↔ Agent: タスク委任と結果ストリーミング用ZeroMQ pub/sub
- Main ↔ Monitor: リアルタイムステータス更新用WebSocket
主要なアーキテクチャパターン
ホットスワップセッション
LLMSessionManager は、現在のセッションがまだアクティブな間に、バックグラウンドで新しいLLMセッションを準備します。ユーザーが会話ターンを終了すると、ダウンタイムゼロで事前にウォームアップされたセッションにシームレスに切り替わります。移行中の音声はキャッシュされ、その後フラッシュされます。
キャラクターごとの分離
各キャラクター(lanlan_name で識別)は、それぞれ独自の以下を持ちます:
LLMSessionManagerインスタンス- 同期コネクタースレッド
- WebSocketロック
- メッセージキュー
- シャットダウンイベント
非同期/同期の境界
FastAPIハンドラーは非同期です。TTS合成はキューベースの通信を使用する専用スレッドで実行されます。音声処理はエグゼキュータースレッドプールを使用します。ZeroMQイベントブリッジはバックグラウンド受信スレッドを実行します。
