封面

小智AI(开源 ESP32-S3 AI 语音助手)默认唤醒词是「你好小智」。想换成自己的词,很多人第一反应是去乐鑫云训练模型、或者找官方支持——其实仓库里就有一条 MultiNet 路线,本地改一个 JSON 就能落地。这篇文章用一块 ESP32-S3-DevKitC-1 把「小麦小麦」完整跑通:新增配置文件、构建、烧录、验证、代价实测、4 条避坑,全程不碰上游源码。适合想把小智AI唤醒词改成自己品牌词/家庭昵称的玩家,和做 AI 语音相关毕设的嵌入式开发者。


配图

一、为什么默认唤醒词不好换:先搞清楚 WakeNet 和 MultiNet

小智AI 出厂默认用「你好小智」唤醒,背后是乐鑫的 WakeNet 预训练模型(wn9_nihaoxiaozhi_tts)。WakeNet 是"固定词表"路线——官方训了哪些词,你只能用哪些词,想换词就得走乐鑫的训练链路,对普通玩家来说门槛很高。

而仓库里其实还挂了一条 MultiNet 路线:这是一个本地可用的多命令识别模型(中文 MultiNet7 量化版 mn7_cn),支持自定义唤醒词/命令词,不用上云训练,模型已经打进构建产物里,本地配置就能启用。

两条路线的本质区别:

维度WakeNet(默认)MultiNet(自定义路线)
词表固定(官方预训练)自定义(可配任意中文词)
训练需要乐鑫云/官方链路不需要,本地配置即可
换词方式改词表重训改 JSON 配置
生效模型wn9_nihaoxiaozhi_ttsmn7_cn(MultiNet7 量化版)

二、准备工作:环境清单(和上次 MCP 实战完全一致)

本文实测硬件与软件版本如下,和 05/06 系列文章同一套环境:

项型号/版本
开发板ESP32-S3-DevKitC-1 N16R8(16MB Flash + 8MB Octal PSRAM)
屏幕SSD1306 128x32 OLED
麦克风INMP441 单麦(NoAudioCodecSimplex)
SDKESP-IDF v6.1
固件工程xiaozhi-esp32 v2.5.1,commit 0d576d3
板型变体bread-compact-wifi

唯一要新增的东西:一个配置文件。全程 git status 只有 1 个 untracked 文件,上游文件零修改。

三、实操:新增一个 JSON,把唤醒词改成「小麦小麦」

第 1 步:新建配置文件

在板型目录下新建 main/boards/bread-compact-wifi/config.custom-wake.json,内容只有 5 行配置追加:

{
  "sdkconfig_append": [
    "CONFIG_USE_CUSTOM_WAKE_WORD=y",
    "CONFIG_SR_MN_CN_MULTINET7_QUANT=y",
    "CONFIG_CUSTOM_WAKE_WORD=\"xiao mai xiao mai\"",
    "CONFIG_CUSTOM_WAKE_WORD_DISPLAY=\"小麦小麦\"",
    "CONFIG_CUSTOM_WAKE_WORD_THRESHOLD=20"
  ]
}

四行配置各管什么:

配置项作用取值说明
CONFIG_USE_CUSTOM_WAKE_WORD启用自定义唤醒词y
CONFIG_SR_MN_CN_MULTINET7_QUANT启用中文 MultiNet7 量化模型y
CONFIG_CUSTOM_WAKE_WORD唤醒词拼音"xiao mai xiao mai"(空格分隔)
CONFIG_CUSTOM_WAKE_WORD_DISPLAY屏幕显示的中文串"小麦小麦"
CONFIG_CUSTOM_WAKE_WORD_THRESHOLD唤醒门限20(设备端是 0.2,见避坑 4)

第 2 步:构建

python scripts/build.py bread-compact-wifi -c config.custom-wake.json

构建产物里能看到 MultiNet 模型被打进 assets 分区(MODEL_LOADER: Successfully load srmodels),不需要单独刷 srmodels.bin。

第 3 步:烧录

python -m esptool --chip esp32s3 -p COM15 -b 460800 --before default-reset --after hard-reset write-flash @build/flash_args

烧录后串口抓日志(cap_boot.py COM15 45),看三段关键证据。

四、验证:怎么确认设备真的在用「小麦小麦」唤醒

日志是唯一的真相来源,下面每条都对应真实日志行号:

