这套面板到底在管什么
折腾智能音箱最让人别扭的地方,不是它不会说话。是它一直在线,能改的东西却很少。
回答风格是固定的。想换个人设要翻半天。想接自己的模型和声音,又容易被账号和接口卡住,也可能卡在设备兼容上。
这类面板的思路,是把散在各处的配置收进一个网页。
小米账号是一块。音箱型号是一块。模型接口是一块。语音合成是一块。人设和启动状态各占一块。

严格说,它不是要替代别的 AI工具,而是让一台已经在家里的音箱多出一个入口。

它管的东西比看上去要多。小米账号和音箱设备算一类。对外的模型接口算一类。语音合成算一类。对话关键词和连续对话各算一类。自定义人设算一类。服务启动和状态查看也算一类。

对我来说,这东西更像一层控制面板,而不是一套固件改造。
音箱本身还是小米的设备。文字由外部接口生成。声音可能来自另外一套服务。
所以后面出了问题,我会先把每一层分开判断。是设备不兼容。是账号没登录。是接口失败。还是语音没通。
与其等音箱不出声再一层层猜,不如一开始就把验证点分开。
先说兼容性。这件事定不下来,后面的配置再整齐也没用。
支持连续对话的型号有几种。小爱音箱 Pro 在列。迷你版在列。Play 版(2019)在列。万能遥控版在列。小米音箱一二代在列。小爱智能家庭屏 10 也在列。
有些型号能跑,但不支持连续对话。小爱音箱标准版就是。Play 增强版也是。智能家庭屏 6 与触屏音箱 Pro 8 同样如此。
还有一类根本跑不起来。小米小爱音箱 HD。小爱蓝牙音箱随身版。
一句话,型号差异要先看清。不是所有小爱音箱都能支持连续对话,也不是所有型号都能跑这套方案。
从容器启动到账号配置
演示用的是 Windows 电脑。
先打开命令提示符,敲下这一条命令。
docker run -d –name migpt-server -p 36592:36592 lmk123/migpt-server


这条命令里有几个关键点。容器名是 migpt-server。宿主机端口是 36592。容器端口也是 36592。镜像来自 lmk123/migpt-server。
注意它没有挂载数据卷,也没有写重启策略。这一点后面处理登录凭据时会变得很重要。因为容器里手动写入的文件,和宿主机上的持久化配置不是一回事。
再确认容器有没有真的起来。

状态显示运行中,端口也在,就可以打开本机地址。
面板能正常打开,到这里只说明一件事。容器起来了,网页能开。
真正让音箱能和模型对话,还要继续配账号和设备,接口与语音也躲不开。
装完这套东西我才发现,这类 AI小工具 真正的门槛不在安装那一步。
进入面板以后,先选音箱型号。

示例设备选的是小爱音箱 Pro。
接着要拿到小米账号的编号。打开小米账号的个人信息页。

登录自己的账号,把编号复制下来。

再把编号和密码填进面板。
这一步已经开始涉及账号凭据。如果以后要把面板开放到公网,我会把这件事单独记住。因为这个管理页不是普通展示页,里面放着真正的账号和接口信息。
设备编号不能凭感觉写,要参考米家应用里显示的设备名称。

把这个名字原样填到设备编号里。

空格也要保持一致。宁可多花几分钟核对这个名字,也别等接口和语音都配完了,才发现面板根本没认出目标音箱。
接下来接模型。这次用阿里云百炼的兼容接口做演示。材料里记录的是新用户每个模型有一百万免费词元。

这类额度属于平台当下的活动信息。我按现有环境保留,不把它当成长期固定规则。
进入密钥管理页面。


创建一串密钥。

然后把接口地址和模型名填回面板。

到这里接口层就配完了。
我不会把密钥已经填上,直接等同于音箱已经能对话。后面还有语音和小米登录状态等着验证。
语音合成与登录修复
模型能生成文字以后,还差一步。让音箱用哪一种声音说出来。
进入语音服务区域。

默认引擎用的是小爱本身的音色。这里换成豆包。

切换以后要多填几项参数。第一项是对外地址。当前局域网里的示例是本机地址加端口。

部署环境不同的话,这里要按实际能访问到的地址填。
再取豆包语音的两项凭据。打开火山引擎控制台。

登录以后,在左上角的菜单里搜语音合成。

进去以后创建一个应用。

勾上语音合成这项能力,再确认。

接着进侧边栏的语音合成页面。这里能看到应用编号和访问令牌。

把它们填回面板。

然后点测试语音配置。默认的演示音色叫灿灿。
这两项都属于接口凭据。不建议放进公开截图,也不建议放在公网能随意打开的管理页里。
想换音色的话,还有一份现成的音色列表可以查。

那个页面用来挑音色。真正替换的时候,仍然要用自己账号对应的那两项凭据。
配完以后先别急着改人设。先看日志。
在面板上点一次启动。

回到命令提示符,跟着容器日志往下看。

这里很快撞上了真正的坑。小米的异地登录安全验证。
这也是我不愿意把这套流程写成十分钟无脑部署的原因。容器能启动,面板能打开,密钥能填上,都不代表账号登录一定顺利。
处理思路整理下来是这样。先进容器。再建配置目录。拿到账号的通行令牌。写进配置文件。检查文件在不在。最后退出。
这里涉及的是账号认证凭据,要按敏感信息对待。别发到公开文章里,也别丢进聊天群、截图或者代码仓库。
如果日志还在滚动,先按快捷键把它停下来。然后进入容器。

