Skip to content

Repository files navigation

🤖 Open Xiaozhi Client

WebUI Xiaozhi Client npm License

Open Xiaozhi Client WebUI 亮色-双栏

🎙️ 面向 小智生态 的开源客户端全协议实现。
让你可以更快地 学习协议、联调服务端、排查问题、体验小智能力

Open Xiaozhi Client 是一个基于小智生态的开源客户端项目,目标是提供一个真正可用、可观察、可调试的客户端实现入口。当前已经提供 WebUI 调试端,后续会继续扩展到更多平台和终端形态。

它既适合开发者作为 小智服务端调试工具 使用,也适合普通用户快速上手体验小智的交互链路。

npm install -g open-xiaozhi-client-webui
open-xiaozhi-client-webui

⚡ 1分钟跑起来!执行后自动启动本地服务并打开浏览器,默认访问 http://127.0.0.1:14100,按 Ctrl+C 退出。

✨ 为什么值得关注

  • 1 分钟跑起来:安装依赖、启动 WebUI、连接服务端,快速进入调试状态
  • 📐 全协议实现定位:围绕小智客户端侧能力建设,方便理解消息流和交互链路
  • 🔍 兼顾调试与体验:既能看协议细节,也能直接体验 WebUI 交互
  • 🔗 适配小智生态:支持官方小智,也支持开源服务端
  • 🔮 面向未来多端:当前是 WebUI,未来会继续支持更多客户端形态

🚀 当前已经可以做什么

当前版本重点提供一个面向学习、联调、排障的 WebUI 小智客户端

能力 说明
🖥️ 响应式 WebUI 客户端 宽屏双栏布局(对话历史 + 指令中心)/ 窄屏单栏布局,面板宽度可拖拽调整
📡 连接状态查看 查看 OTA 获取、连接中、握手中、就绪、播放中等状态变化
🎤 三种监听模式 对讲机(手动)/ 智能助理(VAD 自动)/ 通话(全双工实时),可随时切换
🔊 音频可视化 录音音量条 + 播放波形动画,实时反映收发音频状态
📋 协议日志面板 实时观察 WebSocket 文本帧、二进制帧、系统日志
📨 自定义消息发送 手动发送 JSON 消息,便于模拟与调试协议行为
🎛️ 设备控制面板 调整音量、屏幕亮度、明暗主题,查看收到的 IoT 命令,设置持久化
🌐 HTTP 面板 在连接态下发送服务端管理指令(更新配置、重启等)
⚙️ 设置面板 调整 Hello 参数、音频参数、心跳、日志数量等配置,持久化保存
🤖 MCP 协议支持 客户端作为 MCP Server 响应服务端工具调用(音量、亮度、主题、重启等)
📸 摄像头 / 视觉能力 支持 self.camera.take_photo:调用浏览器摄像头拍照,通过服务端下发的视觉端点分析图像并回传结果
🔐 设备激活流程 对齐 xiaozhi-esp32 OTA 激活协议,自动轮询 /activate 完成设备注册

👥 适合谁

  • 📖 想学习 小智协议 / xiaozhi protocol 的开发者
  • 🔧 想联调 官方小智开源服务端 的开发者
  • 🐛 想快速定位连接、握手、消息收发问题的服务端开发者
  • 🏗️ 想基于小智生态继续扩展桌面端、移动端或其他客户端的贡献者
  • 🌟 想先体验小智交互流程的普通用户

🔍 为什么这个项目对服务端调试有价值

很多小智相关项目在服务端开发阶段,最难的不是功能本身,而是:

  • 👀 不容易看清楚客户端到底发了什么
  • 🔄 不容易复现某个握手或协议问题
  • ✅ 不容易快速验证 IoT、HTTP、音频、消息链路是否正常

这个项目的价值就在于提供一个 可视化、可操作、可观察 的客户端调试入口:
你可以一边连接服务端,一边查看协议日志,一边手动发送消息或修改配置,从而更高效地定位问题。

🌐 支持的小智生态项目

官方小智

开源服务端

本项目聚焦 客户端侧实现、协议学习与服务端调试体验,不替代服务端项目本身。

⚡ 快速开始

