news 2026/10/21 2:28:49

小智AI自定义唤醒词:把「你好小智」改成任意中文词(MultiNet7本地实测)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
小智AI自定义唤醒词:把「你好小智」改成任意中文词(MultiNet7本地实测)

小智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,commit0d576d3
板型变体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-cconfig.custom-wake.json

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

第 3 步:烧录

python-mesptool--chipesp32s3-pCOM15-b460800--beforedefault-reset--afterhard-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(两个时代的蓝牙开发工作流)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 2:28:22

CF1870B Friendly Arrays

题目链接&#xff1a; Problem - 1870B - Codeforces 最佳思路&#xff1a; #include <iostream> #include <vector> using namespace std; int main() {int t;cin >> t;while (t--) {int n, m;cin >> n >> m;vector<int> a(n);unsigned…

作者头像 李华
网站建设 2026/10/21 2:27:47

空中机器人竞赛备赛利器:从仿真平台到真机迁移的完整指南

你们的队伍正在备战大学生机器人竞赛的空中机器人赛项&#xff1f;那大概率已经在真机上经历过几次“心碎时刻”&#xff1a;新调好的四旋翼第二次试飞就炸机&#xff0c;桨叶碎片弹到天花板上&#xff0c;剩下半架飞机只能躺在维修桌上。某高校的A同学跟我讲过&#xff0c;他们…

作者头像 李华
网站建设 2026/10/21 2:26:43

AGENTS.md 实战指南:如何让 AI 编程助手真正遵循项目规范

AGENTS.md 实战指南&#xff1a;如何让 AI 编程助手真正遵循项目规范 在使用 Cursor、Codex、Claude Code 等 AI 编程工具时&#xff0c;经常会遇到一个问题&#xff1a; AI 能写出功能正确的代码&#xff0c;却不一定能写出符合项目规范的代码。 例如&#xff0c;你的项目明明…

作者头像 李华
网站建设 2026/10/21 2:25:50

PHP安全漏洞修复指南:防SQL注入与XSS

一、为什么 PHP 项目总被盯上做 PHP 开发这些年&#xff0c;我见过太多项目上线后被黑的情况。说句实话&#xff0c;大部分漏洞并不是什么高深的技术&#xff0c;翻来覆去就是 SQL 注入和 XSS 这两类。很多新手写代码的时候图省事&#xff0c;直接把用户输入拼进 SQL 语句&…

作者头像 李华
网站建设 2026/10/21 2:25:50

Wi-Fi MAC Layer: Scanning, Authentication, Association, and Data Transmission Processes

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/21 2:25:25

小白连载漫剧怕人物变脸,知漫剧角色档案稳定形象

漫剧连载账号想要留住粉丝&#xff0c;人物辨识度十分关键&#xff0c;但很多新手连载时经常遇到角色五官漂移。知漫剧&#xff08;zz.jiaxunai.cn&#xff09;自带角色档案功能&#xff0c;一次录入人物特征长期调用&#xff0c;多集连载、不同镜头下形象稳定&#xff0c;不用…

作者头像 李华