- 人工智能
- 大模型
- AI 应用
- AI Agent
- 语音
- 智能硬件
- 固件
【免费下载链接】open-xiaoai
🔊 让小爱音箱「听见你的声音」,解锁无限可能。
本文基于 Open-XiaoAI 仓库的 README 展开,系统讲解该项目如何通过刷写补丁固件、运行 Rust Client 端、再配合多种 Server 端演示程序(小智 AI、自定义唤醒词、MiGPT、Gemini Live、立体声组网),让小爱音箱 Pro 从「指令-响应」设备进化为可自由定制的 AI 语音终端。读完本文,你可以完整复现「刷机 → SSH → 部署 Client → 接入大模型对话」的全套流程,并理解项目底层 WebSocket 通信协议的设计。
项目定位:让小爱音箱「听见你的声音」
Open-XiaoAI 的出发点,README 中有一段很直白的表述:2017 年智能音箱爆发后,这些设备被困在「指令-响应」的牢笼里——听得见分贝却听不懂情感,能执行命令却不会主动思考。作者的目标是直接接管小爱音箱的「耳朵」(麦克风)和「嘴巴」(扬声器),通过多模态大模型和 AI Agent 把设备的潜力释放出来。
从源码结构看,整个项目拆成了两类角色:
- Client 端(跑在小爱音箱上):使用 Rust 编写,见 packages/client-rust,只负责转发麦克风音频流、上报设备事件、响应 Server 端指令,不实现具体业务逻辑;
- Server 端(跑在电脑、NAS 或服务器上):Python 或 Node.js 编写,承载唤醒词识别、ASR、大模型对话等业务逻辑,仓库提供了 5 个演示程序,位于
examples/目录。
重要前提:README 顶部明确标注本项目已停止维护,不再提供更新与支持;且仅适用于小爱音箱 Pro(LX06)和Xiaomi 智能音箱 Pro(OH2P)两款机型,其他型号请勿直接使用。
整体架构与通信协议
理解项目前先理解它的数据通路:Client 端与 Server 端通过WebSocket(默认端口4399)建立双向连接,四类消息统一定义在 packages/client-rust/src/services/connect/data.rs 的AppMessage枚举中:
| 消息类型 | 方向 | 作用 |
|---|---|---|
Stream | 双向 | 二进制音频流(带tag标识,如麦克风录音record),以二进制帧传输 |
Event | Client → Server | 设备事件上报:唤醒词命中、语音识别结果、播放状态等 |
Request | Server → Client | RPC 指令:执行脚本、开始录音/播放、系统升级等 |
Response | Client → Server | 对Request的应答,含code/msg/data |
从 message.rs 的MessageManager实现可以看到,同一时刻仅维护一条连接,文本消息按类型分发到MessageHandler的on_text处理,Request请求通过信号量(32 并发)限流后并发执行,二进制帧则解析为Stream交给流处理器。
Server 端如何复用这套协议?以 examples/xiaozhi/src/server.rs 为例:AppServer::run在0.0.0.0:4399上acceptWebSocket 连接后,注册on_event/on_stream回调,把收到的record音频流和事件通过pyo3 binding 转调 Python(PythonManager::call_fn),实现「Rust 负责网络、Python 负责业务」的混合架构。
Client 端的服务模块划分(packages/client-rust/src/services/)也印证了 README 中列的四项职责:
audio/:录音record.rs与播放play.rs,配合config.rs中的音频参数;connect/:WebSocket 通信、RPC 与消息处理;monitor/:监控唤醒词文件(如 kws.rs 轮询/tmp/open-xiaoai/kws.log中时间戳@唤醒词格式的行)、指令与播放状态;speaker/:统一的扬声器/TTS 管理入口。
第一步:刷写补丁固件
完整刷机教程见 docs/flash.md,固件制作说明见 packages/client-patch/README.md。核心流程如下。
准备条件
- 机型:Xiaomi 智能音箱 Pro(OH2P)或 小爱音箱 Pro(LX06);
- 数据线:新款 OH2P 用 Type-C(无需拆机,音箱底部接口直连电脑);旧款 LX06 需拆机后使用主板左上角的 Micro USB 调试口(注意必须是能传输数据线的数据线,而非纯充电线)。
获取补丁固件
补丁固件由 packages/client-patch 工具链构建,制作流程包含四步:提取固件(登录小米账号获取 OTA 链接)、开启固化 SSH(支持自定义密码)、禁用系统自动更新、注入开机启动脚本/data/init.sh。
从 patch.sh 的构建脚本可以看出补丁机制:先解压 squashfs,依次应用patches/下的通用补丁(01-ssh.patch、02-login.patch、03-ota.patch、04-start.patch)和机型专属补丁(如patches/LX06/下的 ALSA 音频补丁),SSH 密码通过{SSH_PASSWORD}占位符替换并用openssl passwd -1生成影子密码后写入。
你可以选择两种方式获得固件:
- 直接下载Releases 页预打包固件(OH2P v1.58.6、LX06 v1.94.13 两个版本,每个包含
xxx_patched.squashfs打补丁版和xxx.squashfs原版回滚版); - 自行构建:修改
.env(MI_USER/MI_PASS/MI_DID/SSH_PASSWORD),然后:
# 方式一:Docker 构建(推荐) cd packages/client-patch docker run -it --rm \ --platform linux/amd64 \ --env-file $(pwd)/.env \ -v $(pwd)/assets:/app/assets \ -v $(pwd)/patches:/app/patches \ idootop/open-xiaoai:latest # 方式二:本地构建(macOS / Linux,需 Python 3.x + Node.js 22.x) cd packages/client-patch npm install npm run build构建产物为assets/下的root-patched.squashfs。
[!CAUTION] 刷机有风险,可能导致失去保修或设备变砖,后果自负。请下载与设备当前版本一致的固件,跨版本刷机可能变砖。
执行刷机(Windows + Amlogic Flash Tool)
Windows 环境将 Amlogic 刷机工具解压重命名为Amlogic_Flash_Tool_v6.0.0,安装 USB 驱动后,在/bin目录的 Git Bash 中依次执行:
# 第 1 步:拔掉电源线重新上电,立即执行,出现固件版本号即连接成功 ./update.exe identify # 第 2 步:设置 uboot 启动等待 15s,指定 boot0 启动并保存环境变量 ./update.exe bulkcmd "setenv bootdelay 15" ./update.exe bulkcmd "setenv boot_part boot0" ./update.exe bulkcmd "saveenv" # 第 3 步:刷入 system0 分区(替换为实际固件路径) ./update.exe partition system0 root_patched.squashfsmacOS 用户可用仓库内置的 flash 工具(依赖brew install libusb-compat):
./flash connect # 连接设备(命令后重新上电) ./flash delay 15 # 设置启动延时 ./flash switch boot0 # 切换启动分区 ./flash system system0 root-patched.squashfs # 刷写固件刷机成功后拔掉电源重新上电即可。由于小爱音箱有system0/system1双系统分区,之后想恢复原厂系统,只需把启动分区改回boot1(SSH 中执行fw_env -s boot_part boot1,或刷机工具执行bulkcmd "setenv boot_part boot1"+saveenv)再重启。
第二步:SSH 连接到小爱音箱
补丁固件默认开启 SSH,默认密码open-xiaoai:
ssh -o HostKeyAlgorithms=+ssh-rsa root@192.168.31.227 # 替换为你的音箱局域网 IP若连接失败,按 docs/flash.md 的排查清单检查:启动分区(boot0)与刷写分区(system0)是否一致(改分区后必须saveenv生效)、电脑与音箱是否同网段、防火墙是否放行 22 端口、自构建固件时01-ssh.patch补丁是否生效。
第三步:部署并运行 Rust Client 端
Client 端的职责在 packages/client-rust/README.md 中概括为:共享通信协议、转发麦克风音频流、转发设备事件、响应 Server 端指令(执行脚本、播放音频、升级等)。
快速部署(免编译)
# 在音箱上创建工作目录,写入 Server 端 WebSocket 地址 mkdir /data/open-xiaoai echo 'ws://192.168.31.227:4399' > /data/open-xiaoai/server.txt # 运行一键部署脚本 curl -sSfL https://gitee.com/idootop/artifacts/releases/download/open-xiaoai-client/init.sh | sh对照仓库内 init.sh 的脚本源码可以看到其完整逻辑:检查/data/open-xiaoai/client不存在则从制品库下载并chmod +x;读取server.txt获取目标地址(缺省为ws://127.0.0.1:4399,即默认不连接任何 Server);先kill掉旧进程再启动client。
需要开机自启动时,把启动脚本下载到/data/init.sh(补丁固件在开机时自动执行该脚本)再重启:
curl -L -o /data/init.sh https://gitee.com/idootop/artifacts/releases/download/open-xiaoai-client/boot.sh rebootboot.sh 相比init.sh多了网络等待逻辑——循环ping baidu.com直到网络可用后才启动 Client,避免开机瞬间网络未就绪导致连接失败。
[!IMPORTANT] 注意:你通常需要先在本机运行某个 Server 端演示程序,才能拿到 Server 地址(默认端口 4399)。不要连接来路不明的 Server,Client 默认具备执行任意脚本的能力。
自行交叉编译(开发者)
git clone https://github.com/idootop/open-xiaoai.git cd packages/client-rust # 需先安装 Rust 与 cross 交叉编译工具 cross build --release --target armv7-unknown-linux-gnueabihf产物位于./target/armv7-unknown-linux-gnueabihf/release/client,可借助dd+ssh直接管道写入音箱:
dd if=target/armv7-unknown-linux-gnueabihf/release/client \ | ssh -o HostKeyAlgorithms=+ssh-rsa root@你的音箱IP "dd of=/data/open-xiaoai/client" chmod +x /data/open-xiaoai/client # 在音箱上执行 /data/open-xiaoai/client ws://你的Server地址:4399README 还说明了架构取舍:音箱内存/算力/存储有限,ASR 等重任务不适合端侧;而 Python / Node.js 生态更适合业务逻辑,因此 Rust 只承担「转发 + 被动响应」,并通过 pyo3 / Node binding 与脚本端双向互调共享网络模块。
第四步:五类 Server 端演示程序
README 快速开始中的 5 个演示覆盖了从「AI 对话」到「音频组网」的不同玩法,以下逐一说明(均要求 Client 端已在音箱上运行)。
1. 小爱音箱接入小智 AI(examples/xiaozhi)
Python 版 Server,支持连续对话与中途打断、中英文自定义唤醒词。核心配置在 config.py:
APP_CONFIG = { "wakeup": { "keywords": ["天猫精灵", "小度小度", "豆包豆包", "你好小智", "你好小爱", "hi siri", "hey siri"], "timeout": 20, # 静音多久后自动退出唤醒(秒) "before_wakeup": before_wakeup, # 唤醒判定回调,返回 True 才唤醒 "after_wakeup": after_wakeup, # 退出唤醒时的提示语 }, "vad": { "threshold": 0.10, # 语音检测阈值(0-1,越小越灵敏) "min_speech_duration": 250, # 最小语音时长(ms) "min_silence_duration": 500, # 最小静默时长(ms),嫌 AI 抢答可调大 }, "xiaozhi": { "OTA_URL": "https://api.tenclass.net/xiaozhi/ota/", "WEBSOCKET_URL": "wss://api.tenclass.net/xiaozhi/v1/", "VERIFICATION_CODE": "", # 首次对话验证码回写在此 "DEVICE_ID": "", # 绑定设备用,异常时清空后重启重试 }, }before_wakeup回调演示了两种唤醒来源的区分处理(见 config.py):kws来源(本地唤醒词)直接播放提示语并唤醒;xiaoai来源(用户喊「小爱同学」下达指令)则先abort_xiaoai()打断原小爱 TTS、等待 2 秒让 TTS 恢复可用,再播放提示语。
# Docker 一键运行 docker run -it --rm -p 4399:4399 -v $(pwd)/config.py:/app/config.py idootop/open-xiaoai-xiaozhi:latest # 或源码运行(依赖 uv、Rust、Opus 动态库) cd examples/xiaozhi uv sync --locked uv run main.py # GUI 模式(不支持唤醒词) CLI=true uv run main.py # CLI 模式(支持自定义唤醒词) uv run main.py --mode xiaozhi # 纯电脑麦克风流式体验,无需音箱模型文件(VAD + KWS)体积较大未入仓库,需在 Releases 的vad-kws-models标签下载后解压到xiaozhi/models。另外该演示建议仅在局域网运行,官方提示音频流约 100 kb/s 流量消耗。
2. 自定义唤醒词(examples/kws)
基于 sherpa-onnx 的端侧唤醒词方案,直接运行在音箱上(无需 Server)。在音箱上:
mkdir -p /data/open-xiaoai/kws # 设置自定义唤醒词(仅支持中文,每行一个,格式为拼音+@唤醒词) cat <<EOF > /data/open-xiaoai/kws/keywords.txt t iān m āo j īng l íng @天猫精灵 x iǎo d ù x iǎo d ù @小度小度 d òu b āo d òu b āo @豆包豆包 n ǐ h ǎo x iǎo zh ì @你好小智 EOF # 设置唤醒提示语(可选,支持文字/音频链接,多条随机播放) cat <<EOF > /data/open-xiaoai/kws/reply.txt 主人你好,请问有什么吩咐? EOF curl -sSfL https://gitee.com/idootop/artifacts/releases/download/open-xiaoai-kws/init.sh | sh自定义唤醒词的正规做法是在电脑上修改 my-keywords.txt,再运行拼音生成脚本:
uv run keywords.py --tokens tokens.txt --output keywords.txt --text my-keywords.txt生成的keywords.txt复制到音箱/data/open-xiaoai/kws/keywords.txt后重启生效。该方案有两个已知限制:端侧仅用约 5 MB 的小型识别模型(约占 20 MB 存储),识别灵敏度有限;旧款 LX06 中 128 MB 内存版本内存不足会启动失败(Killed),建议改用 Server 端 KWS。README 还提示可运行debug.sh调试脚本查看每次识别的拼音结果,据此手动调整唤醒词拼音。
3. 小爱音箱接入 MiGPT 完美版(examples/migpt)
Node.js 版 Server,相比原版 MiGPT 能做到完美打断小爱音箱回复、响应延迟更低。核心配置在 config.ts:
export const kOpenXiaoAIConfig = { openai: { model: "gpt-4.1-mini", baseURL: "https://api.openai.com/v1", apiKey: "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxx", }, prompt: { system: "你是一个智能助手,请根据用户的问题给出回答。", }, async onMessage(engine, { text }) { if (text === "测试") { return { text: "你好,很高兴认识你!" }; // 自定义消息处理钩子 } }, };# Docker 一键运行 docker run -it --rm -p 4399:4399 -v $(pwd)/config.ts:/app/config.ts idootop/open-xiaoai-migpt:latest # 或源码运行(Node.js 22.x + Rust) cd examples/migpt corepack enable && corepack install pnpm install pnpm dev注意:默认 Rust Server 启动时未开启录音/播放能力。若需在 Node 端收发音频,需把 src/server.rs 中被注释的
start_recording/start_play调用加回来再重新编译。
4. 接入 Gemini Live API(examples/gemini)
Python 版演示,支持自动 VAD + 连续对话。需先注册 Google AI Studio 并创建 API Key,然后更新GEMINI_API_KEY环境变量或 gemini/gemini.py 中的密钥:
cd examples/gemini uv sync --locked uv run main.py其内部同样由 Rust 服务端 负责 4399 端口的 WebSocket 通信与 Python 互调。当前限制:不支持中断 AI 的回复,需等回答完毕才能重新输入。
5. 不同型号音箱组立体声(examples/stereo)
纯 Rust 实现的局域网立体声方案,无需 Server 端,两台音箱之间直接通信,支持服务发现自动连接、主从「热拔插」自动切换声道,并内置前向纠错(FEC)与丢包补偿(PLC)。在每台音箱上配置角色与声道:
mkdir -p /data/open-xiaoai || true echo master left > /data/open-xiaoai/stereo.conf # 左音箱作主音源 echo slave right > /data/open-xiaoai/stereo.conf # 右音箱作从设备 curl -sSfL https://gitee.com/idootop/artifacts/releases/download/open-xiaoai-stereo/init.sh | sh已知限制:不同型号音量基准不同需手动调整;不支持多路混音;从设备单向同步主设备音源,建议禁用从设备麦克风防止音频叠加。
安全声明与合规提示
继承 README 与 agreement.md 的约束,使用前须知:
- 本项目为开源非营利项目,仅限学术研究或个人测试,严禁用于商业服务、网络攻击等违法违规场景;
- 项目由第三方独立开发,与小米集团无隶属/合作关系,相关商标、固件、云服务权利归属小米集团;
- Client 默认提供执行任意脚本的能力演示,且演示程序均未处理身份认证、通信加密、多设备管理与音频压缩,不建议部署在公网,务必只连接自己可信的 Server 地址。
相关项目与延伸阅读
如果你不想刷机或机型不符,可以关注同作者生态中无需刷机即可使用的方案:MiGPT(mi-gpt)、MiGPT-Next、xiaogpt、xiaomusic。刷机相关的技术背景可参考仓库README.md中列出的社区刷机博客与 open-lx01、xiaoai-patch 等先行工作。
总结:Open-XiaoAI 的技术路线可以概括为三层——client-patch刷入带 SSH 与开机钩子的补丁固件,client-rust以轻量 WebSocket 协议(Stream/Event/Request/Response)打通端云双向通道,examples/下 5 个演示程序展示该通道之上从端侧 KWS 到云端大模型对话的多种玩法。项目已停止维护,但仓库中的协议实现与固件制作脚本依然是学习「如何把存量智能硬件改造成 AI 终端」的完整样本。
- 人工智能
- 大模型
- AI 应用
- AI Agent
- 语音
- 智能硬件
- 固件
【免费下载链接】open-xiaoai
🔊 让小爱音箱「听见你的声音」,解锁无限可能。
相关推荐
如何将小爱音箱改造成AI语音助手:从入门到精通的完整指南
如何将小爱音箱改造成AI语音助手:从入门到精通的完整指南 MiGPT是一款能够将小爱音箱接入ChatGPT和豆包的开源项目,通过简单的配置就能让普通音箱升级为智
人工智能AI 应用语音智能家居交互助手终极指南:如何将小爱音箱改造成智能AI语音助手(ChatGPT/豆包接入实战)
终极指南:如何将小爱音箱改造成智能AI语音助手(ChatGPT/豆包接入实战) 想要让家里的小爱音箱秒变AI语音助手吗?通过MiGPT项目,你可以轻松将普通的小
人工智能AI 应用语音智能家居交互助手Open-XiaoAI终极指南:让你的小爱音箱真正"听懂"你的声音
Open XiaoAI终极指南:让你的小爱音箱真正"听懂"你的声音 在智能家居快速发展的今天,小爱音箱作为家庭交互中心的重要性不言而喻。然而,传统的小爱音箱往往
人工智能大模型AI 应用AI Agent语音智能硬件固件
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考