npm install -g open-xiaozhi-client-webui
open-xiaozhi-client-webui

命令执行后会自动启动本地服务并打开浏览器,默认访问地址为 http://127.0.0.1:14100。若端口被占用会自动顺延。按 Ctrl+C 退出。

进入页面后,你可以:

  1. 在顶部填写服务地址,默认可按小智服务端 OTA 地址格式接入
  2. 点击连接,观察连接状态与握手流程
  3. 在协议日志中查看消息收发
  4. 在设备控制 / HTTP / 设置面板中继续联调和排障

🎛️ 命令行参数

启动时可附加以下参数:

参数 说明 示例
--ota=<url> 指定默认服务地址(OTA)。启动时注入前端,作为顶部「服务地址」输入框的默认值 --ota=https://your-server/xiaozhi/ota/
--port=<n> 指定监听端口。不指定时默认 14100,被占用会自动顺延;指定后若端口被占用则报错退出 --port=14200
open-xiaozhi-client-webui --ota=https://your-server/xiaozhi/ota/ --port=14200

说明:

  • 两种写法均可:--ota <url>--ota=<url>--port 同理)。
  • 服务默认监听 0.0.0.0,可通过局域网 IP 访问。
  • --ota 仅作为「服务地址」输入框的默认值;若浏览器本地已保存过手动填写的地址(localStorage),则以本地保存的为准。

源码开发模式

适合在本地修改代码、参与开发的贡献者。

环境要求:Node.js 18+、npm 9+

npm install
npm run dev

启动后默认访问:http://localhost:5173

🏗️ 构建

npm run build

📁 项目结构

采用六边形 / 端口-适配器 + 事件驱动架构,状态机与副作用分离,UI 与服务器交互完全解耦:

src/
  🧠 core/         纯领域核心(零依赖 React/浏览器):FSM 内核、连接/会话状态机、协议消息、端口接口、事件与命令
  🔌 adapters/     端口的浏览器实现:WebSocket 传输、HTTP OTA/激活、麦克风/扬声器、时钟
  🎛️ application/  应用编排:组合根、连接/会话编排、MCP 服务、入站消息路由
  🌉 ui/           运行时桥:组合根装配、命令分发、领域事件投影到 Zustand
  🧩 components/   WebUI 组件与调试面板
  ⚙️ features/     业务功能与 Zustand slice(连接、协议、音频、IoT、MCP、设备、摄像头、耗时统计等)
  🪝 hooks/        音频与连接相关 Hook
  🗄️ store/        全局状态聚合(Zustand slice 模式)

数据流:UI 通过 dispatch(Command) 表达意图 → 状态机产出 effects → 编排层经端口产生副作用并广播领域事件 → 投影层将事件单向写入只读视图模型 → React 重渲染。

🎯 这个项目的定位

这不是一个单纯的演示页面,也不只是一个简单的调试脚本。

它更适合作为:

  • 📌 小智客户端实现参考
  • 🔧 小智服务端联调工具
  • 📚 小智协议学习入口
  • 🏗️ 未来多端客户端的基础工程

🗺️ 路线图

  • WebUI 调试端
  • 面向协议学习与服务端调试的基础交互能力
  • 响应式双栏布局 + 三种监听模式
  • MCP 协议支持 + 设备控制面板
  • 摄像头 / 视觉能力(self.camera.take_photo
  • 设备激活流程(OTA 激活协议对齐)
  • 📱 更多客户端形态支持
  • 🖥️ 更完整的多端体验
  • 🔄 持续完善小智生态下的客户端能力

🤝 贡献与关注

如果你也在关注 小智客户端、xiaozhi WebUI、服务端联调、协议实现,欢迎:

  • ⭐ Star 这个项目
  • 🐛 提交 Issue 反馈问题或需求
  • 🔀 提交 PR 一起完善客户端能力
  • 🌍 参与多端扩展与生态适配

💡 如果你希望有一个 更容易上手、又足够专业的小智客户端调试入口,这个项目正是为此而生。

About

小智的客户端全协议实现。🎙️ 面向 小智生态 的开源客户端全协议实现。 让你可以更快地 学习协议、联调服务端、排查问题、体验小智能力。

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages