Files
open-xiaoai/packages/client-rust/README.md
T

93 lines
3.5 KiB
Markdown
Raw Normal View History

# Rust Client
这是使用 Rust 编写的小爱音箱补丁程序,主要负责:
- 共享通信协议(Server 端和 Client 端实时双向通信)
- 转发小爱音箱的麦克风输入音频流到 Server 端进行识别处理
- 转发小爱音箱上的事件到 Server 端(语音识别结果、播放状态等)
- 响应来自 Server 端的指令调用(执行脚本、播放音频流、系统升级等)
## 编译运行
> [!IMPORTANT]
> 本项目仅作为挖掘小爱音箱潜力的一个演示,并未提供任何预构建产物,仅适合有动手能力的人自行编译运行。你可以按需修改源代码,增删自己想要的功能。
首先,你需要在电脑上安装 `Rust` 开发环境 👉 [传送门](https://www.rust-lang.org/)
为了构建能够在小爱音箱上运行的 ARMv7 应用,你还需要安装 `cross` 👉 [传送门](https://github.com/cross-rs/cross)
```shell
# 安装依赖
cargo fetch
# 交叉编译
cross build --release --target armv7-unknown-linux-gnueabihf
```
> [!NOTE]
> 以下操作需要先将小爱音箱刷机, 然后 SSH 连接到小爱音箱。
编译成功后,将构建好的补丁程序 `client` 复制到小爱音箱上
```shell
# client 文件路径
./target/armv7-unknown-linux-gnueabihf/release/client
```
如果你是 macOS 系统,可以直接使用 `dd` + `ssh` 命令复制文件到小爱音箱
```shell
dd if=target/armv7-unknown-linux-gnueabihf/release/client \
| ssh -o HostKeyAlgorithms=+ssh-rsa root@你的小爱音箱IP地址 "dd of=/data/client"
```
> 注意:替换你自己的小爱音箱局域网 IP 地址,比如: root@192.168.31.227
你也可以先把 `client` 文件上传到一个地方,然后 SSH 连接到小爱音箱后,再用 `curl` 命令下载到本地。
```shell
# 连接到小爱音箱
ssh -o HostKeyAlgorithms=+ssh-rsa root@你的小爱音箱IP地址
# 下载文件到 /data/client
curl -# -o /data/client https://你的client文件下载链接
```
最后,在小爱音箱上授予 `client` 文件运行权限,然后运行:
```shell
# 授权
chmod +x /data/client
# 运行
/data/client ws://你的 server 端地址
# 比如:/data/client ws://192.168.31.227:4399
```
## 注意事项
> [!TIP]
> 旧版小爱音箱 Pro 的可用 RAM 和 ROM 均为 10MB 左右
>
> 新版 Xiaomi 智能音箱 Pro 约为 100MB(升级为旧版的 10 倍!)
当前 Client 端使用 Rust 编写,只负责转发和被动响应 Server 端的调用,不实现具体的业务逻辑。
一方面,小爱音箱的内存算力和存储空间极为有限,语音识别之类的任务并不适合放在 Client 端侧运行。
另一方面,使用 Rust 编写一些业务逻辑,不如 Python 和 Node.js 灵活开发效率高,后者的应用生态也更丰富一些。
> [!CAUTION]
> 当你在公网上运行本项目时,应当提高警惕。🚨
如上所言,本项目仅作为一个基础的演示程序。诸如多设备连接管理、身份认证、通信数据加密、音频压缩传输等均未做处理。
尤其是其提供了执行任意脚本的能力演示,虽然在启动 client 端时需要由你本人指定可信的 server 端连接地址,但还是要务必小心!
毕竟再怎么小心都不为过 :)
你也可以 Fork 本项目,在此基础上将 MiGPT 和小智 AI 等业务逻辑完全放在 Client 端运行,不需要将数据转发到 Server 端处理,这样就不存在隐私数据泄露的风险了,也不需要额外的服务器或 NAS 设备去部署运行。