# Technical Documentation: xiaozhi-esp32-server **Table of Contents:** 1. [Introduction](#1-introduction) 2. [Overall Architecture](#2-overall-architecture) 3. [Component Deep Dive](#3-component-deep-dive) * [xiaozhi-server (Python AI Engine)](#31-xiaozhi-server-python-ai-engine) * [manager-api (Java Management Backend)](#32-manager-api-java-management-backend) * [manager-web (Vue.js Management Frontend)](#33-manager-web-vuejs-management-frontend) 4. [Data Flow and Interaction Mechanisms](#4-data-flow-and-interaction-mechanisms) 5. [Key Features Summary](#5-key-features-summary) 6. [Deployment and Configuration Overview](#6-deployment-and-configuration-overview) --- ## 1. Introduction The `xiaozhi-esp32-server` project provides a comprehensive backend system designed to power intelligent voice interactions for ESP32-based smart hardware. Its primary purpose is to enable developers to quickly establish a robust server infrastructure capable of understanding natural language commands, interacting with various AI services (for speech recognition, language understanding, and speech synthesis), managing IoT devices, and offering a web-based interface for system configuration and administration. This project facilitates the creation of customizable voice assistants and smart control systems by integrating multiple cutting-edge technologies into a cohesive and extensible platform. --- ## 2. Overall Architecture The `xiaozhi-esp32-server` system is architected as a distributed suite of interconnected components, each with a distinct role, ensuring modularity and scalability. The primary components are: 1. **ESP32 Hardware (Client Device):** This is the physical smart hardware device that the end-user interacts with. It's responsible for: * Capturing user's voice commands. * Sending captured audio to the `xiaozhi-server`. * Receiving synthesized audio responses from `xiaozhi-server` and playing them back. * Potentially controlling other connected peripherals or IoT devices based on commands from `xiaozhi-server`. 2. **`xiaozhi-server` (Core AI Engine):** This Python-based server is the central brain for voice processing and interaction logic. Its key responsibilities include: * Establishing real-time, bidirectional WebSocket communication with ESP32 devices. * Receiving audio streams and performing Voice Activity Detection (VAD). * Converting speech to text using integrated Automatic Speech Recognition (ASR) services. * Interpreting user intent and generating responses by interacting with Large Language Models (LLMs). * Managing dialogue context and memory. * Converting text responses back to speech using Text-to-Speech (TTS) services. * Executing commands, including IoT device control via a plugin system. * Fetching its operational configuration from the `manager-api`. 3. **`manager-api` (Management Backend):** A Java Spring Boot application that provides a RESTful API for system administration and configuration. It serves as the backend for the `manager-web` frontend and a configuration source for `xiaozhi-server`. Its functions include: * User authentication and management for the control panel. * Registration and management of ESP32 devices. * Storage and retrieval of system configurations (e.g., selected AI service providers, API keys, device settings) in a MySQL database. * Providing endpoints for `xiaozhi-server` to fetch its configuration. * Managing voice timbre settings, OTA firmware updates, and other system parameters. * Utilizing Redis for caching to enhance performance. 4. **`manager-web` (Web Control Panel):** A Vue.js Single Page Application (SPA) that provides a graphical user interface for administrators. It allows for: * Easy configuration of `xiaozhi-server`'s AI services and operational parameters. * Management of users, devices, and their respective settings. * Monitoring system status (potentially) and managing other administrative tasks. * Interaction with all backend functionalities exposed by `manager-api`. **High-Level Interaction Flow:** * The **ESP32** device captures voice and communicates primarily with **`xiaozhi-server`** via WebSockets for all voice-related interactions. * **`xiaozhi-server`** processes the voice data, interacts with various AI cloud services or local models, and sends responses back to the ESP32. * The **`manager-web`** frontend communicates with **`manager-api`** using RESTful HTTP calls to manage and configure the entire system. * **`xiaozhi-server`** also communicates with **`manager-api`** (via REST) to pull its latest configuration, ensuring that changes made in the web panel are reflected in its operation. This separation of concerns allows the `xiaozhi-server` to focus on efficient real-time AI processing, while the `manager-api` and `manager-web` provide a robust and user-friendly interface for administration and setup. --- ## 3. Component Deep Dive ### 3.1. `xiaozhi-server` (Python AI Engine) The `xiaozhi-server` is the intelligent core of the system, responsible for processing voice interactions, interfacing with AI services, and managing communication with ESP32 devices. * **Purpose:** * To provide real-time processing of voice commands from ESP32 devices. * To integrate with various AI services for Speech-to-Text (ASR), Natural Language Understanding (via Large Language Models - LLMs), Text-to-Speech (TTS), Voice Activity Detection (VAD), Intent Recognition, and Memory. * To manage dialogue flow and context with users. * To execute custom functions and control IoT devices based on user commands. * To be dynamically configurable through the `manager-api`. * **Core Technologies:** * **Python 3:** The primary programming language. * **Asyncio:** Python's asynchronous programming framework, crucial for handling concurrent WebSocket connections and non-blocking I/O for AI service API calls. * **`websockets` Library:** For WebSocket server implementation. * **HTTP Client (e.g., `aiohttp`, `httpx`):** For asynchronous HTTP requests to `manager-api` and external AI services. * **YAML (PyYAML):** For local configuration file parsing. * **Key Implementation Aspects:** 1. **AI Service Provider Pattern (`core/providers/`):** * **Concept:** A flexible design for integrating AI services. Each service type (ASR, TTS, LLM, etc.) has an abstract base class defining a common interface. Concrete classes implement this interface for specific vendors or local models. * **Benefit:** Allows easy switching of AI service backends via configuration and simplifies adding new service integrations. * **Initialization:** `core/utils/modules_initialize.py` acts as a factory to load and instantiate configured providers. 2. **WebSocket Communication & Connection Handling (`core/websocket_server.py`, `core/connection.py`):** * **Server Setup:** Manages WebSocket connections from ESP32 devices. * **Connection Isolation:** Each ESP32 client gets a dedicated `ConnectionHandler` instance, isolating its session state and dialogue. * **Dynamic Configuration Updates:** Can fetch updated configurations from `manager-api` and re-initialize AI service modules live, without a full server restart. 3. **Message Handling & Dialogue Flow (`core/handle/`):** * Employs a modular handler pattern. The `ConnectionHandler` dispatches message processing to specialized modules based on message type or dialogue phase (e.g., `receiveAudioHandle.py` for audio input, `intentHandler.py` for NLU, `functionHandler.py` for plugin execution, `sendAudioHandle.py` for TTS output). 4. **Plugin System for Extensible Functions (`plugins_func/`):** * **Purpose:** Allows adding custom "skills" (e.g., weather, news, Home Assistant control). * **Mechanism:** Plugins define functions and schemas. The LLM can request execution of these functions (function calling). `loadplugins.py` and `register.py` manage plugin discovery and registration. 5. **Configuration Management (`config/`):** * Loads settings from a local `config.yaml` and merges them with configurations fetched from `manager-api` (via `manage_api_client.py`), enabling remote dynamic configuration. * `logger.py` sets up structured application logging. * `config/assets/` stores predefined audio files for system notifications. 6. **Auxiliary HTTP Server (`core/http_server.py`):** * Handles specific HTTP requests, notably for OTA firmware updates (`/xiaozhi/ota/`) and other utility endpoints. ### 3.2. `manager-api` (Java Management Backend) The `manager-api` component is a backend server built using Java and the Spring Boot framework, serving as the administrative hub. * **Purpose:** * Provide a secure RESTful API for the `manager-web` frontend. * Act as a centralized configuration provider for `xiaozhi-server`. * Manage persistent data (users, devices, AI configurations, voice timbres, OTA firmware). * **Core Technologies:** * **Java 21 & Spring Boot 3:** Core language and framework. * **Spring MVC:** For building REST controllers. * **MyBatis-Plus:** ORM for database interaction with MySQL. * **MySQL:** Relational database. * **Druid:** JDBC connection pool. * **Redis (Spring Data Redis):** For caching. * **Apache Shiro:** Security framework for authentication and authorization. * **Liquibase:** Database schema migration. * **Knife4j:** OpenAPI (Swagger) API documentation. * **Maven:** Build and dependency management. * **Key Implementation Aspects:** 1. **Modular Architecture (`modules/` package):** * Business logic is organized into distinct modules (e.g., `sys` for users/roles, `agent` for assistant configs, `device` for ESP32s, `config` for `xiaozhi-server` settings, `security`, `timbre`, `ota`). * Each module typically follows a layered pattern: Controller, Service, DAO (Mapper), Entity, DTO. 2. **Layered Architecture:** * **Controller Layer (`@RestController`):** Defines API endpoints, handles HTTP request/response. * **Service Layer (`@Service`):** Contains business logic, transaction management. * **Data Access Layer (MyBatis-Plus Mappers):** Interacts with the MySQL database. 3. **Common Functionalities (`common/` package):** * Provides shared code: base classes, global configurations (Spring, MyBatis, Redis, Knife4j), custom annotations (e.g., `@LogOperation`), AOP aspects, global exception handling, utility classes, and XSS protection. 4. **Security (Apache Shiro):** * Manages user authentication and permissions for accessing API endpoints. Configured with Shiro Realms and security filters. 5. **Database Schema Management (Liquibase):** * Ensures consistent database structure across environments through versioned schema changes. ### 3.3. `manager-web` (Vue.js Management Frontend) The `manager-web` is a Single Page Application (SPA) providing the administrative user interface. * **Purpose:** * Offer a web-based control panel for system configuration and management. * Enable administrators to configure `xiaozhi-server`'s AI services, manage users and devices, customize voice timbres, and handle OTA updates. * **Core Technologies:** * **Vue.js 2 & Vue CLI:** Core JavaScript framework and build tools. * **Vue Router:** For client-side routing within the SPA. * **Vuex:** For centralized state management. * **Element UI:** UI component library for a consistent look and feel. * **SCSS:** CSS preprocessor. * **HTTP Client (Flyio or Axios):** For API calls to `manager-api`. * **Workbox:** For PWA features (caching, service worker). * **Opus Libraries:** For potential in-browser audio recording/playback. * **Key Implementation Aspects:** 1. **SPA Structure:** Single HTML page with dynamic view updates. 2. **Component-Based Architecture:** UI built from reusable Vue components (`.vue` files in `src/views/` for pages and `src/components/` for smaller elements). 3. **Client-Side Routing (`src/router/index.js`):** Maps browser URLs to view components, with route guards for authentication. 4. **State Management (`src/store/index.js`):** Vuex manages global state (user info, device lists, etc.) via state, getters, mutations, and actions (often involving API calls). 5. **API Communication (`src/apis/`):** Modularized API service files make asynchronous calls to `manager-api`. 6. **Build Process & PWA Features:** Vue CLI (Webpack) bundles assets. Workbox enables PWA features like caching. 7. **Environment Configuration (`.env` files):** Manages settings like the `manager-api` base URL for different environments. --- ## 4. Data Flow and Interaction Mechanisms The system uses WebSockets for real-time voice interactions and RESTful APIs for management tasks. * **Core Voice Interaction (ESP32 <-> `xiaozhi-server` - WebSockets):** * ESP32 connects to `xiaozhi-server` via WebSocket. * Audio is streamed from ESP32 to server. * Server processes audio (VAD, ASR), interacts with LLM (possibly executing plugin functions), synthesizes response via TTS. * Synthesized audio is streamed back to ESP32. * JSON control/status messages are also exchanged. * **Management & Configuration (RESTful APIs - HTTP/JSON):** * **`manager-web` -> `manager-api`:** Admin actions in the web UI trigger REST API calls to `manager-api` for managing users, devices, configurations, etc. Shiro secures these endpoints. * **`xiaozhi-server` -> `manager-api`:** `xiaozhi-server` pulls its operational configuration from `manager-api` via REST API calls. * **OTA Updates (Conceptual - HTTP & WebSocket):** * Firmware uploaded via `manager-web` to `manager-api`. * `xiaozhi-server` may notify ESP32 of updates via WebSocket. * ESP32 downloads firmware via HTTP from an endpoint (likely on `xiaozhi-server`). --- ## 5. Key Features Summary * **Modular AI Services:** Pluggable ASR, LLM, TTS, VAD, Intent, Memory. * **Advanced Dialogue:** Real-time interruption, contextual memory, multi-language support. * **Extensible Skills:** Plugin system for custom functions (e.g., IoT, Home Assistant). * **Comprehensive Web Management:** UI for users, devices, AI configs, OTA, timbres. * **Flexible Deployment:** Docker (simplified/full) and source code options. * **Dynamic Remote Configuration:** `xiaozhi-server` updates settings from `manager-api` live. * **Open Source (MIT License).** * **Cost-Effective Options:** "Entry Level Free Settings" available. * **PWA Admin Panel:** Enhanced caching and user experience. * **API Documentation:** Knife4j for `manager-api`. --- ## 6. Deployment and Configuration Overview * **Deployment:** * **Docker:** Recommended for ease. Options for `xiaozhi-server` only or full stack (all components + databases). `docker-compose.yml` files provided. * **Source Code:** For development or custom setups, requiring manual environment setup for Python, Java/Maven, and Node.js. * **Configuration:** * **`xiaozhi-server`:** Uses a local `config.yaml`, but primarily pulls dynamic configurations (AI providers, API keys) from `manager-api` via its `manage_api_client.py`. * **`manager-api`:** Configured via Spring Boot's `application.properties` or `application.yml` (database, Redis, Shiro settings). * **`manager-web`:** Configured via `.env` files (e.g., `manager-api` URL). * The `manager-web` UI is the primary interface for most system configurations in a full deployment. * Predefined profiles like "Entry Level Free Settings" and "Full Streaming Configuration" guide AI service choices. ---