Skip to content

xiaozhi-esp32 后端服务: 快速搭建 ESP32 设备控制服务器

Published:

原文链接


SVG Banners

GitHub Contributors Issues GitHub pull requests

小智 ESP-32 后端服务(xiaozhi-esp32-server)

(中文 | English

本项目为开源智能硬件项目 xiaozhi-esp32 提供后端服务。根据 小智通信协议 使用 Python 实现。


适用人群 👥

本项目需要配合 ESP32 硬件设备使用。如果您已经购买了 ESP32 相关硬件,且成功对接过虾哥部署的后端服务,并希望独立搭建自己的 xiaozhi-esp32 后端服务,那么本项目非常适合您。

想看使用效果?请猛戳视频 🎥

小智esp32连接自己的后台模型自定义音色使用粤语交流控制家电开关
自定义音色播放音乐成本最低配置

系统要求与部署前提 🖥️

如果你没有esp32相关的硬件设备,但是非常想体验该项目,可以使用以下的项目让你的电脑、手机模拟成esp32设备。


警告 ⚠️

1、本项目为开源软件,本软件与对接的任何第三方API服务商(包括但不限于语音识别、大模型、语音合成等平台)均不存在商业合作关系,不为其服务质量及资金安全提供任何形式的担保。 建议使用者优先选择持有相关业务牌照的服务商,并仔细阅读其服务协议及隐私政策。本软件不托管任何账户密钥、不参与资金流转、不承担充值资金损失风险。

2、本项目成立时间较短,还未通过网络安全测评,请勿在生产环境中使用。 如果您在公网环境中部署学习本项目,请务必在配置文件 config.yaml 中开启防护:

server:
  auth:
    # 开启防护
    enabled: true  

开启防护后,您需要根据实际情况校验机器的 token 或 mac 地址,详细请参见配置说明。


功能清单 ✨

已实现 ✅

正在开发 🚧

图片

本项目支持的平台/组件列表 📋

LLM 语言模型

类型平台名称使用方式收费模式备注
LLM阿里百炼 (AliLLM)openai 接口调用消耗 token点击申请密钥
LLMDoubaoLLMopenai 接口调用消耗 token点击申请密钥
LLM深度求索 (DeepSeekLLM)openai 接口调用消耗 token点击申请密钥
LLM智谱(ChatGLMLLM)openai 接口调用免费虽然免费,仍需点击申请密钥
LLMOllamaLLMollama 接口调用免费/消耗 token需预先下载模型(ollama pull),服务地址:http://localhost:11434
LLMDifyLLMdify 接口调用免费/消耗 token本地化部署,注意配置提示词需在 Dify 控制台设置
LLMFastgptLLMfastgpt 接口调用免费/消耗 token本地化部署,注意配置提示词需在 Fastgpt 控制台设置
LLMGeminiLLMgemini 接口调用免费点击申请密钥
LLMCozeLLMcoze 接口调用消耗 token需提供 bot_id、user_id 及个人令牌
LLMHome Assistanthomeassistant语音助手接口调用免费需提供home assistant令牌

实际上,任何支持 openai 接口调用的 LLM 均可接入使用。


TTS 语音合成

类型平台名称使用方式收费模式备注
TTSEdgeTTS接口调用免费默认 TTS,基于微软语音合成技术
TTS火山引擎豆包 TTS (DoubaoTTS)接口调用消耗 token点击创建密钥;建议使用付费版本以获得更高并发
TTSAliyunTTS接口调用消耗 token点击创建密钥
TTSCosyVoiceSiliconflow接口调用消耗 token需申请硅基流动 API 密钥;输出格式为 wav
TTSTTS302AI接口调用消耗 token点击创建密钥
TTSCozeCnTTS接口调用消耗 token需提供 Coze API key;输出格式为 wav
TTSACGNTTS接口调用消耗 token联系网站管理员购买密钥
TTSOpenAITTS接口调用消耗 token境外使用,境外购买
TTSFishSpeech接口调用免费/自定义本地启动 TTS 服务;启动方法见配置文件内说明
TTSGPT_SOVITS_V2接口调用免费/自定义本地启动 TTS 服务,适用于个性化语音合成场景
TTSGPT_SOVITS_V3接口调用免费/自定义本地启动 TTS 服务,适用于个性化语音合成场景
TTSMinimaxTTS接口调用免费/自定义本地启动 TTS 服务,适用于个性化语音合成场景

VAD 语音活动检测

类型平台名称使用方式收费模式备注
VADSileroVAD本地使用免费

ASR 语音识别

类型平台名称使用方式收费模式备注
ASRFunASR本地使用免费
ASRDoubaoASR接口调用收费

Memory 记忆存储

类型平台名称使用方式收费模式备注
Memorymem0ai接口调用100次/月额度
Memorymem_local_short本地总结免费

Intent 意图识别

类型平台名称使用方式收费模式备注
Intentintent_llm接口调用根据LLM收费通过大模型识别意图,通用性强
Intentfunction_call接口调用根据LLM收费通过大模型函数调用完成意图,速度快,效果好

使用方式 🚀

一、部署文档

本项目支持以下三种部署方式,您可根据实际需求选择。

本项目的文档主要是文字版本的教程,如果你想要视频版本 的教程,您可以学习一下这个大佬的手把手教程

如果你能把文字版本的教程视频版本的教程结合起来一起看,可以让你更快上手。

  1. Docker 快速部署

适合快速体验的普通用户,不需过多环境配置。缺点是,拉取镜像有点慢。

  1. 借助 Docker 环境运行部署

适用于已安装 Docker 且希望对代码进行自定义修改的软件工程师。

  1. 本地源码运行

适合熟悉Conda 环境或希望从零搭建运行环境的用户。

对于对响应速度要求较高的场景,推荐使用本地源码运行方式以降低额外开销。

二、固件编译

点这里查看固件编译的详细过程。

烧录成功且联网成功后,通过唤醒词唤醒小智,留意server端输出的控制台信息。


常见问题 ❓

1、为什么我说的话,小智识别出来很多韩文、日文、英文?🇰🇷

建议:检查一下models/SenseVoiceSmall是否已经有model.pt 文件,如果没有就要下载,查看这里下载语音识别模型文件

2、为什么会出现“TTS 任务出错 文件不存在”?📁

建议:检查一下是否正确使用conda 安装了libopusffmpeg库。

如果没有安装,就安装

conda install conda-forge::libopus
conda install conda-forge::ffmpeg

3、TTS 经常失败,经常超时 ⏰

建议:如果 EdgeTTS 经常失败,请先检查是否使用了代理(梯子)。如果使用了,请尝试关闭代理后再试;
如果用的是火山引擎的豆包 TTS,经常失败时建议使用付费版本,因为测试版本仅支持 2 个并发。

4、如何提高小智对话响应速度? ⚡

本项目默认配置为低成本方案,建议初学者先使用默认免费模型,解决“跑得动”的问题,再优化“跑得快”。
如需提升响应速度,可尝试更换各组件。以下为各组件的响应速度测试数据(仅供参考,不构成承诺):

影响因素因素值
测试地点广东省广州市海珠区
测试时间2025年2月19日 12:52
宽带运营商中国联通

测试方法:

1、把各组件的密钥配置上去,只有配置了密钥的组件才参与测试。

2、配置完密钥后,执行以下方法

# 进入项目根目录,执行以下命令:
conda activate xiaozhi-esp32-server
python performance_tester.py 

生成报告如下

LLM 性能排行:

模块名称平均首Token时间平均总响应时间
AliLLM0.547s1.485s
ChatGLMLLM0.677s3.057s

TTS 性能排行:

模块名称平均合成时间
EdgeTTS1.019s
DoubaoTTS0.503s
CosyVoiceSiliconflow3.732s

推荐配置组合 (综合响应速度):

组合方案综合得分LLM首TokenTTS合成
AliLLM + DoubaoTTS0.5390.547s0.503s
AliLLM + EdgeTTS0.6420.547s1.019s
ChatGLMLLM + DoubaoTTS0.6420.677s0.503s
ChatGLMLLM + EdgeTTS0.7450.677s1.019s
AliLLM + CosyVoiceSiliconflow1.1840.547s3.732s

结论 🔍

2025年2月19日,如果我的电脑在广东省广州市海珠区,且使用的是中国联通网络,我会优先使用:

5、我说话很慢,停顿时小智老是抢话 🗣️

建议:在配置文件中找到如下部分,将 min_silence_duration_ms 的值调大(例如改为 1000):

VAD:
  SileroVAD:
    threshold: 0.5
    model_dir: models/snakers4_silero-vad
    min_silence_duration_ms: 700  # 如果说话停顿较长,可将此值调大

6、我想通过小智控制电灯、空调、远程开关机等操作 💡

建议:在配置文件中将 LLM 设置为 HomeAssistant,通过 调用HomeAssistant接口实现相关控制。

7、更多问题,可联系我们反馈 💬

我们的联系方式放在百度网盘中,点击前往,提取码是223y

网盘里有“硬件烧录QQ群”、“开源服务端交流群”、“产品建议联系人” 三张图片,请根据需要选择加入。


鸣谢 🙏

Star History Chart


Previous Post
NeatChat:精简优化版NextChat - GitHub项目
Next Post
用 ESP32 打造你的 AI 聊天机器人小智