AI 小智代码架构分析
一、 项目概述
XiaoZhi ESP32 使 ESP32 微控制器能够充当语音控制的 AI 助手。该系统通过麦克风捕捉音频输入,在本地处理或将其发送到服务器进行语音识别,与大型语言模型通信以生成响应,并通过扬声器播放音频响应。它还通过显示器提供视觉反馈,并支持通过语音命令控制物联网设备。
二、系统架构
XiaoZhi ESP32 系统采用模块化架构,中央应用控制器负责协调各个子系统。该架构使系统能够与不同的硬件配置协同工作,同时保持一致的功能。
1. 整体架构
该系统围绕类构建Application,该类充当中央控制器,管理设备的整体状态并协调不同组件之间的工作。该类Board提供硬件抽象,允许应用程序通过一致的接口与不同的硬件配置进行交互。
2.主要模块
XiaoZhi ESP32 系统由几个协同工作的关键组件组成:
- 应用程序控制器:管理设备状态并协调所有其他组件
- board抽象:提供独立于硬件的物理组件访问
- 通信协议:通过 WebSocket 或 MQTT 处理客户端-服务器通信
- 显示系统:管理所连接显示器上的视觉反馈
- 音频处理:处理音频输入/输出和处理
- OTA更新系统:管理固件更新
- 物联网集成:实现物联网设备的语音控制
2.1 状态管理
该系统通过类中实现的定义明确的状态机进行操作Application。该状态机控制设备响应用户交互和系统事件的行为。
状态机定义设备如何在不同操作模式之间转换:
状态 | 描述 |
---|---|
kDeviceStateStarting | 始启动状态,系统初始化 |
kDeviceStateActivating | 检查更新和设备激活 |
kDeviceStateUpgrading | 执行固件更新 |
kDeviceStateIdle | 等待用户交互 |
kDeviceStateConnecting | 建立服务器连接 |
kDeviceStateListening | 捕获和处理用户音频 |
kDeviceStateSpeaking | 播放AI响应 |
kDeviceStateWifiConfiguring | 配置 WiFi 设置 |
2.2 board 抽象
XiaoZhi ESP32 平台旨在通过开发板抽象层与各种基于 ESP32 的硬件配置兼容。这种抽象层允许核心应用程序逻辑保持不变,同时支持不同的硬件组件和配置。
该Board抽象类定义了访问硬件组件的接口。具体的开发板实现继承自WifiBoard(适用于 WiFi 连接的设备)或Ml307Board(适用于使用 ML307 4G 模块的设备)。
2.3 通信系统
XiaoZhi ESP32 使用 WebSocket 或 MQTT 协议与 AI 服务器通信。通信系统负责处理设备与服务器之间音频数据、文本和控制命令的交换。
通信系统负责:
- 建立并维护与 AI 服务器的连接
- 编码并发送从用户捕获的音频数据
- 接收并解码来自服务器的音频响应
- 处理用于控制和状态更新的 JSON 消息
- 管理 IoT 设备控制命令
2.4 IOT模块
XiaoZhi ESP32 包含一个通过语音命令控制物联网设备的系统。物联网集成由ThingManager类管理,该类提供了用于注册、发现和控制各种设备类型的统一接口。
物联网系统的工作原理如下:
- ThingManager物联网设备在初始化期间注册
- 对话开始时,设备描述会发送到 AI 服务器
- 用户通过语音命令发出控制设备的请求
- AI服务器解释这些命令并发送控制消息
- 接收ThingManager这些命令并将其转发到适当的设备
2.5 音频处理管道
音频处理是 XiaoZhi ESP32 系统的关键组件,负责处理来自麦克风的输入和到扬声器的输出。
输入处理:
- 通过麦克风捕捉音频AudioCodec
- 重新采样至所需采样率(通常为 16kHz)
- 唤醒词检测,实现免提激活
- 语音活动检测,用于确定用户何时说话
- Opus 编码,高效传输至服务器
输出处理:
6. 从服务器接收编码音频
7. Opus解码恢复PCM音频
8. 重新采样到音频编解码器的输出采样率
9. 通过扬声器播放音频
2.6 配置和构建系统
XiaoZhi ESP32 项目采用灵活的配置系统,支持不同的硬件配置和功能集。构建系统基于 ESP-IDF 和 CMake。