Возможности AI: что делает устройство и что делает сервер

Возможности AI: что делает устройство и что делает сервер

Прошивка XiaoZhi — это точка входа голосового диалога, а не среда для запуска больших моделей. Устройство отвечает за пробуждение, обработку звука, кодирование и декодирование, отображение и выполнение инструментов; распознавание речи (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 кГц в Opus (кадры по 60 мс) и отправляет его серверу.
  • Входящий поток: сервер присылает звук Opus; в примере из документа протокола частота дискретизации входящего потока — 24000 Гц.
  • 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)
Эхоподавление и VADESP32-S3 / P4 / S31 используют AFE: при включённой обработке звука работают AEC и VAD; ESP32 / C3 / C5 / C6 отдают необработанный моно-PCM без AEC и VADUSE_AUDIO_PROCESSOR включён по умолчанию; AEC на устройстве USE_DEVICE_AEC выключен по умолчанию и доступен только для плат из списка в Kconfig; AEC на сервере помечен в Kconfig как нестабильный
Кодирование и передачаКодирование и декодирование Opus; WebSocket или MQTT + UDPПротокол выбирает сервер в ответе OTA, см. Первый запуск
Режим прослушиванияАвтоостановка, ручная остановка, Realtime; для Realtime нужна поддержка AECПоле mode сообщения listen принимает auto, manual или realtime
Отправка звука слова пробужденияПосле пробуждения последние около 2 секунд звука отправляются серверу как первые данные диалогаSEND_WAKE_WORD_DATA включён по умолчанию, доступен только для слова пробуждения AFE и собственного слова
Отображение и мимикаПереключает мимику по полю emotion в сообщении llmСм. Отображение эмоций Emoji

Какие типы слов пробуждения, звуковые движки и требования к PSRAM действуют для каждого чипа — в разделе Поддержка чипов и спецификации хранилища; точки расширения — в разделе Точки расширения.

Управление устройством и камера

MCP на стороне устройства позволяет LLM вызывать инструменты устройства (громкость, свет, моторы, GPIO и другое), а облачный MCP расширяет возможности самой LLM. Протокол и порядок использования — в документации MCP.

Платы с камерой регистрируют инструмент self.camera.take_photo с параметром question. Когда LLM решает его вызвать, устройство делает снимок, кодирует его в JPEG и отправляет POST-запросом multipart/form-data (поля question и file) на адрес, который задал сервер, а полученный текст возвращает как результат инструмента. Адрес и токен сервер передаёт в capabilities.vision запроса MCP initialize, см. протокол 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) содержит OGG-звуки подсказок для цифр, приветствия, активации, настройки Wi-Fi, обновления, ошибок PIN и регистрации, а также language.json. Голосовые подсказки берутся из локализованных ресурсов, а при их отсутствии используется английский. Слова пробуждения, шрифты, мимику и фон чата можно настроить онлайн в генераторе Assets апстрима, см. Руководство по пользовательским Assets.

Частые заблуждения

  • «Устройство локально запускает большую модель или TensorFlow Lite»: в репозитории v2.5.2 нет файлов TensorFlow Lite, а в исходном коде прошивки и списке зависимостей нет и ESP-DL. На устройстве работают только слово пробуждения ESP-SR и обработка звука AFE; диалог ведёт сервер.
  • «В прошивку встроено подключение к конкретной LLM или голосовому сервису»: прошивка реализует только протоколы связи с сервером (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.md.