提示符变成井号,就说明已经在容器内部了。
接着建目录。

目录是 /root/.migptgui/default。配置文件以后就写在这里。
再取通行令牌。打开小米账号主页,按当前流程登录并取出令牌。

这一步不把真实的令牌写进正文。真正使用的时候,只用自己的账号当场取到的那一串,并且妥善保管。
接着写配置文件。

两处令牌位置都先用占位符占住,实际操作时替换成自己的。
这一步特别值得注意。最初的启动命令没有把这个目录映射到宿主机。
所以以后如果删掉容器再重建,不要默认认为手写的配置文件还在。至少要重新确认这个文件存不存在。
检查一下文件建好了没有。

列表里出现配置文件那一行,就说明写入成功了。
确认完就退出容器。登录修复的步骤到这里走完。
因为前面的账号问题,容器已经停了。重新启动它。

回到面板,再点一次启动。
继续看日志。

这次日志显示服务已经正常运行。
对话、人设与公网入口
先测一次单次对话。当前调用模型的关键词配了几组。

对着音箱说一句,问它叫什么名字。

结果是模型成功响应,声音用的就是前面配好的那个音色。
这一层终于把链路跑通了。音箱到面板,面板到模型,模型到语音,最后回到音箱。
配好以后,能进 AI对话 的就不只是手机和电脑了。
支持连续对话的型号,还可以再测一层。

连续对话的测试用了两句话。前面问一句,接一句为什么答案不一样。

两个问题都成功调用了模型。
但是否支持连续对话,要回到前面的兼容表判断。小爱音箱 Pro 跑通了,不代表所有型号都一样。
对话稳定以后,再改人设。
面板顶部能看到当前的人设。

点自定义,再点写入默认模板。

页面会立刻插进一段默认模板。当前的示例把它改成了猫娘。

人设文本本身可以自由替换。如果是一家人一起用,我会优先把角色设定写得简单清楚,不让提示词过度复杂。
覆盖模板以后重新点启动。

再问一次同样的问题。

测试结果显示自定义人设已经生效。
这一层验证的是提示词到回答风格的链路。它不是改了小爱音箱的底层固件。
那为什么还要给面板配公网访问。
本机页面能做的事不少。换人设。改接口。调声音。看运行状态。
但人在外面的时候,本机地址就访问不到了。
这里加入一个内网穿透工具。

它在这套方案里只负责一件事。把面板的网页提供到公网。
它不负责模型推理,也不负责语音合成,更不参与小米账号登录。
先把它装上。

下载以后解压安装。
再打开命令提示符,看一眼版本号。

能看到版本信息,就可以继续注册和登录。

注册一个账号。

注册完成以后,打开本机的管理页面。

用刚注册的账号登录进去。

后面的公网隧道都在这个页面里配置。
先用随机地址验证一遍。
说明里写的随机地址大约每 24 小时变化一次。这个周期属于现有材料的描述,我按当前环境保留,不把它当成任何套餐的固定规则。
后台默认能看到两条隧道。一条走远程桌面协议。一条走网页协议。

编辑网页那条隧道,把它改成面板对应的信息。

目标服务端口填 36592。隧道名用 migpt。
更新以后回到在线隧道列表,能看到两条地址。

每个用户生成的公网地址都不同。用其中带加密的那一条测试。

面板能正常打开。这一层验证的是本机端口到公网地址的链路。
与其一上来就买固定域名,不如先用随机地址把链路验证一遍。
随机地址适合先验证。如果以后要经常从外面进来,再考虑固定子域名。
进入预留页面。

在保留二级子域名里配置固定地址。示例记录的地区按账号所在区域选,二级域名用 migpt。
二级域名具有唯一性,最终以自己账号实际保留成功的名称为准。
再回到隧道管理,找到刚才那条隧道。

把它点开编辑。

域名类型改成二级子域名,再填上保留成功的那个名字。
更新以后回到在线隧道列表,地址已经变成固定形式。

最后用加密地址再测一次。

页面能正常访问。
公网开放这件事,真正要小心的其实是管理凭据。
这个页面里配了账号编号,账号密码,接口密钥,语音凭据,设备信息,还有人设和模型配置。
所以我不会把它当成一个普通公开网页。
公网能打开只是网络层成功。长期使用更值得确认的是几件事。谁能打开这个页面。页面本身有没有登录保护。凭据会不会在页面里露出来。固定地址是不是只分享给需要的人。
穿透工具负责的是入口。它不会自动替应用加一层权限控制。
这次真正跑通的主线是一条链。本机容器到面板。面板到音箱。音箱到模型接口。模型到语音合成。中间还插了一段登录修复。最后靠内网穿透从外面进得来。
几个细节要留着。设备兼容有差异,能不能连续对话要按兼容表判断。启动命令没有挂载目录,手动写进容器的配置文件在容器重建后要重新确认。账号密码和通行令牌都要当敏感信息,接口密钥与语音凭据也一样。
还有一点容易忽略。把面板放到公网以后,要盯的不是能不能打开,而是谁能打开。
