Files
mimiclaw/README_CN.md
2026-03-08 23:13:04 +08:00

341 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MimiClaw: $5 芯片上的口袋 AI 助理
<p align="center">
<img src="assets/banner.png" alt="MimiClaw" width="500" />
</p>
<p align="center">
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
<a href="https://deepwiki.com/memovai/mimiclaw"><img src="https://img.shields.io/badge/DeepWiki-mimiclaw-blue.svg" alt="DeepWiki"></a>
<a href="https://discord.gg/r8ZxSvB8Yr"><img src="https://img.shields.io/badge/Discord-mimiclaw-5865F2?logo=discord&logoColor=white" alt="Discord"></a>
<a href="https://x.com/ssslvky"><img src="https://img.shields.io/badge/X-@ssslvky-black?logo=x" alt="X"></a>
</p>
<p align="center">
<strong><a href="README.md">English</a> | <a href="README_CN.md">中文</a> | <a href="README_JA.md">日本語</a></strong>
</p>
**$5 芯片上的 AI 助理OpenClaw。没有 Linux没有 Node.js纯 C。**
MimiClaw 把一块小小的 ESP32-S3 开发板变成你的私人 AI 助理。插上 USB 供电,连上 WiFi通过 Telegram 跟它对话 — 它能处理你丢给它的任何任务,还会随时间积累本地记忆不断进化 — 全部跑在一颗拇指大小的芯片上。
## 认识 MimiClaw
- **小巧** — 没有 Linux没有 Node.js没有臃肿依赖 — 纯 C
- **好用** — 在 Telegram 发消息,剩下的它来搞定
- **忠诚** — 从记忆中学习,跨重启也不会忘
- **能干** — USB 供电0.5W24/7 运行
- **可爱** — 一块 ESP32-S3 开发板,$5没了
## 工作原理
![](assets/mimiclaw.png)
你在 Telegram 发一条消息ESP32-S3 通过 WiFi 收到后送进 Agent 循环 — LLM 思考、调用工具、读取记忆 — 再把回复发回来。同时支持 **Anthropic (Claude)****OpenAI (GPT)** 两种提供商,运行时可切换。一切都跑在一颗 $5 的芯片上,所有数据存在本地 Flash。
## 快速开始
### 你需要
- 一块 **ESP32-S3 开发板**16MB Flash + 8MB PSRAM如小智 AI 开发板,~¥30
- 一根 **USB Type-C 数据线**
- 一个 **Telegram Bot Token** — 在 Telegram 找 [@BotFather](https://t.me/BotFather) 创建
- 一个 **Anthropic API Key** — 从 [console.anthropic.com](https://console.anthropic.com) 获取,或一个 **OpenAI API Key** — 从 [platform.openai.com](https://platform.openai.com) 获取
### 安装
```bash
# 需要先安装 ESP-IDF v5.5+:
# https://docs.espressif.com/projects/esp-idf/en/v5.5.2/esp32s3/get-started/
git clone https://github.com/memovai/mimiclaw.git
cd mimiclaw
idf.py set-target esp32s3
```
<details>
<summary>Ubuntu 安装</summary>
建议基线:
- Ubuntu 22.04/24.04
- Python >= 3.10
- CMake >= 3.16
- Ninja >= 1.10
- Git >= 2.34
- flex >= 2.6
- bison >= 3.8
- gperf >= 3.1
- dfu-util >= 0.11
- `libusb-1.0-0``libffi-dev``libssl-dev`
Ubuntu 安装与构建:
```bash
sudo apt-get update
sudo apt-get install -y git wget flex bison gperf python3 python3-pip python3-venv \
cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
./scripts/setup_idf_ubuntu.sh
./scripts/build_ubuntu.sh
```
</details>
<details>
<summary>macOS 安装</summary>
建议基线:
- macOS 12/13/14
- Xcode Command Line Tools
- Homebrew
- Python >= 3.10
- CMake >= 3.16
- Ninja >= 1.10
- Git >= 2.34
- flex >= 2.6
- bison >= 3.8
- gperf >= 3.1
- dfu-util >= 0.11
- `libusb``libffi``openssl`
macOS 安装与构建:
```bash
xcode-select --install
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
./scripts/setup_idf_macos.sh
./scripts/build_macos.sh
```
</details>
### 配置
MimiClaw 使用**两层配置**`mimi_secrets.h` 提供编译时默认值,串口 CLI 可在运行时覆盖。CLI 设置的值存在 NVS Flash 中,优先级高于编译时值。
```bash
cp main/mimi_secrets.h.example main/mimi_secrets.h
```
编辑 `main/mimi_secrets.h`
```c
#define MIMI_SECRET_WIFI_SSID "你的WiFi名"
#define MIMI_SECRET_WIFI_PASS "你的WiFi密码"
#define MIMI_SECRET_TG_TOKEN "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
#define MIMI_SECRET_API_KEY "sk-ant-api03-xxxxx"
#define MIMI_SECRET_MODEL_PROVIDER "anthropic" // "anthropic" 或 "openai"
#define MIMI_SECRET_SEARCH_KEY "" // 可选Brave Search API key
#define MIMI_SECRET_TAVILY_KEY "" // 可选Tavily API key优先
#define MIMI_SECRET_PROXY_HOST "10.0.0.1" // 可选:代理地址
#define MIMI_SECRET_PROXY_PORT "7897" // 可选:代理端口
```
然后编译烧录:
```bash
# 完整编译(修改 mimi_secrets.h 后必须 fullclean
idf.py fullclean && idf.py build
# 查找串口
ls /dev/cu.usb* # macOS
ls /dev/ttyACM* # Linux
# 烧录并监控(将 PORT 替换为你的串口)
# USB 转接器:大概率是 /dev/cu.usbmodem11401macOS或 /dev/ttyACM0Linux
idf.py -p PORT flash monitor
```
> **注意:请插对 USB 口!** 大多数 ESP32-S3 开发板有两个 Type-C 接口,必须插标有 **USB** 的那个口(原生 USB Serial/JTAG**不要**插标有 **COM** 的口(外部 UART 桥接)。插错口会导致烧录/监控失败。
>
> <details>
> <summary>查看参考图片</summary>
>
> <img src="assets/esp32s3-usb-port.jpg" alt="请插 USB 口,不要插 COM 口" width="480" />
>
> </details>
### 代理配置(国内用户)
在国内需要代理才能访问 Telegram 和 Anthropic API。MimiClaw 内置 HTTP CONNECT 隧道支持。
**前提**:局域网内有一个支持 HTTP CONNECT 的代理Clash Verge、V2Ray 等),并开启了「允许局域网连接」。
可以在 `mimi_secrets.h` 中编译时设置,也可以通过串口 CLI 随时修改:
```
mimi> set_proxy 192.168.1.83 7897 # 设置代理
mimi> clear_proxy # 清除代理
```
> **提示**:确保 ESP32-S3 和代理机器在同一局域网。Clash Verge 在「设置 → 允许局域网」中开启。
### CLI 命令(通过 UART/COM 口连接)
通过串口连接即可配置和调试。**配置命令**让你无需重新编译就能修改设置 — 随时随地插上 USB 线就能改。
**运行时配置**(存入 NVS覆盖编译时默认值
```
mimi> wifi_set MySSID MyPassword # 换 WiFi
mimi> set_tg_token 123456:ABC... # 换 Telegram Bot Token
mimi> set_api_key sk-ant-api03-... # 换 API KeyAnthropic 或 OpenAI
mimi> set_model_provider openai # 切换提供商anthropic|openai
mimi> set_model gpt-4o # 换模型
mimi> set_proxy 192.168.1.83 7897 # 设置代理
mimi> clear_proxy # 清除代理
mimi> set_search_key BSA... # 设置 Brave Search API Key
mimi> set_tavily_key tvly-... # 设置 Tavily API Key优先
mimi> config_show # 查看所有配置(脱敏显示)
mimi> config_reset # 清除 NVS恢复编译时默认值
```
**调试与运维:**
```
mimi> wifi_status # 连上了吗?
mimi> memory_read # 看看它记住了什么
mimi> memory_write "内容" # 写入 MEMORY.md
mimi> heap_info # 还剩多少内存?
mimi> session_list # 列出所有会话
mimi> session_clear 12345 # 删除一个会话
mimi> heartbeat_trigger # 手动触发一次心跳检查
mimi> cron_start # 立即启动 cron 调度器
mimi> restart # 重启
```
### USB (JTAG) 与 UART哪个口做什么
大多数 ESP32-S3 开发板有 **两个 USB-C 口**
| 端口 | 用途 |
|------|------|
| **USB**JTAG | `idf.py flash`、JTAG 调试 |
| **COM**UART | **REPL 命令行**、串口控制台 |
> **REPL 必须连接 UARTCOM口。** USBJTAG口不支持交互式 REPL 输入。
<details>
<summary>端口详情与推荐工作流</summary>
| 端口 | 标注 | 协议 |
|------|------|------|
| **USB** | USB / JTAG | 原生 USB Serial/JTAG |
| **COM** | UART / COM | 外置 UART 桥接芯片CP2102/CH340 |
ESP-IDF 控制台默认配置为 UART 输出(`CONFIG_ESP_CONSOLE_UART_DEFAULT=y`)。
**同时连接两个口时:**
- USBJTAG口负责烧录/下载,并提供辅助串口输出
- UARTCOM口提供主要的交互式控制台用于 REPL
- macOS 下两个口都会显示为 `/dev/cu.usbmodem*``/dev/cu.usbserial-*`,用 `ls /dev/cu.usb*` 区分
- Linux 下 USBJTAG通常是 `/dev/ttyACM0`UART 通常是 `/dev/ttyUSB0`
**推荐工作流:**
```bash
# 通过 USBJTAG口烧录
idf.py -p /dev/cu.usbmodem11401 flash
# 通过 UARTCOM口打开 REPL
idf.py -p /dev/cu.usbserial-110 monitor
# 或使用任意串口工具screen、minicom、PuTTY波特率 115200
```
</details>
## 记忆
MimiClaw 把所有数据存为纯文本文件,可以直接读取和编辑:
| 文件 | 说明 |
|------|------|
| `SOUL.md` | 机器人的人设 — 编辑它来改变行为方式 |
| `USER.md` | 关于你的信息 — 姓名、偏好、语言 |
| `MEMORY.md` | 长期记忆 — 它应该一直记住的事 |
| `HEARTBEAT.md` | 待办清单 — 机器人定期检查并自主执行 |
| `cron.json` | 定时任务 — AI 创建的周期性或一次性任务 |
| `2026-02-05.md` | 每日笔记 — 今天发生了什么 |
| `tg_12345.jsonl` | 聊天记录 — 你和它的对话 |
## 工具
MimiClaw 同时支持 Anthropic 和 OpenAI 的工具调用 — LLM 在对话中可以调用工具循环执行直到任务完成ReAct 模式)。
| 工具 | 说明 |
|------|------|
| `web_search` | 通过 Tavily优先或 Brave 搜索网页,获取实时信息 |
| `get_current_time` | 通过 HTTP 获取当前日期和时间,并设置系统时钟 |
| `cron_add` | 创建定时或一次性任务LLM 自主创建 cron 任务) |
| `cron_list` | 列出所有已调度的 cron 任务 |
| `cron_remove` | 按 ID 删除 cron 任务 |
启用网页搜索可在 `mimi_secrets.h` 中设置 [Tavily API key](https://app.tavily.com/home)(优先,`MIMI_SECRET_TAVILY_KEY`),或 [Brave Search API key](https://brave.com/search/api/)`MIMI_SECRET_SEARCH_KEY`)。
## 定时任务Cron
MimiClaw 内置 cron 调度器,让 AI 可以自主安排任务。LLM 可以通过 `cron_add` 工具创建周期性任务("每 N 秒")或一次性任务("在某个时间戳")。任务触发时,消息会注入到 Agent 循环 — AI 自动醒来、处理任务并回复。
任务持久化存储在 SPIFFS`cron.json`),重启后不会丢失。典型用途:每日总结、定时提醒、定期巡检。
## 心跳Heartbeat
心跳服务会定期读取 SPIFFS 上的 `HEARTBEAT.md`,检查是否有待办事项。如果发现未完成的条目(非空行、非标题、非已勾选的 `- [x]`),就会向 Agent 循环发送提示,让 AI 自主处理。
这让 MimiClaw 变成一个主动型助理 — 把任务写入 `HEARTBEAT.md`,机器人会在下一次心跳周期自动拾取执行(默认每 30 分钟)。
## 其他功能
- **WebSocket 网关** — 端口 18789局域网内用任意 WebSocket 客户端连接
- **OTA 更新** — WiFi 远程刷固件,无需 USB
- **双核** — 网络 I/O 和 AI 处理分别跑在不同 CPU 核心
- **HTTP 代理** — CONNECT 隧道,适配受限网络
- **多提供商** — 同时支持 Anthropic (Claude) 和 OpenAI (GPT),运行时可切换
- **定时任务** — AI 可自主创建周期性和一次性任务,重启后持久保存
- **心跳服务** — 定期检查任务文件,驱动 AI 自主执行
- **工具调用** — ReAct Agent 循环,两种提供商均支持工具调用
## 开发者
技术细节在 `docs/` 文件夹:
- **[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)** — 系统设计、模块划分、任务布局、内存分配、协议、Flash 分区
- **[docs/TODO.md](docs/TODO.md)** — 功能差距和路线图
- **[docs/WIFI_ONBOARDING_AP.md](docs/WIFI_ONBOARDING_AP.md)** — 说明本地 `MimiClaw-XXXX` onboarding / 管理热点的使用方式
- **[docs/im-integration/](docs/im-integration/README.md)** — IM 通道集成指南(飞书等)
## 贡献
提交 Issue 或 Pull Request 前,请先阅读 **[CONTRIBUTING.md](CONTRIBUTING.md)**。
## 贡献者
感谢所有为 MimiClaw 做出贡献的开发者。
<a href="https://github.com/memovai/mimiclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=memovai/mimiclaw" alt="MimiClaw contributors" />
</a>
## 许可证
MIT
## 致谢
灵感来自 [OpenClaw](https://github.com/openclaw/openclaw) 和 [Nanobot](https://github.com/HKUDS/nanobot)。MimiClaw 为嵌入式硬件重新实现了核心 AI Agent 架构 — 没有 Linux没有服务器只有一颗 $5 的芯片。
## Star History
<a href="https://www.star-history.com/?repos=memovai%2Fmimiclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/image?repos=memovai/mimiclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/image?repos=memovai/mimiclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/image?repos=memovai/mimiclaw&type=date&legend=top-left" />
</picture>
</a>