zclaw – ESP32 用 888 KiB AI 个人助理(C/C++)
介绍
zclaw 是一款极其轻量、全固件的 AI 个人助理,专门为 ESP32 系列微控制器设计,尺寸严格限制在 888 KiB 之内。该项目用纯 C 语言编写,借助 ESP‑IDF 与 FreeRTOS,使其能够轻松闪存到任何 ESP32‑C3、ESP32‑S3 或 ESP32‑C6 开发板上。
为什么选择 zclaw?
传统的设备端 LLM 解决方案往往需要数 GB RAM 或外接 GPU。zclaw 通过以下方式规避这些限制: * 提供小巧的单一功能 LLM 后端(Ollama、OpenAI、Anthropic 等) * 采用紧凑的调度与 GPIO API,支持简易的 “cron 类” 任务 * 使用 ESP‑NVS 存储所有凭证与配置,可选 AES 加密 * 提供 Telegram 聊天界面以及轻量级 Web 代理,让浏览器也能访问
其结果是一款完全离线且仅占 850 KiB flash 的边缘 AI,可实时响应自然语言查询。
主要特性
| 功能 | 描述 |
|---|---|
| 占用极小 | 默认构建 858 KiB,使用安全配置可降至 ≤ 888 KiB |
| 调度 | 支持日常、周期性和一次性任务,并具备时区感知 |
| GPIO 控制 | 读/写操作受限,支持批量 gpio_read_all() |
| 持久状态 | 快速 I/O 到 NVS,关机后数据保持 |
| 自定义工具 | 注册自己的 C 函数作为 LLM 插件 |
| 安全模式 | Flash 加密凭证使用 AES‑256 |
| 聊天渠道 | Telegram 机器人 + 可选 Web 代理 UI |
| LLM 后端 | Anthropic、OpenAI、OpenRouter、Ollama 或自定义端点 |
| CLI 脚本 | 启动、安装、配置、闪存、监控及基准测试 |
先决条件
- ESP‑IDF – 按官方指南安装最新 SDK。
- Git – 克隆代码仓。
- Python 3.8+ – 用于配置与测试脚本。
- Telegram Bot Token – (可选,聊天使用)或 HTTP LLM 接口。
- Wi‑Fi 凭证 – 网络信息以启动设备。
一行脚本快速上手
bash <(curl -fsSL https://raw.githubusercontent.com/tnm/zclaw/main/scripts/bootstrap.sh)
zclaw 源码。* 运行非交互式
install.sh,编译固件。* 将构建产物闪存到指定板子。
* 配置 Wi‑Fi 与 LLM 凭证。
若已有本地克隆,只需运行 ./install.sh 或 ./install.sh -y 进行演示。
闪存与安全配置
安全模式利用 ESP‑NVS 加密,保护 API 密钥和 Wi‑Fi 密码。
# 使用加密闪存并设置简易口令
./scripts/flash-secure.sh
./scripts/provision.sh。脚本会提示输入:
* Wi‑Fi SSID / 密码* LLM 提供商名称(如 ollama、openai)
* 端点和 API key
* 可选 Telegram bot token 与 chat ID
所有值会以哈希形式存入 flash。--flash-mode secure 标志保证后续升级仍保守加密。
运行聊天服务
设备配置完成后,闪存到 Wi‑Fi 并等待聊天连接。
- Telegram – 机器人自动转发接收的消息并返回回复。
- Web 代理 – 在宿主机运行
./scripts/web-relay.sh。它会开启一个短时间 HTTPS 端点,ESP32 将连接至之。打开给定 URL,即可在浏览器中实时聊天。
两种接口均实时直播 LLM 输出,体验近乎原生。
调度任务
zclaw 的调度器类似轻量级 cron。
int main() {
scheduler_register("");
// 每日 3 AM 发送一次 ping
scheduler_schedule("3 * * * *", "ping_device");
}
GPIO 与持久化
GPIO API 受保护:每次写操作可限制在指定的引脚范围内,gpio_read_all() 会返回连续位图。
持久内存通过 NVS 简单键值 API 暴露:
nvs_set("user_pref", 42);
int val = nvs_get("user_pref");
用自定义工具扩展 zclaw
zclaw 自带一个小型插件系统。添加新工具的步骤:
1. 编写符合 zclaw_tool_t 签名的 C 函数。
2. 编辑 main/config.h 注册工具。
3. 用 ./scripts/build.sh 重新编译。
新工具可在聊天界面通过在提示前加 tool: YourToolName 调用。
开发工作流程
典型开发循环:
./scripts/test.sh host # 验证宿主机测试
./scripts/build.sh # 编译固件
./scripts/flash.sh --kill-monitor /dev/cu.usbmodem1101
./scripts/provision-dev.sh --write-template # 配置本地开发配置
./scripts/monitor.sh /dev/cu.usbmodem1101
.github/workflows/,能自动构建、测试并验证每一次提交。
贡献
欢迎所有贡献!
* Fork、创建功能或缺陷修复分支。
* 确保本地测试通过。
* 新增 PR 并关联对应 issue。
* 许可证为 MIT – 查看 LICENSE 即可确认。
如发现安全漏洞,请直接联系维护者或使用 GitHub 安全报告功能。
许可证与致谢
zclaw 采用 MIT 许可证发布。代码为开源社区共同努力的结晶。特别感谢 ESP‑IDF 团队、FreeRTOS 贡献者以及所有在真实硬件上测试的人。
欲了解更多信息,请访问官方文档 https://zclaw.dev 或 GitHub 仓库。