AI 会议托管工具
Rust 实现快照
当前版本已落地 Cargo Workspace 三层结构与可运行桌面端, 包含 WebSocket 握手、音频双向流、AEC3 实时回声消除、MCP tools 桥接与本地配置持久化。
20ms 分帧
Opus 上下行链路已跑通
AEC3 可观测
stream delay / ERL / ERLE
MCP 桥接
stdio / sse / stream
系统架构
代码实现映射架构
以 host-core / host-platform / host-app-gpui 为主干,串联音频主链路与 MCP 工具链路。
数据流转时序
连接握手
发送 hello(含 notify/mcp features),等待 session_id
采集上行
cpal 回调采集输入设备,10ms AEC 处理后聚合为 20ms 音频帧
编码发送
20ms PCM16 mono 编码为 Opus,通过 WebSocket Binary 连续上送
平台处理
平台执行 ASR/LLM/TTS,同时下发 stt/tts/notify/mcp 文本事件
下行播放
客户端解码 Opus 包并播放到选定输出设备,可镜像到系统扬声器
MCP 回包
处理 initialize/tools/list/tools/call 并按路由返回 JSON-RPC 响应
运行时关键参数(当前默认)
协议兼容
灵矽增强协议 + xiaozhi 兼容
当前软件默认对接灵矽 WebSocket 协议族,兼容 xiaozhi-server 开源协议, 并支持通过环境变量覆盖目标地址。
默认接入灵矽协议族
桌面端默认连接灵矽平台协议服务,主链路包含 hello/listen/二进制音频帧。
默认 WS: wss://xrobo-io.qiniuapi.com/v1/ws/
在 xiaozhi 协议上增强
保持核心消息结构一致,并扩展 features.mcp、intent_trace 等能力字段与事件语义。
增强能力: MCP + 可观测事件
兼容 xiaozhi-server
与 xiaozhi-server 开源版本兼容,可直接复用 hello/listen/音频帧主链路进行联调。
兼容范围: 握手 + 音频双向流
快速获取在线智能体接入信息
前往灵矽平台创建或选择在线智能体,获取可用于本软件的接入信息(如 WS 地址与鉴权参数)。
核心功能
与当前 Rust 代码一致的能力清单
覆盖连接、音频、AEC、MCP、配置与可观测性,反映当前可运行版本的真实落地状态。
实时音频采集
基于 cpal 采集输入设备,支持将输出设备作为 loopback 输入源,覆盖会议下行回采场景。
握手与网络探测
实现 hello 超时校验、session_id 确认与 ping/pong RTT 采样,连接状态可在 UI 持续观测。
Opus 双向音频链路
上行 20ms 帧 Opus 编码发送,下行 Opus 包实时解码播放到所选输出设备。
消息可视化
聊天面板实时展示 STT/LLM/TTS/MCP/intent_trace 事件,并统计响应延迟。
AEC3 回声消除
支持运行时开关、共享路由强制开启与实时指标输出(stream delay/ERL/ERLE)。
听写模式控制
支持 manual/auto/realtime 三种 listen mode,可在连接态动态下发到网关线程。
MCP 工具桥接
支持 stdio/sse/stream 三类上游,完成 initialize/tools/list/tools/call 闭环。
配置持久化与脱敏
WS 参数、UI 偏好、MCP 列表本地保存;token/authorization 等敏感字段展示自动脱敏。
UI 设计原则
为实时音频场景而设计
界面设计以信息密度与实时性为核心诉求,GPUI 原生渲染确保视觉一致性和极致响应速度。
GPU 优先渲染
GPUI 将所有 UI 元素直接提交至 GPU,绕过传统 CPU 光栅化路径。文本、阴影、动画均在 Shader 中计算,确保 60fps 流畅交互,即使在高密度信息展示场景下也无卡顿。
最小化视觉噪声
音频网关工具需长时间后台运行,UI 采用低对比度深色主题,减少视觉干扰。关键状态指标(连接状态、音频电平、延迟数值)以高亮色突出,非核心信息保持克制。
实时反馈优先
音频电平、WebSocket 状态、RTT、AEC 指标与 STT/TTS 消息需持续可见。界面通过事件节流保证高频更新下仍可读、可控。
单窗口紧凑布局
桌面工具应尽量减少窗口数量。主界面包含设备选择、消息流、状态面板三大区域,通过 GPUI Flex 布局自适应窗口尺寸,支持拖拽调整区域比例。
键盘与低干扰交互
支持 Enter 发送指令、连接与采集开关快速操作、设置面板集中编辑。避免多层弹窗与过度动画,保证调试过程稳定流畅。
配置与状态同源
WS 参数、AEC 开关、listen mode、MCP servers 在同一设置面板编辑并落盘,确保 UI 展示、运行时行为与持久化配置一致。
跨平台策略
一套核心,多平台适配
当前代码以 cpal + Opus + AEC3 + rmcp 为跨平台公共主干, 平台差异主要集中在设备路由和虚拟音频生态联调。
macOS 平台实现详情
音频采集
CoreAudio (cpal) + loopback 输入选择
音频输出
默认输出或 BlackHole 等虚拟设备
虚拟麦克风
通过输出设备路由到 BlackHole/Loopback
UI 渲染引擎
GPUI Metal 后端渲染
功能兼容矩阵
| 功能模块 | macOS | Windows | Linux |
|---|---|---|---|
| 音频设备枚举/选择 | |||
| Opus 编解码 | |||
| WebSocket 通信 | |||
| AEC3 运行时开关 | |||
| MCP 管理页 + 持久化 | |||
| MCP tools 桥接 | |||
| Loopback 回采 | |||
| 音频镜像监听 | |||
| 虚拟麦克风一键编排 | |||
| 应用签名分发 |
性能优化
实时性与稳定性并重
当前实现重点放在链路稳定、延迟可观测和故障隔离, 所有结论均以已落地代码路径为依据。
GPUI 原生 GPU 渲染
- 桌面端 UI 使用 GPUI 渲染,不依赖 WebView
- 音频高频事件在 UI 侧做节流刷新,降低重绘压力
- 连接状态、RTT、AEC 指标与消息面板可并行更新
Tokio 异步运行时
- 网关运行在独立 worker 线程中,内部持有 Tokio runtime
- 命令通道与事件通道解耦 UI 与网络/音频任务
- WebSocket 文本、二进制、pong 事件分别处理,互不阻塞
固定帧音频管线
- 上行统一 20ms/16kHz/mono 口径,便于链路稳定与调试
- Opus 编码使用固定码率与复杂度,降低抖动
- 下行解码后按输出采样率重建播放缓冲并限长保护
AEC3 动态延迟校准
- 采集与播放回调延迟、播放缓冲延迟持续采样
- 按平滑策略更新 stream delay,减少回声残留与抖动
- 支持运行时开关与共享路由强制开启策略
可降级的容错策略
- 上行帧队列满时触发丢包告警,避免阻塞主循环
- hello 握手、MCP 连接、MCP 调用均有超时边界
- 单个 MCP server 异常时返回可用子集,不中断主链路
运行态可观测
- 状态栏展示会话时长、上下行速率、RTT 与响应延迟
- 设置面板展示 AEC stream delay/ERL/ERLE 等关键指标
- 敏感字段在展示前统一脱敏,提升调试与安全平衡
模块化设计
Cargo Workspace 三层架构
核心逻辑、平台适配、UI 应用三层清晰分离,每层可独立编译测试, 便于未来扩展新平台或替换 UI 框架。
[workspace]
members = [
"crates/host-core", # 协议与模型
"crates/host-platform", # WS 适配层
"apps/host-app-gpui", # GPUI 桌面应用
]
[workspace.dependencies]
tokio = "1.44"
tokio-tungstenite = "0.26"
rustls = "0.23"
cpal = "0.15"
opus = "0.3"
aec3 = "0.1"
gpui = "0.2"
gpui-component = "0.5"
rmcp = "1.1"
serde/serde_json = "1.0"crates/host-core
核心协议与领域模型层,不依赖具体平台和 UI
- `hello` / `listen` / `mcp` 文本协议模型
- JSON-RPC 请求/响应结构定义
- 16kHz/20ms/mono 音频帧常量
- Gateway 状态与基础枚举类型
- 协议序列化测试
crates/host-platform
WebSocket 传输适配层,承载连接与事件流
- URL/header 组装(Authorization/device-id/client-id)
- hello 握手等待与超时控制
- 文本/二进制/pong 事件分发
- listen/mcp/jsonrpc 发送封装
- WS 主链路集成测试
apps/host-app-gpui
桌面应用层,串联 UI、音频运行时与 MCP 网桥
- GPUI 窗口、侧栏、聊天面板、设置面板
- cpal 采集/播放 + Opus 编解码 + AEC3 指标
- MCP server 管理页与本地探测
- MCP JSON-RPC 路由(initialize/tools/list/tools/call)
- 本地 settings.json 持久化与脱敏展示
依赖方向
host-app-gpui 同时依赖 host-platform 与 host-core
产品路线图
从 MVP 到全功能平台
路线图已按当前代码状态刷新:先完成跨平台联调与发布质量,再扩展会议智能能力。
最小可行产品
稳定发布版
能力扩展版