{"repo":"xinnan-tech/xiaozhi-esp32-server","free":true,"listed":false,"github":"https://github.com/xinnan-tech/xiaozhi-esp32-server","clone":"git clone https://github.com/xinnan-tech/xiaozhi-esp32-server.git","description":"本项目为xiaozhi-esp32提供后端服务，帮助您快速搭建ESP32设备控制服务器。Backend service for xiaozhi-esp32, helps you quickly build an ESP32 device control server.","language":"JavaScript","stars":10331,"topics":["dify","esp32","mcp-server","xiaozhi","xiaozhi-ai","xiaozhi-esp32","xiaozhi-server"],"license":"MIT","category":"iot_backend","readme_excerpt":"[![Banners](docs/images/banner1.png)](https://github.com/xinnan-tech/xiaozhi-esp32-server)\n\n<h1 align=\"center\">小智后端服务xiaozhi-esp32-server</h1>\n\n<p align=\"center\">\n本项目基于人机共生智能理论和技术研发智能终端软硬件体系<br/>为开源智能硬件项目\n<a href=\"https://github.com/78/xiaozhi-esp32\">xiaozhi-esp32</a>提供后端服务<br/>\n根据<a href=\"https://ccnphfhqs21z.feishu.cn/wiki/M0XiwldO9iJwHikpXD5cEx71nKh\">小智通信协议</a>使用Python、Java、Vue实现<br/>\n支持MQTT+UDP协议、Websocket协议、MCP接入点、声纹识别、知识库\n</p>\n\n<p align=\"center\">\n<a href=\"./docs/FAQ.md\">常见问题</a>\n· <a href=\"https://github.com/xinnan-tech/xiaozhi-esp32-server/issues\">反馈问题</a>\n· <a href=\"./README.md#%E9%83%A8%E7%BD%B2%E6%96%87%E6%A1%A3\">部署文档</a>\n· <a href=\"https://github.com/xinnan-tech/xiaozhi-esp32-server/releases\">更新日志</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"./README.md\"><img alt=\"简体中文版自述文件\" src=\"https://img.shields.io/badge/简体中文-DBEDFA\"></a>\n  <a href=\"./docs/readme/README_en.md\"><img alt=\"README in English\" src=\"https://img.shields.io/badge/English-DFE0E5\"></a>\n  <a href=\"./docs/readme/README_vi.md\"><img alt=\"Tiếng Việt\" src=\"https://img.shields.io/badge/Tiếng Việt-DFE0E5\"></a>\n  <a href=\"./docs/readme/README_de.md\"><img alt=\"Deutsch\" src=\"https://img.shields.io/badge/Deutsch-DFE0E5\"></a>\n  <a href=\"./docs/readme/README_pt_BR.md\"><img alt=\"Português (Brasil)\" src=\"https://img.shields.io/badge/Português (Brasil)-DFE0E5\"></a>\n  <a href=\"https://github.com/xinnan-tech/xiaozhi-esp32-server/releases\">\n    <img alt=\"GitHub Contributors\" src=\"https://img.shields.io/github/v/release/xinnan-tech/xiaozhi-esp32-server?logo=docker\" />\n  </a>\n  <a href=\"https://github.com/xinnan-tech/xiaozhi-esp32-server/blob/main/LICENSE\">\n    <img alt=\"GitHub pull requests\" src=\"https://img.shields.io/badge/license-MIT-white?labelColor=black\" />\n  </a>\n  <a href=\"https://github.com/xinnan-tech/xiaozhi-esp32-server\">\n    <img alt=\"stars\" src=\"https://img.shields.io/github/stars/xinnan-tech/xiaozhi-esp32-server?color=ffcb47&labelColor=black\" />\n  </a>\n</p>\n\n<p align=\"center\">\nSpearheaded by Professor Siyuan Liu's Team (South China University of Technology)\n</br>\n刘思源教授团队主导研发（华南理工大学）\n</br>\n<img src=\"./docs/images/hnlg.jpg\" alt=\"华南理工大学\" width=\"50%\">\n</p>\n\n---\n\n## 适用人群 👥\n\n本项目需要配合 ESP32 硬件设备使用。如果您已经购买了 ESP32 相关硬件，且成功对接过虾哥部署的后端服务，并希望独立搭建自己的\n`xiaozhi-esp32` 后端服务，那么本项目非常适合您。\n\n想看使用效果？请猛戳视频 🎥\n\n<table>\n  <tr>\n    <td>\n      <a href=\"https://www.bilibili.com/video/BV1FMFyejExX\" target=\"_blank\">\n        <picture>\n          <img alt=\"响应速度感受\" src=\"docs/images/demo9.png\" /></picture>\n      </a>\n    </td>\n    <td>\n      <a href=\"https://www.bilibili.com/video/BV1vchQzaEse\" target=\"_blank\">\n        <picture>\n          <img alt=\"速度优化秘诀\" src=\"docs/images/demo6.png\" /></picture>\n      </a>\n    </td>\n    <td>\n      <a href=\"https://www.bilibili.com/video/BV1WEcxzFEAT\" target=\"_blank\">\n        <picture>\n          <img alt=\"小智数字人 支持语音唤醒\" src=\"docs/images/demo8.png\" /></picture>\n      </a>\n    </td>\n    <td>\n      <a href=\"https://www.bilibili.com/video/BV1CKVz6UEuB\" target=\"_blank\">\n        <picture>\n          <img alt=\"设备呼叫设备，打电话\" src=\"docs/images/demo0.png\" /></picture>\n      </a>\n    </td>\n    <td>\n      <a href=\"https://www.bilibili.com/video/BV1C1tCzUEZh\" target=\"_blank\">\n        <picture>\n          <img alt=\"复杂医疗场景\" src=\"docs/images/demo1.png\" /></picture>\n      </a>\n    </td>\n  </tr>\n  <tr>\n    <td>\n      <a href=\"https://www.bilibili.com/video/BV1VC96Y5EMH\" target=\"_blank\">\n        <picture>\n          <img alt=\"播放音乐查询天气播报新闻\" src=\"docs/images/demo7.png\" /></picture>\n      </a>\n    </td>\n    <td>\n      <a href=\"https://www.bilibili.com/video/BV12J7WzBEaH\" target=\"_blank\">\n        <picture>\n          <img alt=\"实时打断\" src=\"docs/images/demo10.png\" /></picture>\n      </a>\n    </td>\n    <td>\n      <a href=\"https://www.bilibili.com/video/BV1Co76z7EvK\" target=\"_blank\">\n        <picture>\n          <img alt=\"拍照识物品\" src=\"docs/images/demo12.png\" /></picture>\n      </a>\n    </td>\n    <td>\n      <a href=\"https://www.bilibili.com/video/BV1pNXWYGEx1\" target=\"_blank\">\n        <picture>\n          <img alt=\"控制家电开关\" src=\"docs/images/demo5.png\" /></picture>\n      </a>\n    </td>\n    <td>\n      <a href=\"https://www.bilibili.com/video/BV1TJ7WzzEo6\" target=\"_blank\">\n        <picture>\n          <img alt=\"多指令任务\" src=\"docs/images/demo11.png\" /></picture>\n      </a>\n    </td>\n  </tr>\n  <tr>\n    <td>\n      <a href=\"https://www.bilibili.com/video/BV1ZQKUzYExM\" target=\"_blank\">\n        <picture>\n          <img alt=\"MCP接入点\" src=\"docs/images/demo13.png\" /></picture>\n      </a>\n    </td>\n    <td>\n      <a href=\"https://www.bilibili.com/video/BV1zUW5zJEkq\" target=\"_blank\">\n        <picture>\n          <img alt=\"MQTT指令下发\" src=\"docs/images/demo4.png\" /></picture>\n      </a>\n    </td>\n    <td>\n      <a href=\"https://www.bilibili.com/video/BV1Exu3zqEDe\" target=\"_blank\">\n        <picture>\n          <img alt=\"声纹识别\" src=\"docs/images/demo14.png\" /></picture>\n      </a>\n    </td>\n    <td>\n      <a href=\"https://www.bilibili.com/video/BV1CDKWemEU6\" target=\"_blank\">\n        <picture>\n          <img alt=\"自定义音色\" src=\"docs/images/demo2.png\" /></picture>\n      </a>\n    </td>\n    <td>\n      <a href=\"https://www.bilibili.com/video/BV12yA2egEaC\" target=\"_blank\">\n        <picture>\n          <img alt=\"使用粤语交流\" src=\"docs/images/demo3.png\" /></picture>\n      </a>\n    </td>\n  </tr>\n</table>\n\n---\n\n## 警告 ⚠️\n\n1、本项目为开源软件，本软件与对接的任何第三方API服务商（包括但不限于语音识别、大模型、语音合成等平台）均不存在商业合作关系，不为其服务质量及资金安全提供任何形式的担保。\n建议使用者优先选择持有相关业务牌照的服务商，并仔细阅读其服务协议及隐私政策。本软件不托管任何账户密钥、不参与资金流转、不承担充值资金损失风险。\n\n2、本项目功能未完善，且未通过网络安全测评，请勿在生产环境中使用。 如果您在公网环境中部署学习本项目，请务必做好必要的防护。\n\n---\n\n## 部署文档\n\n![Banners](docs/images/banner2.png)\n\n本项目提供两种部署方式，请根据您的具体需求选择：\n\n#### 🚀 部署方式选择\n| 部署方式 | 特点 | 适用场景 | 部署文档 | 配置要求 | 视频教程 | \n|---------|------|---------|---------|---------|---------|\n| **最简化安装** | 智能对话、单智能体管理 | 低配置环境，数据存储在配置文件，无需数据库 | [①Docker版](./docs/Deployment.md#%E6%96%B9%E5%BC%8F%E4%B8%80docker%E5%8F%AA%E8%BF%90%E8%A1%8Cserver) / [②源码部署](./docs/Deployment.md#%E6%96%B9%E5%BC%8F%E4%BA%8C%E6%9C%AC%E5%9C%B0%E6%BA%90%E7%A0%81%E5%8F%AA%E8%BF%90%E8%A1%8Cserver)| 如果使用`FunASR`要2核4G，如果全API，要2核2G | - | \n| **全模块安装** | 智能对话、多用户管理、多智能体管理、智控台界面操作 | 完整功能体验，数据存储在数据库 |[①Docker版](./docs/Deployment_all.md#%E6%96%B9%E5%BC%8F%E4%B8%80docker%E8%BF%90%E8%A1%8C%E5%85%A8%E6%A8%A1%E5%9D%97) / [②源码部署](./docs/Deployment_all.md#%E6%96%B9%E5%BC%8F%E4%BA%8C%E6%9C%AC%E5%9C%B0%E6%BA%90%E7%A0%81%E8%BF%90%E8%A1%8C%E5%85%A8%E6%A8%A1%E5%9D%97) / [③源码部署自动更新教程](./docs/dev-ops-integration.md) | 如果使用`FunASR`要4核8G，如果全API，要2核4G| [本地源码启动视频教程](https://www.bilibili.com/video/BV1wBJhz4Ewe) | \n\n常见问题及相关教程，可参考[这个链接](./docs/FAQ.md)\n\n> 💡 提示：以下是按最新代码部署后的测试平台，有需要可烧录测试，并发为6个，每天会清空数据，\n\n```\n智控台地址: https://2662r3426b.vicp.fun\n智控台(h5版): https://2662r3426b.vicp.fun/h5/index.html\n\n服务测试工具： https://2662r3426b.vicp.fun/test/\nOTA接口地址: https://2662r3426b.vicp.fun/xiaozhi/ota/\nWebsocket接口地址: wss://2662r3426b.vicp.fun/xiaozhi/v1/\n```\n\n#### 🚩 配置说明和推荐\n> [!Note]\n> 本项目提供两种配置方案：\n> \n> 1. `入门全免费`配置：适合个人家庭使用，所有组件均采用免费方案，无需额外付费。\n> \n> 2. `流式配置`：适合演示、培训、超过2个并发等场景，采用流式处理技术，响应速度更快，体验更佳。\n> \n> 自`0.5.2`版本起，项目支持流式配置，相比早期版本，响应速度提升约`2.5秒`，显著改善用户体验。\n\n| 模块名称 | 入门全免费设置 | 流式配置 |\n|:---:|:---:|:---:|\n| ASR(语音识别) | FunASR(本地) | 👍XunfeiStreamASR(讯飞流式) |\n| LLM(大模型) | glm-4-flash(智谱) | 👍qwen-flash(阿里百炼) |\n| VLLM(视觉大模型) | glm-4v-flash(智谱) | 👍qwen3.5-flash(阿里百炼) |\n| TTS(语音合成) | EdgeTTS(微软) | 👍HuoshanDoubleStreamTTS(火山流式) |\n| Intent(意图识别) | function_call(函数调用) | function_call(函数调用) |\n| Memory(记忆功能) | mem_local_short(本地短期记忆） | mem_local_short（本地短期记忆） |\n\n如果您关心各组件的耗时，请查阅[小智各组件性能测试报告](https://github.com/xinnan-tech/xiaozhi-performance-research)，可按报告中的测试方法在您的环境中实际测试。\n\n#### 🔧 测试工具\n本项目提供以下测试工具，帮助您验证系统和选择合适的模型：\n\n| 工具名称 | 位置 | 使用方法 | 功能说明 |\n|:---:|:---|:---:|:---:|\n| 音频交互测试工具 | main》digital-human》index.html | 在 `main/digital-human` 执行 `python start.py` 后访问 `http://127.0.0.1:8006/index.html` | 测试音频播放和接收功能，验证Python端音频处理是否正常 |\n| 模型响应测试工具 | main》xiaozhi-server》performance_tester.py | 执行 `python performance_tester.py` | 测试ASR(语音识别)、LLM(大模型)、VLLM(视觉模型)、TTS(语音合成)三个核心模块的响应速度 |\n\n> 💡 提示：测试模型速度时，只会测试配置了密钥的模型。\n\n---\n## 功能清单 ✨\n### 已实现 ✅\n![请参考-全模块安装架构图](docs/images/deploy2.png)\n| 功能模块 | 描述 |\n|:---:|:---|\n| 核心架构 | 基于[MQTT+UDP网关](https://github.com/xinnan-tech/xiaozhi-esp32-server/blob/main/docs/mqtt-gateway-integration.md)、WebSocket、HTTP服务器，提供完整的控制台管理和认证系统 |\n| 语音交互 | 支持流式ASR(语音识别)、流式TTS(语音合成)、VAD(语音活动检测)，支持多语言识别和语音处理 |\n| 声纹识别 | 支持多用户声纹注册、管理和识别，与ASR并行处理，实时识别说话人身份并传递给LLM进行个性化回应 |\n| 智能对话 | 支持多种LLM(大语言模型)，实现智能对话 |\n| 视觉感知 | 支持多种VLLM(视觉大模型)，实现多模态交互 |\n| 意图识别 | 支持外挂的大模型意图识别、大模型自主函数调用，提供插件化意图处理机制 |\n| 记忆系统 | 支持本地短期记忆、mem0ai接口记忆、PowerMem智能记忆，具备记忆总结功能 |\n| 知识库 | 支持RAGFlow知识库，让大模型判断需要调度知识库后再回答 |\n| 工具调用 | 支持客户端IOT协议、客户MCP协议、服务端MCP协议、MCP接入点协议、自定义工具函数 |\n| 指令下发 | 依托MQTT协议，支持从智控台将MCP指令下发到ESP32设备 |\n| 管理后台 | 提供Web管理界面，支持用户管理、系统配置和设备管理；界面支持中文简体、中文繁体、英文显示 |\n| 测试工具 | 提供性能测试工具、视觉模型测试工具和音频交互测试工具 |\n| 部署支持 | 支持Docker部署和本地部署，提供完整的配置文件管理 |\n| 插件系统 | 支持功能插件扩展、自定义插件开发和插件热加载 |\n\n### 正在开发 🚧\n\n想了解具体开发计划进度，[请点击这里](https://github.com/users/xinnan-tech/projects/3)。常见问题及相关教程，可参考[这个链接](./docs/FAQ.md)\n\n如果你是一名软件开发者，这里有一份[《致开发者的公开信》](docs/contributor_open_letter.md)，欢迎加入！\n\n---\n\n## 产品生态 👬\n小智是一个生态，当你使用这个产品时，也可以看看其他在这个生态圈的[优秀项目](https://github.com/78/xiaozhi-esp32/blob/main/README_zh.md#%E7%9B%B8%E5%85%B3%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE)\n\n---\n\n## 本项目支持的平台/组件列表 📋\n### LLM 语言模型\n\n| 使用方式 | 支持平台 | 免费平台 |\n|:---:|:---:|:---:|\n| openai 接口调用 | 阿里百炼、火山引擎、DeepSeek、智谱、Gemini、科大讯飞 | 智谱、Gemini |\n| ollama 接口调用 | Ollama | - |\n| dify 接口调用 | Dify | - |\n| fastgpt 接口调用 | Fastgpt | - |\n| coze 接口调用 | Coze | - |\n| xinference 接口调用 | Xinference | - |\n| homeassistant 接口调用 | HomeAssistant | - |\n\n实际上，任何支持 openai 接口调用的 LLM 均可接入使用。\n\n---\n\n### VLLM 视觉模型\n\n| 使用方式 | 支持平台 | 免费平台 |\n|:---:|:---:|:---:|\n| openai 接口调用 | 阿里百炼、智谱ChatGLMVLLM | 智谱ChatGLMVLLM |\n\n实际上，任何支持 openai 接口调用的 VLLM 均可接入使用。\n\n---\n\n### TTS 语音合成\n\n| 使用方式 | 支持平台 | 免费平台 |\n|:---:|:---:|:---:|\n| 接口调用 | EdgeTTS、科大讯飞、火山引擎、腾讯云、阿里云及百炼、CosyVoiceSiliconflow、TTS302AI、CozeCnTTS、GizwitsTTS、ACGNTTS、OpenAITTS、灵犀流式TTS、MinimaxTTS | 灵犀流式TTS、EdgeTTS、CosyVoiceSiliconflow(部分) |\n| 本地服务 | FishSpeech、GPT_SOVITS_V2、GPT_SOVITS_V3、Index-TTS、PaddleSpeech | Ind","default_branch":"main","files":1583,"tree":[".dockerignore",".github/ISSUE_TEMPLATE/bug_report.md",".github/ISSUE_TEMPLATE/code_improvement.md",".github/ISSUE_TEMPLATE/documentation_improvement.md",".github/ISSUE_TEMPLATE/feature_request.md",".github/dependabot.yml",".github/workflows/build-base-image.yml",".github/workflows/docker-image.yml",".gitignore","Dockerfile-server","Dockerfile-server-base","Dockerfile-web","LICENSE","README.md","docker-setup.sh","docs/Deployment.md","docs/Deployment_all.md","docs/FAQ.md","docs/ali-sms-integration.md","docs/all-in-one-digital-human-setup.md","docs/context-provider-integration.md","docs/contributor_open_letter.md","docs/dev-ops-integration.md","docs/device-call-guide.md","docs/digital-human-wakeword.md","docs/docker-build.md","docs/docker/nginx.conf","docs/docker/start.sh","docs/firmware-build.md","docs/firmware-setting.md","docs/fish-speech-integration.md","docs/homeassistant-integration.md","docs/huoshan-streamTTS-voice-cloning.md","docs/images/__init__.py","docs/images/alisms/sms-01.png","docs/images/alisms/sms-02.png","docs/images/alisms/sms-11.png","docs/images/alisms/sms-21.png","docs/images/alisms/sms-22.png","docs/images/alisms/sms-23.png","docs/images/alisms/sms-24.png","docs/images/alisms/sms-25.png","docs/images/alisms/sms-31.png","docs/images/alisms/sms-32.png","docs/images/banner1.png","docs/images/banner2.png","docs/images/conda_env_1.png","docs/images/conda_env_2.png","docs/images/demo0.png","docs/images/demo1.png","docs/images/demo10.png","docs/images/demo11.png","docs/images/demo12.png","docs/images/demo13.png","docs/images/demo14.png","docs/images/demo2.png","docs/images/demo3.png","docs/images/demo4.png","docs/images/demo5.png","docs/images/demo6.png","docs/images/demo7.png","docs/images/demo8.png","docs/images/demo9.png","docs/images/deploy1.png","docs/images/deploy2.png","docs/images/firmware-setting-ota.png","docs/images/fishspeech/autodl-01.png","docs/images/fishspeech/autodl-02.png","docs/images/hnlg.jpg","docs/images/image-clone-integration-01.png","docs/images/image-clone-integration-02.png","docs/images/image-clone-integration-03.png","docs/images/image-ha-integration-01.png","docs/images/image-ha-integration-02.png","docs/images/image-ha-integration-03.png","docs/images/image-ha-integration-04.png","docs/images/image-ha-integration-05.png","docs/images/image-ha-integration-06.png","docs/images/logo_bailing.png","docs/images/logo_contributors.png","docs/images/logo_huiyuan.png","docs/images/logo_junsen.png","docs/images/logo_qinren.png","docs/images/logo_tenclass.png","docs/images/logo_xuanfeng.png","docs/images/manager-mobile/打包发行步骤1.png","docs/images/manager-mobile/打包发行步骤2.png","docs/images/manager-mobile/本地运行.png","docs/images/manager-mobile/生成appid.png","docs/images/manager-mobile/重新识别项目.png","docs/index-stream-integration.md","docs/mcp-endpoint-enable.md","docs/mcp-endpoint-integration.md","docs/mcp-get-device-info.md","docs/mcp-vision-integration.md","docs/mqtt-gateway-integration.md","docs/newsnow_plugin_config.md","docs/ota-upgrade-guide.md","docs/paddlespeech-deploy.md","docs/performance_tester.md","docs/powermem-integration.md","docs/ragflow-integration.md","docs/readme/README_de.md","docs/readme/README_en.md","docs/readme/README_pt_BR.md","docs/readme/README_vi.md","docs/voiceprint-integration.md","docs/weather-integration.md","docs/web-search-integration.md","main/README.md","main/README_en.md","main/digital-human/README.md","main/digital-human/css/bg.png","main/digital-human/css/index.css","main/digital-human/favicon.ico","main/digital-human/images/1.png","main/digital-human/images/2.png","main/digital-human/images/3.png","main/digital-human/index.html","main/digital-human/js/app.js","main/digital-human/js/config/default-mcp-tools.json","main/digital-human/js/config/manager.js","main/digital-human/js/core/audio/opus-codec.js","main/digital-human/js/core/audio/player.js","main/digital-human/js/core/audio/recorder.js","main/digital-human/js/core/audio/stream-context.js","main/digital-human/js/core/mcp/tools.js","main/digital-human/js/core/network/ota-connector.js","main/digital-human/js/core/network/wakeword-bridge.js","main/digital-human/js/core/network/websocket.js","main/digital-human/js/live2d/cubism4.min.js","main/digital-human/js/live2d/live2d.js","main/digital-human/js/live2d/live2dcubismcore.min.js","main/digital-human/js/live2d/pixi.js","main/digital-human/js/ui/background-load.js","main/digital-human/js/ui/controller.js","main/digital-human/js/utils/blocking-queue.js","main/digital-human/js/utils/libopus.js","main/digital-human/js/utils/logger.js","main/digital-human/resources/hiyori_pro_zh/ReadMe.txt","main/digital-human/resources/hiyori_pro_zh/hiyori_pro_t04.can3","main/digital-human/resources/hiyori_pro_zh/hiyori_pro_t11.cmo3","main/digital-human/resources/hiyori_pro_zh/runtime/hiyori_pro_t11.2048/texture_00.png","main/digital-human/resources/hiyori_pro_zh/runtime/hiyori_pro_t11.2048/texture_01.png","main/digital-human/resources/hiyori_pro_zh/runtime/hiyori_pro_t11.cdi3.json","main/digital-human/resources/hiyori_pro_zh/runtime/hiyori_pro_t11.moc3","main/digital-human/resources/hiyori_pro_zh/runtime/hiyori_pro_t11.model3.json","main/digital-human/resources/hiyori_pro_zh/runtime/hiyori_pro_t11.physics3.json","main/digital-human/resources/hiyori_pro_zh/runtime/hiyori_pro_t11.pose3.json","main/digital-human/resources/hiyori_pro_zh/runtime/motion/hiyori_m01.motion3.json","main/digital-human/resources/hiyori_pro_zh/runtime/motion/hiyori_m02.motion3.json","main/digital-human/resources/hiyori_pro_zh/runtime/motion/hiyori_m03.motion3.json","main/digital-human/resources/hiyori_pro_zh/runtime/motion/hiyori_m04.motion3.json","main/digital-human/resources/hiyori_pro_zh/runtime/motion/hiyori_m05.motion3.json","main/digital-human/resources/hiyori_pro_zh/runtime/motion/hiyori_m06.motion3.json","main/digital-human/resources/hiyori_pro_zh/runtime/motion/hiyori_m07.motion3.json","main/digital-human/resources/hiyori_pro_zh/runtime/motion/hiyori_m08.motion3.json","main/digital-human/resources/hiyori_pro_zh/runtime/motion/hiyori_m09.motion3.json","main/digital-human/resources/hiyori_pro_zh/runtime/motion/hiyori_m10.motion3.json","main/digital-human/resources/natori_pro_zh/ReadMe.txt","main/digital-human/resources/natori_pro_zh/natori_pro_exp_t03.can3","main/digital-human/resources/natori_pro_zh/natori_pro_motions_t03.can3","main/digital-human/resources/natori_pro_zh/natori_pro_t06.cmo3","main/digital-human/resources/natori_pro_zh/runtime/exp/Angry.exp3.json","main/digital-human/resources/natori_pro_zh/runtime/exp/Blushing.exp3.json","main/digital-human/resources/natori_pro_zh/runtime/exp/Normal.exp3.json","main/digital-human/resources/natori_pro_zh/runtime/exp/Sad.exp3.json","main/digital-human/resources/natori_pro_zh/runtime/exp/Smile.exp3.json","main/digital-human/resources/natori_pro_zh/runtime/exp/Surprised.exp3.json","main/digital-human/resources/natori_pro_zh/runtime/exp/exp_01.exp3.json","main/digital-human/resources/natori_pro_zh/runtime/exp/exp_02.exp3.json","main/digital-human/resources/natori_pro_zh/runtime/exp/exp_03.exp3.json","main/digital-human/resources/natori_pro_zh/runtime/exp/exp_04.exp3.json","main/digital-human/resources/natori_pro_zh/runtime/exp/exp_05.exp3.json","main/digital-human/resources/natori_pro_zh/runtime/motions/mtn_00.motion3.json","main/digital-human/resources/natori_pro_zh/runtime/motions/mtn_01.motion3.json","main/digital-human/resources/natori_pro_zh/runtime/motions/mtn_02.motion3.json","main/digital-human/resources/natori_pro_zh/runtime/motions/mtn_03.motion3.json","main/digital-human/resources/natori_pro_zh/runtime/motions/mtn_04.motion3.json","main/digital-human/resources/natori_pro_zh/runtime/motions/mtn_05.motion3.json","main/digital-human/resources/natori_pro_zh/runtime/motions/mtn_06.motion3.json","main/digital-human/resources/natori_pro_zh/runtime/motions/mtn_07.motion3.json","main/digital-human/resources/natori_pro_zh/runtime/natori.pose3.json","main/digital-human/resources/natori_pro_zh/runtime/natori_pro_t06.4096/texture_00.png","main/digital-human/resources/natori_pro_zh/runtime/natori_pro_t06.cdi3.json","main/digital-human/resources/natori_pro_zh/runtime/natori_pro_t06.moc3","main/digital-human/resources/natori_pro_zh/runtime/natori_pro_t06.model3.json","main/digital-human/resources/natori_pro_zh/runtime/natori_pro_t06.physics3.json","main/digital-human/start.py","main/digital-human/wakeword_runtime/__init__.py","main/digital-human/wakeword_runtime/bridge/__init__.py","main/digital-human/wakeword_runtime/bridge/event_bridge.py","main/digital-human/wakeword_runtime/config.json","main/digital-human/wakeword_runtime/config/__init__.py","main/digital-human/wakeword_runtime/config/config_loader.py","main/digital-human/wakeword_runtime/config/logging_setup.py","main/digital-human/wakeword_runtime/core/__init__.py","main/digital-human/wakeword_runtime/core/detector.py","main/digital-human/wakeword_runtime/core/detector_assets.py","main/digital-human/wakeword_runtime/core/microphone.py","main/digital-human/wakeword_runtime/plugins/__init__.py","main/digital-human/wakeword_runtime/plugins/audio.py","main/digital-human/wakeword_runtime/plugins/base.py","main/digital-human/wakeword_runtime/plugins/manager.py","main/digital-human/wakeword_runtime/plugins/wake_word.py","main/digital-human/wakeword_runtime/requirements.txt","main/digital-human/wakeword_runtime/runtime/__init__.py","main/digital-human/wakeword_runtime/runtime/app.py","main/digital-human/wakeword_runtime/runtime/http_server.py","main/manager-api/README.md","main/manager-api/pom.xml","main/manager-api/src/main/java/xiaozhi/AdminApplication.java","main/manager-api/src/main/java/xiaozhi/common/annotation/DataFilter.java","main/manager-api/src/main/java/xiaozhi/common/annotation/LogOperation.java","main/manager-api/src/main/java/xiaozhi/common/aspect/RedisAspect.java","main/manager-api/src/main/java/xiaozhi/common/config/AsyncConfig.java","main/manager-api/src/main/java/xiaozhi/common/config/MybatisPlusConfig.java","main/manager-api/src/main/java/xiaozhi/common/config/RestTemplateConfig.java","main/manager-api/src/main/java/xiaozhi/common/config/SwaggerConfig.java","main/manager-api/src/main/java/xiaozhi/common/constant/Constant.java","main/manager-api/src/main/java/xiaozhi/common/convert/DateConverter.java","main/manager-api/src/main/java/xiaozhi/common/dao/BaseDao.java","main/manager-api/src/main/java/xiaozhi/common/entity/BaseEntity.java","main/manager-api/src/main/java/xiaozhi/common/exception/ErrorCode.java","main/manager-api/src/main/java/xiaozhi/common/exception/RenException.java","main/manager-api/src/main/java/xiaozhi/common/exception/RenExceptionHandler.java","main/manager-api/src/main/java/xiaozhi/common/handler/FieldMetaObjectHandler.java","main/manager-api/src/main/java/xiaozhi/common/interceptor/DataFilterInterceptor.java","main/manager-api/src/main/java/xiaozhi/common/interceptor/DataScope.java","main/manager-api/src/main/java/xiaozhi/common/page/PageData.java","main/manager-api/src/main/java/xiaozhi/common/page/TokenDTO.java","main/manager-api/src/main/java/xiaozhi/common/redis/RedisConfig.java","main/manager-api/src/main/java/xiaozhi/common/redis/RedisKeys.java","main/manager-api/src/main/java/xiaozhi/common/redis/RedisUtils.java","main/manager-api/src/main/java/xiaozhi/common/service/BaseService.java","main/manager-api/src/main/java/xiaozhi/common/service/CrudService.java","main/manager-api/src/main/java/xiaozhi/common/service/impl/BaseServiceImpl.java","main/manager-api/src/main/java/xiaozhi/common/service/impl/CrudServiceImpl.java","main/manager-api/src/main/java/xiaozhi/common/user/UserDetail.java","main/manager-api/src/main/java/xiaozhi/common/utils/AESUtils.java","main/manager-api/src/main/java/xiaozhi/common/utils/ConvertUtils.java","main/manager-api/src/main/java/xiaozhi/common/utils/DateUtils.java","main/manager-api/src/main/java/xiaozhi/common/utils/HttpContextUtils.java","main/manager-api/src/main/java/xiaozhi/common/utils/IpUtils.java","main/manager-api/src/main/java/xiaozhi/common/utils/JsonRpcTwo.java","main/manager-api/src/main/java/xiaozhi/common/utils/JsonUtils.java","main/manager-api/src/main/java/xiaozhi/common/utils/MessageUtils.java","main/manager-api/src/main/java/xiaozhi/common/utils/PropertiesUtils.java","main/manager-api/src/main/java/xiaozhi/common/utils/ResourcesUtils.java","main/manager-api/src/main/java/xiaozhi/common/utils/Result.java","main/manager-api/src/main/java/xiaozhi/common/utils/ResultUtils.java","main/manager-api/src/main/java/xiaozhi/common/utils/SM2Utils.java","main/manager-api/src/main/java/xiaozhi/common/utils/SensitiveDataUtils.java","main/manager-api/src/main/java/xiaozhi/common/utils/Sm2DecryptUtil.java","main/manager-api/src/main/java/xiaozhi/common/utils/SpringContextUtils.java","main/manager-api/src/main/java/xiaozhi/common/utils/TreeNode.java","main/manager-api/src/main/java/xiaozhi/common/utils/TreeUtils.java","main/manager-api/src/main/java/xiaozhi/common/validator/AssertUtils.java","main/manager-api/src/main/java/xiaozhi/common/validator/ValidatorUtils.java","main/manager-api/src/main/java/xiaozhi/common/validator/group/AddGroup.java","main/manager-api/src/main/java/xiaozhi/common/validator/group/DefaultGroup.java","main/manager-api/src/main/java/xiaozhi/common/validator/group/UpdateGroup.java","main/manager-api/src/main/java/xiaozhi/common/xss/SqlFilter.java","main/manager-api/src/main/java/xiaozhi/common/xss/XssConfig.java","main/manager-api/src/main/java/xiaozhi/common/xss/XssFilter.java","main/manager-api/src/main/java/xiaozhi/common/xss/XssHttpServletRequestWrapper.java","main/manager-api/src/main/java/xiaozhi/common/xss/XssProperties.java","main/manager-api/src/main/java/xiaozhi/common/xss/XssUtils.java","main/manager-api/src/main/java/xiaozhi/modules/agent/Enums/AgentChatHistoryType.java","main/manager-api/src/main/java/xiaozhi/modules/agent/Enums/AgentSnapshotField.java","main/manager-api/src/main/java/xiaozhi/modules/agent/Enums/XiaoZhiMcpJsonRpcJson.java","main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentChatHistoryController.java","main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentController.java","main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentMcpAccessPointController.java","main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentSnapshotController.java","main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentTemplateController.java","main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentVoicePrintController.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentChatTitleDao.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentContextProviderDao.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentCorrectWordMappingDao.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentDao.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentPluginMappingMapper.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentSnapshotDao.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentTagDao.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentTagRelationDao.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentTemplateDao.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentVoicePrintDao.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AiAgentChatAudioDao.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AiAgentChatHistoryDao.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentChatHistoryDTO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentChatHistoryReportDTO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentChatSessionDTO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentChatSummaryDTO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentCreateDTO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentDTO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentMemoryDTO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentSnapshotDataDTO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentSnapshotPageDTO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentSnapshotRestoreDTO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentSnapshotTagDTO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentTagDTO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentUpdateDTO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentVoicePrintSaveDTO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentVoicePrintUpdateDTO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dto/ContextProviderDTO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/dto/IdentifyVoicePrintResponse.java","main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentChatAudioEntity.java","main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentChatHistoryEntity.java","main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentChatTitleEntity.java","main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentContextProviderEntity.java","main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentCorrectWordMappingEntity.java","main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentEntity.java","main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentPluginMapping.java","main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentSnapshotEntity.java","main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentTagEntity.java","main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentTagRelationEntity.java","main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentTemplateEntity.java","main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentVoicePrintEntity.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentChatAudioService.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentChatHistoryService.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentChatSummaryService.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentChatTitleService.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentContextProviderService.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentMcpAccessPointService.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentPluginMappingService.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentService.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentSnapshotService.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentTagService.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentTemplateService.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentVoicePrintService.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/biz/AgentChatHistoryBizService.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/biz/impl/AgentChatHistoryBizServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentChatAudioServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentChatHistoryServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentChatSummaryServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentChatTitleServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentContextProviderServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentMcpAccessPointServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentPluginMappingServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentSnapshotRedactionRunner.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentSnapshotServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentTagServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentTemplateServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentVoicePrintServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/agent/typehandler/ContextProviderListTypeHandler.java","main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentChatHistoryUserVO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentInfoVO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentSnapshotVO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentTemplateVO.java","main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentVoicePrintVO.java","main/manager-api/src/main/java/xiaozhi/modules/config/controller/ConfigController.java","main/manager-api/src/main/java/xiaozhi/modules/config/dto/AgentModelsDTO.java","main/manager-api/src/main/java/xiaozhi/modules/config/dto/CorrectWordsDTO.java","main/manager-api/src/main/java/xiaozhi/modules/config/init/SystemInitConfig.java","main/manager-api/src/main/java/xiaozhi/modules/config/service/ConfigService.java","main/manager-api/src/main/java/xiaozhi/modules/config/service/impl/ConfigServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/correctword/controller/CorrectWordController.java","main/manager-api/src/main/java/xiaozhi/modules/correctword/dao/CorrectWordFileDao.java","main/manager-api/src/main/java/xiaozhi/modules/correctword/dao/CorrectWordItemDao.java","main/manager-api/src/main/java/xiaozhi/modules/correctword/dto/CorrectWordFileCreateDTO.java","main/manager-api/src/main/java/xiaozhi/modules/correctword/entity/CorrectWordFileEntity.java","main/manager-api/src/main/java/xiaozhi/modules/correctword/entity/CorrectWordItemEntity.java","main/manager-api/src/main/java/xiaozhi/modules/correctword/service/CorrectWordFileService.java","main/manager-api/src/main/java/xiaozhi/modules/correctword/service/impl/CorrectWordFileServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/correctword/vo/CorrectWordFileVO.java","main/manager-api/src/main/java/xiaozhi/modules/correctword/vo/CorrectWordSimpleVO.java","main/manager-api/src/main/java/xiaozhi/modules/device/controller/DeviceController.java","main/manager-api/src/main/java/xiaozhi/modules/device/controller/OTAController.java","main/manager-api/src/main/java/xiaozhi/modules/device/controller/OTAMagController.java","main/manager-api/src/main/java/xiaozhi/modules/device/dao/DeviceAddressBookDao.java","main/manager-api/src/main/java/xiaozhi/modules/device/dao/DeviceDao.java","main/manager-api/src/main/java/xiaozhi/modules/device/dao/OtaDao.java","main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceAddressBookAliasDTO.java","main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceAddressBookPermissionDTO.java","main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceManualAddDTO.java","main/manager-api/src/main/java/xiaozhi/modules/device/dto/DevicePageUserDTO.java","main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceRegisterDTO.java","main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceReportReqDTO.java","main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceReportRespDTO.java","main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceToolsCallReqDTO.java","main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceUnBindDTO.java","main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceUpdateDTO.java","main/manager-api/src/main/java/xiaozhi/modules/device/entity/DeviceAddressBookEntity.java","main/manager-api/src/main/java/xiaozhi/modules/device/entity/DeviceEntity.java","main/manager-api/src/main/java/xiaozhi/modules/device/entity/OtaEntity.java","main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceAddressBookService.java","main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java","main/manager-api/src/main/java/xiaozhi/modules/device/service/OtaService.java","main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceAddressBookServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/MqttGatewayAuthorization.java","main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/OtaServiceImpl.java","main/manager-api/src/main/java/xiaozhi/modules/device/vo/DeviceOtaVO.java","main/manager-api/src/main/java/xiaozhi/modules/device/vo/UserShowDeviceListVO.java","main/manager-api/src/main/java/xiaozhi/modules/knowledge/config/KnowledgeBaseConfig.java","main/manager-api/src/main/java/xiaozhi/modules/knowledge/config/RAGTaskConfig.java","main/manager-api/src/main/java/xiaozhi/modules/knowledge/controller/KnowledgeBaseController.java","main/manager-api/src/main/java/xiaozhi/modules/knowledge/controller/KnowledgeFilesController.java","main/manager-api/src/main/java/xiaozhi/modules/knowledge/dao/DocumentDao.java"],"storefront":"/r/xinnan-tech","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/xinnan-tech/xiaozhi-esp32-server/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}