AI 能力與分工:裝置端做什麼,服務端做什麼
小智韌體是語音互動的入口,不是大模型的執行環境:裝置負責喚醒、音訊處理、編解碼、顯示和工具執行;語音識別(ASR)、大模型對話(LLM)和語音合成(TTS)由服務端完成。本頁按韌體 v2.5.2 的原始碼和上游文件,整理這條分工線、各環節的開關在哪裡,以及幾個常見誤解。
一次對話的流程
flowchart LR
A[喚醒詞或按鍵] --> B[裝置:音訊採集與處理]
B --> C[Opus 編碼上行]
C --> D[服務端:ASR、LLM、TTS<br>或 Realtime 端到端模型]
D --> E[Opus 下行]
E --> F[裝置:解碼並播放]
D -. stt / llm / tts 訊息 .-> G[裝置:顯示文字與表情]
D -. MCP 呼叫 .-> H[裝置:執行工具]
- 上行:裝置把麥克風的單聲道 16 kHz 音訊編碼為 Opus(幀時長 60 ms)發給服務端;
- 下行:服務端下發 Opus 音訊,協議文件示例中的下行取樣率為 24000 Hz;
- JSON 訊息:
stt攜帶識別文字,llm攜帶表情(emotion),tts標記語音合成的開始、每句文字和結束,欄位見 WebSocket 協議; - 對話方案:既支援傳統的流式 ASR + LLM + TTS,也支援 Realtime 端到端語音模型,兩者都由服務端實現。
裝置端負責的環節
| 環節 | 裝置端做什麼 | 條件與開關 |
|---|---|---|
| 喚醒詞 | 基於 ESP-SR 離線檢測:WakeNet,自訂喚醒詞用 MultiNet;ESP32-S3 的預設配置使用「你好小智」模型 | Kconfig WAKE_WORD_TYPE;自訂喚醒詞需要 ESP32-S3 / P4 / S31 並帶 PSRAM;自訂詞用拼音、空格分隔,閾值 1~99,越小越靈敏,預設 20 |
| 回聲消除與 VAD | ESP32-S3 / P4 / S31 使用 AFE,啟用音訊處理時帶 AEC 與 VAD;ESP32 / C3 / C5 / C6 輸出原始單聲道 PCM,不做 AEC 和 VAD | USE_AUDIO_PROCESSOR 預設開;裝置端 AEC USE_DEVICE_AEC 預設關,只對 Kconfig 中列出的開發板可選;服務端 AEC 在 Kconfig 中標註為不穩定 |
| 編解碼與傳輸 | Opus 編解碼;WebSocket 或 MQTT + UDP | 使用哪種協議由服務端在 OTA 回應中指定,見 首次啟動 |
| 監聽模式 | 自動停止、手動停止、Realtime;Realtime 需要 AEC 支援 | 協議中 listen 訊息的 mode 取 auto、manual、realtime |
| 喚醒詞音訊上傳 | 喚醒後把最近約 2 秒的音訊作為對話的第一條資料發給服務端 | SEND_WAKE_WORD_DATA 預設開,僅 AFE 喚醒詞與自訂喚醒詞可用 |
| 顯示與表情 | 按 llm 訊息中的 emotion 切換表情 | 見 表情與情緒 |
各晶片可選的喚醒詞型別、音訊引擎和 PSRAM 要求見 晶片支援與儲存規格,擴充入口見 進階擴充點。
裝置控制與攝影機
裝置端 MCP 讓大模型呼叫裝置上的工具(音量、燈光、馬達、GPIO 等),雲端 MCP 擴充大模型本身的能力,協議與用法見 MCP 文件。
帶攝影機的開發板會註冊工具 self.camera.take_photo,參數是 question。大模型決定呼叫時,裝置拍照並編碼為 JPEG,以 multipart/form-data POST(欄位 question 與 file)到服務端指定的網址,把回傳的文字作為工具結果。這個網址和令牌由服務端在 MCP initialize 的 capabilities.vision 中下發,見 MCP 協議;沒有下發時工具會回傳「Image explain URL or token is not set」。影象理解由服務端完成。
聲紋識別
上游 README 把基於 3D Speaker 的聲紋識別列為已實現功能。v2.5.2 的韌體原始碼裡沒有聲紋相關程式碼,只在 README 等文件中提到,能否使用以所接入服務端的說明為準。
介面語言
韌體在 menuconfig 的 Default Language 中提供 40 個選項,main/assets/locales 下也是 40 個語言目錄;上游 README 的文字寫作 38 種。語言目錄(以 en-US 為例)包含數字、歡迎、啟用、配網、升級、PIN 與註冊錯誤等提示的 OGG 音訊和 language.json。語音提示優先使用本地化資源,缺失時回退到英文。喚醒詞、字型、表情和聊天背景可以用上游的 Assets 生成器 線上定製,見 自訂 Assets 指南。
幾個常見誤解
- 「裝置本地執行大模型或 TensorFlow Lite」:v2.5.2 儲存庫中沒有 TensorFlow Lite 的相關檔案,韌體原始碼和依賴清單裡也沒有 ESP-DL。裝置端模型只有 ESP-SR 的喚醒詞和 AFE 音訊處理,對話由服務端完成。
- 「韌體內建某家大模型或語音服務的接入」:韌體只實現與服務端通訊的協議(WebSocket、MQTT + UDP)。接入哪家模型取決於服務端的配置,官方伺服器與自建服務端的區別見 自建服務端。
- 「識別率、延遲、功耗有標準數字」:上游沒有公佈裝置級的識別率、延遲或功耗指標,這些取決於所接入的服務端、網路和開發板。本站不提供沒有上游依據的數字。
繼續閱讀
- 功能使用教程:韌體已實現功能一覽;
- 自建服務端:把識別、對話和合成放到自己的伺服器;
- WebSocket 協議 與 MQTT + UDP 協議:裝置與服務端之間的訊息;
- 晶片支援與儲存規格:各晶片的音訊引擎與喚醒詞選項。
來源:78/xiaozhi-esp32 v2.5.2 的 main/audio/README.md、main/Kconfig.projbuild、main/mcp_server.cc、main/boards/common/esp32_camera.cc、sdkconfig.defaults.esp32s3 與 README_zh.md。