Py-Xiaozhi 项目架构
基于 Python 实现的小智语音客户端,采用模块化设计,支持多种通信协议和设备集成
核心架构
核心架构图:展示了应用核心、插件管理器、MCP服务器、通信协议层、音频编解码、音频处理、IoT设备管理等模块的关系及数据流向
模块详情
src/application.py
- 应用主类,单例模式管理全局状态
- 异步事件驱动架构,基于asyncio
- 设备状态机(IDLE/LISTENING/SPEAKING)
- 统一任务池管理和生命周期控制
- 插件化架构,通过PluginManager协调各模块
src/plugins/
- 插件管理器,按优先级排序注册插件
- 统一生命周期管理(setup/start/stop/shutdown)
- 事件广播机制(协议连接、JSON消息、音频数据)
- 插件隔离,错误不传播
- 包含Audio、MCP、IoT、UI、WakeWord等核心插件
src/mcp/
- 基于MCP协议的工具服务器
- 丰富的工具生态(系统、日历、音乐、地图、八字等)
- Property/Method抽象,支持异步调用
- 类型安全的参数验证和默认值处理
- 工具分类管理(camera/calendar/timer/music等)
src/protocols/
- 抽象Protocol基类,定义统一接口
- WebSocket和MQTT双协议实现
- WSS/TLS加密传输,自动重连机制
- 支持文本/音频/IoT/MCP消息类型
- 连接状态管理和错误回调
src/audio_codecs/
- Opus编解码器(16kHz编码/24kHz解码)
- WebRTC AEC回声消除处理器
- SoXR实时音频重采样(支持任意采样率)
- 智能声道转换(下混/上混)
- 设备原生格式自适应
- 低延迟流式缓冲(5ms处理)
- 观察者模式解耦音频监听器
src/audio_processing/
- 基于Sherpa-ONNX的唤醒词检测
- 支持多唤醒词和拼音匹配
- VAD语音活动检测
- 实时音频流处理
- 异步事件通知机制
src/views/
- PyQt5 GUI界面(设置窗口/激活窗口)
- 系统托盘和全局快捷键支持
- 音频设备/摄像头/唤醒词配置界面
- 异步UI更新和线程安全
- 基础窗口组件和混入类
src/iot/
- Thing基类定义设备抽象
- Property/Method异步属性和方法
- ThingManager统一设备管理
- 状态增量更新和并发获取
- 支持灯光/音量/定时器等设备类型
src/utils/
- ConfigManager分层配置管理
- 点记法访问配置(如AUDIO_DEVICES.input_device_id)
- 设备指纹生成和激活管理
- 统一日志系统和资源查找
- 音量控制和跨平台工具函数
src/core/
- OTA在线更新模块
- 系统初始化器
- 版本检查和升级管理
技术栈
Python
3.9-3.12
AsyncIO
异步编程框架
PyQt5
GUI框架
qasync
Qt异步集成
Sherpa-ONNX
语音识别引擎
WebRTC AEC
WebRTC音频处理模块
OpusLib
音频编解码
SoXR
高质量重采样
SoundDevice
音频设备管理
WebSockets
实时通信协议
MQTT
IoT消息传输
MCP Protocol
模型上下文协议
Cryptography
加密安全库
Thing抽象
IoT设备抽象
JSON-RPC
远程过程调用
架构特点
单例模式
应用核心采用线程安全的单例模式,保证全局唯一实例和状态一致性
异步架构
全面采用asyncio异步编程,支持高并发处理和实时音频流
资源管理
中央化资源管理器,智能依赖跟踪和优雅清理机制
状态机模式
设备状态管理采用状态机模式,清晰的状态转换和错误恢复
插件化生态
MCP工具和IoT设备采用插件化设计,支持热插拔和动态扩展
跨平台兼容
支持Windows、macOS、Linux多平台,智能特性检测和优雅降级