小智AI服务器端深度解析:多LLM接入、声纹识别与完整功能矩阵
服务器仓库:xiaozhi-esp32-server 10.1k Stars
本文是小智AI专栏的第二篇,聚焦服务器端架构:从 ASR 语音识别管道到大模型接入,从声纹识别到知识库检索增强生成,完整拆解服务端的 10 大功能模块。
服务器整体架构
code
xiaozhi-esp32-server
│
├── 智控台 (Vue.js) — Web管理界面 · 多用户 · 设备管理
├── HTTP API
├── WebSocket 语音流
├── MQTT Gateway 设备指令下发
├── MCP 接入点 工具扩展
│
├── 核心管道 (Pipeline)
│ VAD → ASR → LLM → TTS → Opus编码
│ ├── 意图识别 (Intent)
│ ├── 函数调用 (FunctionCall)
│ └── 知识库 (RAGFlow)
│
└── 辅助系统
├── 声纹识别 (3D-Speaker)
├── 记忆系统 (PowerMem / mem0ai)
└── MCP 服务 (tools/call)
1. ASR 语音识别
| 方案 | 部署 | 延迟 | 成本 |
|---|---|---|---|
| FunASR | Docker本地 | ~200ms | 免费 |
| XunfeiStreamASR | API流式 | ~100ms | 付费 |
| SherpaASR | 本地编译 | ~300ms | 免费 |
| OpenAI ASR | API | ~200ms | 付费 |
FunASR 本地部署(阿里达摩院):
python
from funasr import AutoModel
model = AutoModel(
model="iic/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch",
vad_model="iic/speech_fsmn_vad_zh-cn-16k-common-pytorch",
punc_model="iic/punc_ct-transformer_zh-cn-common-vocab272727-pytorch",
)
res = model.generate(input=audio_chunk, chunk_size=60)
资源要求:2核4G(最小),4核8G(推荐)。Docker 一键部署。
2. LLM 大语言模型
| 平台 | 接口 | 免费额度 | 推荐模型 |
|---|---|---|---|
| 阿里百炼 | OpenAI兼容 | 100万token/月 | qwen-flash |
| DeepSeek | OpenAI兼容 | 价格极低 | deepseek-chat |
| 智谱GLM | OpenAI兼容 | 免费 | glm-4-flash |
| Gemini | OpenAI兼容 | 部分免费 | gemini-2.0-flash |
| Ollama | 本地 | 免费 | qwen2.5:7b |
| Coze | 接口 | 免费 | 任意模型 |
核心设计:只要支持 OpenAI 接口格式就能接入。
python
class LLMProvider:
def __init__(self, config):
self.client = OpenAI(
api_key=config.api_key,
base_url=config.base_url # 切换平台只需改 URL
)
def chat(self, messages, tools=None):
return self.client.chat.completions.create(
model=config.model, messages=messages, tools=tools
)
3. TTS 语音合成
| 方案 | 延迟 | 费用 | 特点 |
|---|---|---|---|
| EdgeTTS | ~500ms | 免费 | 40+语言 |
| 火山流式TTS | ~100ms | 付费 | 首包最快 |
| FishSpeech | ~1s | 免费 | 本地开源 |
| GPT-SOVITS | ~2s | 免费 | 声音克隆 |
| CosyVoice | ~1s | 免费 | 阿里开源 |
| 灵犀流式TTS | ~200ms | 免费 | 流式接口 |
自 v0.5.2 起全面支持流式 TTS,首包 ~100ms 即开始播放,相比早期版本响应速度提升约 2.5 秒。
4. 声纹识别 (3D-Speaker)
阿里达摩院出品,与 ASR 并行处理不阻塞:
python
embedding = speaker_model.extract_embedding(audio)
database.add("user_1", embedding)
current_embedding = speaker_model.extract_embedding(live_audio)
identity = database.verify(current_embedding) # "user_1" / "unknown"
识别结果传给 LLM 实现个性化回应——"欢迎回来,用户A" vs "你好,访客"。
5. 意图识别与函数调用
| 模式 | 原理 | 适用 |
|---|---|---|
| function_call | LLM原生函数调用 | 主流,速度快 |
| intent_llm | 外挂意图识别LLM | 复杂意图 |
| nointent | 跳过意图识别 | 纯对话 |
LLM 自主决定调用哪个工具,结果注入上下文继续对话:
code
用户: "把客厅灯打开"
→ LLM判断: 需要调用 control_light(room="客厅", action="on")
→ MCP → ESP32设备执行 → "客厅灯已打开"
→ LLM: "好的,客厅灯已经为您打开了"
6. 记忆系统
| 类型 | 存储 | 适用 |
|---|---|---|
| mem_local_short | 本地短期 | 单次会话 |
| mem0ai | 云端向量库 | 长期记忆 |
| PowerMem | OceanBase向量 | 智能检索 |
7. RAGFlow 知识库
code
用户提问 → LLM判断是否查知识库 → RAGFlow切片+向量检索+重排序 → 注入上下文 → 回答
8. MCP 双向协议
python
# MCP Client → 调用ESP32设备
await mcp_client.call_tool("self.light.set_rgb", {"r":255,"g":0,"b":0})
# MCP Server → 暴露云端能力
@mcp_server.tool("search_web")
async def search(query: str) -> str:
return await web_search(query)
9. 部署方案
方案A:最简安装
code
Docker单容器 (.env配置)
├─ 功能:智能对话 + 单智能体
├─ 资源:2核2G (全API) / 2核4G (含FunASR)
└─ 适合:个人家庭
方案B:全模块安装
code
Docker Compose多容器
├─ Server (Python) + MySQL + Redis
├─ FunASR (可选) + MQTT Broker
└─ Vue Web智控台
├─ 功能:多用户 + 智控台 + 设备管理
└─ 资源:2核4G (全API) / 4核8G (含FunASR)
完整组件清单
code
[ASR] FunASR / SherpaASR / 讯飞流式 / 火山 / 腾讯云 / 阿里云 / 百度云 / OpenAI
[LLM] Qwen / DeepSeek / GLM / Gemini / 火山豆包 / 讯飞 / Ollama / Dify / Coze
[VLLM] 阿里百炼Vision / ChatGLM VLLM
[TTS] EdgeTTS / 火山流式 / 讯飞 / 腾讯云 / CosyVoice / FishSpeech / GPT-SOVITS / Index-TTS / 灵犀
[VAD] SileroVAD
[Voiceprint] 3D-Speaker
[Memory] PowerMem / mem0ai / mem_local_short
[Intent] function_call / intent_llm
[RAG] RAGFlow
[MCP] 设备工具调用 + 服务端能力暴露
[MQTT] ESP32指令下发
[Web] 智控台 (Vue.js)
[OTA] 固件升级
总结
- 全模块插件化:ASR/LLM/TTS/Memory 每个环节独立可替换
- OpenAI接口标准:任何兼容格式的API都能接入
- 本地+云端混合:FunASR/3D-Speaker/SherpaASR 本地运行
- 流式全链路:ASR流式 → LLM流式 → TTS流式
- MCP双端协议:服务端既调用设备又暴露能力
- 生产级部署:Docker Compose + Vue智控台 + OTA
评论 (0)