#日志关键行证明了什么
1AfeAudioEngine: Model 0: fst / Model 1: mn7_cn生效模型确实是 MultiNet7 量化版
2CustomWakeWord: Command: xiao mai xiao mai, Text: 小麦小麦, Action: wake中文显示串在设备端解析正确,动作注册为 wake(等价原唤醒词)
3set det threshold to 0.200000 / 1 active speech commands门限生效(20÷100=0.2),命令表只有 1 条
4Custom wake word detected: prob=0.270145 → Wake word detected: 小麦小麦喊「小麦小麦」命中并进入唤醒流程
5>> 小麦小麦 → << 哎,我在呢! / << 有什么事吗?对话闭环成立,服务端 ASR 听写一致,唤醒音频包正常上行

一个值得注意的细节:实测命中概率 prob=0.27,距门限 0.2 只有 0.07 的余量——说明自定义词的灵敏度余量不大,口音、距离、环境噪声都会影响,这正是下一阶段要量化测试的点。

另外日志里 wakenet model not found 是警告不是错误——它表示 WakeNet 已经下线,配套现象是「你好小智」不再响应(本次实测为附带确认项,专项复测排期跟进)。

五、代价实测:换唤醒词到底多占资源

这部分是本文最值钱的地方。官方文档只说"自定义词很占资源",到底占多少?实测如下(基线 = 「你好小智」WakeNet9):

指标你好小智(基线)小麦小麦(MultiNet7)差异
generated_assets.bin561,011 B2,951,622 B+2.39 MB(5.3×)
assets 分区占用8MB 分区,占用极低map 2944 KB / 8192 KB仍有余量,但 4MB Flash 板不可行
xiaozhi.bin2,577,152 B2,577,232 B+80 B,可忽略
minimal sram(内部 RAM 最低水位)50,268 B33,468 B−16,800 B(−33%)
free sram 稳态155,647 B154,567 B−1,080 B

两个关键结论:

  1. Flash 是主要代价:模型包体积涨了 5.3 倍(+2.39 MB)。16MB Flash 板没问题,4MB Flash 的板子基本不可行,选板型前先看 Flash 容量。
  2. 内部 RAM 裕度是硬约束:minimal sram 从 50KB 掉到 33KB(−33%)。后续再叠加功能(更多 MCP 工具、更长命令表、屏幕/视觉),这条必须重新评估——这是比官方含糊说明具体得多的实测数据。

六、4 条避坑(都是这次踩过的真实坑)

  1. 首开机 assert,别慌:烧录后第一次开机可能看到 assert failed: esp_netif_create_default_wifi_sta ... duplicate key 然后自动重启。这是"先起配网 AP、立刻切 station"的竞态路径问题,与唤醒词改动无关——同一固件第二遍开机直接连上 WiFi 跑完全流程。判断方法:看第二次开机是否正常。
  2. Git Bash 里跑环境脚本会失败:继承的 MSYSTEM 变量会让 ESP-IDF 检查报 MSys/Mingw is not supported。解法:进 PowerShell 后先 Remove-Item Env:MSYSTEM,Env:MINGW_PREFIX,Env:MSYSCON,再前置 idf6.1_py3.13_env\Scripts 到 PATH。
  3. 构建失败会被管道吞掉:... | tail -60 会把退出码变成 0,看着成功其实没成。改成日志重定向 + 末尾 Write-Host "BUILD_EXIT=$LASTEXITCODE"。
  4. 门限单位是"除以 100":CONFIG_CUSTOM_WAKE_WORD_THRESHOLD=20 会被构建脚本除以 100 → 设备端实际是 0.2(日志 set det threshold to 0.200000)。数值越小越灵敏,调灵敏度前先想清楚这个换算。

七、写在最后

这条 MultiNet 路线的价值在于:自定义唤醒词不需要上乐鑫云训练,本地一个 JSON 就能落地。代价也清楚:Flash 涨 5.3×、内部 RAM 裕度 −33%,选板型时先看 Flash 容量,后续加功能先看内存水位。

下一步我准备做三件事:冷启动连续 10 次唤醒成功率统计、说话/放音乐时打断测试、以及门限 8/20 两档的"灵敏 vs 误触"对比量化——做完会继续更新。

你改唤醒词是想用品牌词、家人昵称,还是纯好奇?你踩过哪个坑?评论区聊聊。

系列回顾:05 环境搭建与烧录实操(ESP-IDF v6.1)|06 小智AI二次开发(MCP控制GPIO)|07 蓝牙音箱底噪破音排查|08 从CC2530到Zephyr(两个时代的蓝牙开发工作流)

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