☰
Open-XiaoAI:刷机接管小爱音箱 Pro,构建「Client + Server」AI 语音助手全链路实战
2026/10/14 16:15:39 网站建设 项目流程
  • 人工智能
  • 大模型
  • AI 应用
  • AI Agent
  • 语音
  • 智能硬件
  • 固件

【免费下载链接】open-xiaoai

🔊 让小爱音箱「听见你的声音」,解锁无限可能。

项目地址:https://gitcode.com/gh_mirrors/op/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),以二进制帧传输
EventClient → Server设备事件上报:唤醒词命中、语音识别结果、播放状态等
RequestServer → ClientRPC 指令:执行脚本、开始录音/播放、系统升级等
ResponseClient → 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生成影子密码后写入。

你可以选择两种方式获得固件:

  1. 直接下载Releases 页预打包固件(OH2P v1.58.6、LX06 v1.94.13 两个版本,每个包含xxx_patched.squashfs打补丁版和xxx.squashfs原版回滚版);
  2. 自行构建:修改.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.squashfs

macOS 用户可用仓库内置的 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 reboot

boot.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地址:4399

README 还说明了架构取舍:音箱内存/算力/存储有限,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 的约束,使用前须知:

  1. 本项目为开源非营利项目,仅限学术研究或个人测试,严禁用于商业服务、网络攻击等违法违规场景;
  2. 项目由第三方独立开发,与小米集团无隶属/合作关系,相关商标、固件、云服务权利归属小米集团;
  3. 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

🔊 让小爱音箱「听见你的声音」,解锁无限可能。

项目地址:https://gitcode.com/gh_mirrors/op/open-xiaoai
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询