相关链接:
AI语音智能体开发日记(一)如何为“小智”服务器启用并调试 License 功能-CSDN博客
AI语音智能体开发日记(二)解决 Wi-Fi 配网小程序的兼容性问题-CSDN博客
AI语音智能体开发日记(三)解决小程序配网中的蓝牙命名与MAC地址获取问题-CSDN博客
AI语音智能体开发日记(四)在FreeRTOS中构建线程安全的UART2通信模块-CSDN博客
AI语音智能体开发日记(五)为智能设备注入“灵魂”——详解MCP工具的注册与使用-CSDN博客
AI语音智能体开发日记(六)为智能体注入旋律——七牛云音乐服务的接入与避坑指南-CSDN博客
AI语音智能体开发日记(七)搞定功放控制——详解GX8006平台Mute电平配置-CSDN博客
AI语音智能体开发日记(八)LVGL 8.4.0 移植实战——从零构建嵌入式GUI-CSDN博客
AI语音智能体开发日记(九)LVGL 8.4.0 中文字体配置全攻略-CSDN博客
AI语音智能体开发日记(十)LVGL 图标字体实战——从 FontAwesome 到屏幕显示-CSDN博客
AI语音智能体开发日记(十一)为智能设备“声”临其境——详解音频资源自动化生成流程-CSDN博客
AI语音智能体开发日记(十二)GX8006 固件定制指南——从双唤醒词到 UART 音频传输-CSDN博客
AI语音智能体开发日记(十三)一次由寄存器溢出引发的串口波特率“玄学”问题排查-CSDN博客
推荐链接:
AI语音智能体架构解析(一)系统架构全景图-CSDN博客
AI语音智能体架构解析(二)大模型(AI 的大脑)-CSDN博客
AI语音智能体架构解析(三)智控台(指挥中心)-CSDN博客
AI语音智能体架构解析(四)AI 语音终端(执行器官)-CSDN博客
AI语音智能体架构解析(五)小程序/APP(遥控器)-CSDN博客
推荐链接:
AI 应用 图文 解说 (一) -- 百度智能云 实现 语音 聊天-CSDN博客
AI 应用 图文 解说 (二) -- 百度智能云 ASR LIM TTS 语音AI助手程序 -CSDN博客
本文档记录了将小智 ESP32 服务器从默认配置(FunASR / EdgeTTS / ChatGLMLLM)迁移至腾讯云 ASR/TTS 和通义千问 LLM 的完整过程,涵盖配置文件修改、报错排查与解决、服务验证与测试三个阶段。
第一阶段:配置文件修改
本阶段主要涉及将 config.yaml 中的服务模块切换为腾讯云(ASR/TTS)和通义千问(LLM),并填入相应的密钥。
1.关键配置项修改
需要修改 config.yaml 文件(通常位于 ~/server/xiaozhi-esp32-server/main/xiaozhi-server 目录下)。
配置模块 | 修改项 | 目标值/说明 |
ASR | 改为 TencentASR | |
TTS | 改为 TencentTTS | |
LLM | 保持 AliLLM | |
TencentASR | appid / secret_id / key | 填入腾讯云语音识别服务的密钥 |
TencentTTS | appid / secret_id / key | 填入腾讯云语音合成服务的密钥 |
AliLLM | api_key | 填入通义千问的 API Key |
2.快速修改命令(Linux)
以下命令可直接在 Ubuntu 服务器终端运行,用于批量替换配置(注意:需先替换命令中的占位符为真实密钥)。
cd ~/server/xiaozhi-esp32-server/main/xiaozhi-server
# 1. 备份原配置
cp config.yaml config.yaml.bak
# 2. 修改选中的模块
sed -i 's/ASR: FunASR/ASR: TencentASR/' config.yaml
sed -i 's/TTS: EdgeTTS/TTS: TencentTTS/' config.yaml
# 3. 修改腾讯云 ASR 密钥 (请替换为实际值)
sed -i 's/appid: 你的腾讯语音合成服务appid/appid: 你的AppID/' config.yaml
sed -i 's/secret_id: 你的腾讯语音合成服务secret_id/secret_id: 你的SecretID/' config.yaml
sed -i 's/secret_key: 你的腾讯语音合成服务secret_key/secret_key: 你的SecretKey/' config.yaml
# 4. 修改腾讯云 TTS 密钥 (请替换为实际值)
sed -i 's/appid: 你的腾讯云AppId/appid: 你的AppID/' config.yaml
sed -i 's/secret_id: 你的腾讯云SecretID/secret_id: 你的SecretID/' config.yaml
sed -i 's/secret_key: 你的腾讯云SecretKey/secret_key: 你的SecretKey/' config.yaml
# 5. 修改通义千问 API Key
sed -i 's/api_key: 你的deepseek web key/api_key: "sk-你的通义千问API密钥"/' config.yaml
大语言模型设置
第二阶段:报错排查与解决
在修改配置并尝试启动服务时,遇到了报错,经过分析发现是配置文件不同步导致的问题。
1.报错现象
运行 python app.py 后,日志显示以下错误:
[core.providers.llm.openai.openai]-ERROR-配置错误: LLM 的 API key 未设置,当前值为: 你的chat-glm web key
...
初始化组件: llm成功 ChatGLMLLM
注意:日志显示系统仍在尝试初始化 ChatGLMLLM,而不是配置的 AliLLM。
2.原因分析
• 配置未生效:在 Windows 上修改了配置文件,但 Ubuntu 服务器上运行的仍然是旧的配置文件。
• 缓存覆盖:可能存在 data/.config.yaml 文件覆盖了主配置。
3.解决方案
推荐直接在 Ubuntu 服务器上操作:
• 检查当前配置:
grep -A 10 "selected_module:" config.yaml
如果显示的是 ChatGLMLLM,说明配置未更新。
• 强制更新配置:
# 修正 LLM 配置
sed -i 's/LLM: ChatGLMLLM/LLM: AliLLM/' config.yaml
# 再次确认 ASR/TTS 配置
sed -i 's/ASR: FunASR/ASR: TencentASR/' config.yaml
sed -i 's/TTS: EdgeTTS/TTS: TencentTTS/' config.yaml
• 检查覆盖文件:
# 检查是否存在覆盖配置
ls -la data/.config.yaml
# 如果存在且配置不对,建议删除
rm data/.config.yaml
• 重启服务:
python app.py
第三阶段:服务验证与测试
当报错消失,日志显示 初始化组件: asr成功 TencentASR 等信息后,说明服务已正常启动。可通过以下方式测试。
- 测试错误
test_page.html的hello消息(❌ 失败)
json
{
"type": "hello",
"device_id": "...",
"device_name": "...",
"device_mac": "...",
"token": "...",
"features": {"mcp": true}}
缺少了 version、transport 和 audio_params 字段!
查看 helloHandle.py,服务器会根据audio_params设置音频格式,如果缺失可能导致后续音频处理失败。
手动修改文件:websocket.js
找到 sendHelloMessage 方法(约第29-38行),将helloMessage修改为:
const helloMessage = {
type: 'hello',
version: 1,
transport: 'websocket',
device_id: config.deviceId,
device_name: config.deviceName,
device_mac: config.deviceMac,
token: config.token,
features: {
mcp: true
},
audio_params: {
format: 'opus',
sample_rate: 16000,
channels: 1,
frame_duration: 60,
play_buffer_duration: 320
}
};
2.验证
终端里进入test文件夹
python -m http.server 8006
测试页面输入,几点了,大模型会回答当前时间。
服务器后台也会打印对话