# xiaozhi-client
**Repository Path**: tinytaro/xiaozhi-client
## Basic Information
- **Project Name**: xiaozhi-client
- **Description**: 嵌入式Linux系统上的小智AI客户端
- **Primary Language**: Unknown
- **License**: GPL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2025-04-16
- **Last Updated**: 2025-06-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 小智AI客户端
本项目使用尽可能简单的C代码(500+)实现一个Linux上的小智AI客户端,支持基本的语音对话功能和MCP服务,主要用于嵌入式开发的教学。
## 项目概述
本项目主要包含的组件:
- **客户端程序(client)**: 负责与服务器通信,处理WebSocket连接,管理音频数据传输
- **录音程序(recorder)**: 捕获麦克风输入,使用Opus编码压缩,通过UDP发送给客户端
- **播放程序(player)**: 接收客户端转发的音频数据,解码后通过扬声器播放
- **MCP代理(mcp_proxy)**:转发客户端的MCP请求给MCP服务器(mcp_server.py)
项目使用Mongoose网络库处理WebSocket通信,使用ALSA库进行音频输入输出,使用Opus编解码器处理音频数据。
## 项目优势
- **轻量高效**:C语言实现的轻量级架构,代码简单易懂,特别适合嵌入式教学
- **模块化设计**:客户端、录音器、播放器三大模块各司其职,结构清晰,易于维护和扩展
- **跨平台兼容**:基于标准C库和跨平台网络库实现,依赖项少,适配性强,易于部署
- **扩展方便**:支持本地MCP服务器,可以方便地扩展智能体功能
## 安装依赖库
本项目依赖以下开发库和应用程序:
```bash
sudo apt-get install libasound2-dev libopus-dev libssl-dev
```
## 编译项目
使用CMake编译项目:
```bash
mkdir build
cd build
cmake ..
make
```
## 设备激活
项目提供了设备激活脚本`active`,用于获取设备激活码并绑定到小智AI服务器:
```bash
# 安装依赖
sudo apt install uuid curl jq
# 执行激活脚本
./active
```
执行后会显示设备的激活码,如已激活则显示"已激活"。该脚本通过获取设备MAC地址,向小智AI服务器发送激活请求,完成设备身份验证和功能授权。
## 使用方法
1. 先使用激活脚本激活设备
2. 启动播放器:
```bash
./player
```
3. 启动录音器:
```bash
./recorder
```
4. 启动MCP代理:
```bash
./mcp_proxy
```
5. 最后启动客户端:
```bash
./client
```
客户端会自动连接到小智AI服务器,并开始监听来自录音器的音频输入。当你开始说话时,录音器会捕获语音并发送给客户端,客户端会将语音数据转发给小智AI服务器进行处理。服务器的回复将通过播放器播放出来。
## 架构图
```mermaid
graph TB
C[小智AI服务器] <-->|WSS| B[客户端程序
client]
A -->|UDP:8888| B
B -->|UDP:8889| D
B -->|TCP:8080| E
subgraph 设备
A[录音程序
recorder]
D[播放程序
player]
B[客户端程序
client]
subgraph MCP代理
E[MCP服务器]
end
end
```
## 主要文件说明
- `client.c`: 客户端主程序,处理WebSocket通信
- `recorder.c`: 录音程序,负责捕获音频输入
- `player.c`: 音频播放程序,负责输出服务器回复的语音
- `mongoose.c/h`: 轻量级网络库,处理WebSocket和UDP通信
- `macaddr.c/h`: 获取设备MAC地址,用于设备识别
- `active`: 设备激活脚本,用于获取系统激活码并与服务器绑定设备
- `mcp_proxy`: MCP代理,用于调用本地MCP服务器(STDIO协议)
- `mcp_server.py`: MCP服务器