架构概览
Project N.E.K.O. 采用多进程微服务架构构建,三个主要服务器通过 WebSocket、HTTP 和 ZeroMQ 消息进行协作。
系统架构图
三服务器设计
| 服务器 | 端口 | 入口文件 | 职责 |
|---|---|---|---|
| 主服务器 | 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 连接。记忆服务器和智能体服务器是内部服务,由主服务器与之通信。
通信模式
┌──────────────────────────────────────────┐
│ 主服务器 (:48911) │
│ │
│ FastAPI ─── REST 路由 │
│ WebSocket ─── LLMSessionManager │
│ ZeroMQ PUB ───┐ │
│ ZeroMQ PULL ──┼── AgentEventBridge │
│ HTTP Client ──┤ │
└────────────────┼─────────────────────────┘
│
┌────────┼────────┐
│ │ │
▼ ▼ ▼
记忆 智能体 监控
服务器 服务器 服务器
(:48912) (:48915) (:48913)- 主服务器 <-> 记忆服务器:通过 HTTP 请求存储/查询记忆
- 主服务器 <-> 智能体服务器:通过 ZeroMQ 发布/订阅进行任务委派和结果流式传输
- 主服务器 <-> 监控服务器:通过 WebSocket 进行实时状态更新
关键架构模式
会话热切换
LLMSessionManager 在当前会话仍然活跃时,于后台预先准备新的 LLM 会话。当用户结束一个对话轮次时,系统无缝切换到预热好的会话,实现零停机。音频在过渡期间被缓存,之后再行发送。
按角色隔离
每个角色(通过 lanlan_name 标识)拥有独立的:
LLMSessionManager实例- 同步连接器线程
- WebSocket 锁
- 消息队列
- 关闭事件
异步/同步边界
FastAPI 处理器是异步的。TTS 合成在专用线程中运行,通过队列通信。音频处理使用执行器线程池。ZeroMQ 事件桥运行后台接收线程。
