把 AI Agent 塞进一颗 ¥5 的芯片:MimiClaw 多平台移植实战

一个纯 C 语言实现的 AI Agent,跑在 ESP32 上,通过 QQ 和飞书跟你聊天,还能搜网页、控 GPIO、记住你说过的话。我把它从一块板子移植到了四块,最便宜的那颗芯片只要 5 块钱。


故事的开始

2026 年初,我在 GitHub 上发现了一个叫 MimiClaw 的开源项目——由 memovai 开发的 ESP32-S3 AI Agent 固件。它用纯 C + FreeRTOS 实现了一个完整的 AI 助手:能接收消息、调用大模型 API、执行多轮工具调用(ReAct 模式)、把对话记忆写到 Flash 上。

我一看就觉得这东西有意思——不是跑在云上的 AI,不是 Python 脚本,而是真正跑在一颗微控制器上的 Agent。没有操作系统,没有容器,就是裸金属上的 C 代码和 FreeRTOS 任务。

但原始项目有几个限制:

  • 只支持 ESP32-S3 一个平台
  • 通信通道是 Telegram(国内需要代理才能用)
  • LLM 用的是 Anthropic Claude API(同样需要代理)

我手边有好几块不同型号的 ESP32 开发板,脑子里冒出一个想法:能不能让同一份代码跑在所有 ESP32 芯片上?

然后就是两周的折腾。


做了什么

一份代码,四个芯片

最终的成果是:同一份 C 代码,通过条件编译和平台配置文件,成功运行在四个 ESP32 芯片平台上:

平台 CPU 内存 定位 验证状态
ESP32-P4 双核 RISC-V 400MHz 32MB PSRAM 旗舰 ✅ 全功能通过
ESP32-S3 双核 Xtensa LX7 240MHz 8MB PSRAM 标准 ✅ 原始平台
ESP32 双核 Xtensa LX6 240MHz 4MB PSRAM 经济 ✅ 全功能通过
ESP32-C3 单核 RISC-V 160MHz 无 PSRAM,仅 400KB 极限 ✅ 基础功能通过

四个平台都已实际上板验证,QQ / 飞书消息收发 + LLM 工具调用 + 网页搜索全流程跑通。

中国网络环境适配

  • Telegram → QQ:完整实现了 QQ Bot(WebSocket 网关 + REST API,~900 行 C 代码),支持单聊和群聊
  • 飞书 Bot:WebSocket 长连接模式,无需公网 IP
  • Anthropic API → 阿里千问 DashScope:OpenAI 兼容接口,无需代理
  • 时区、时间源:全部适配为国内可用

内存优化:在 400KB 里做 Agent

ESP32-C3 的移植是最有挑战性的。这颗芯片只有 400KB SRAM,没有外部 PSRAM,WiFi 协议栈初始化完就剩 254KB,留给应用的只有约 64KB。

在这个约束下跑一个需要 TLS 连接、JSON 解析、多轮对话的 AI Agent,每一个 byte 都要精打细算:

  • 所有大于 256 字节的栈局部变量改为堆分配
  • LLM 请求序列化失败时自动删掉 tools 字段重试(省 4-8KB)
  • 飞书通道在 C3 上自动禁用(省 18KB)
  • 会话历史从 20 条缩到 2 条
  • TLS 缓冲区从 16KB 缩到 8KB(刚好够 DashScope 的 TLS record)

最终效果:C3 上简单对话完美运行,需要搜索的复杂问题也能在 3 轮工具调用内完成。


它能做什么

MimiClaw 不只是个"聊天机器人",它是一个有记忆、有工具、能自主行动的 Agent:

🧠 持久记忆

对话记忆写到 Flash 上的 Markdown 文件里。你告诉它你的名字,下次开机它还记得。长期记忆(MEMORY.md)+ 每日笔记(daily/YYYY-MM-DD.md)+ 人格定义(SOUL.md)——全部可读可编辑。

🔧 12 个内置工具

  • web_search — 搜索互联网(Tavily / Brave)
  • get_current_time — 获取当前时间
  • read_file / write_file / edit_file / list_dir — 文件操作
  • gpio_write / gpio_read / gpio_read_all — GPIO 控制(点灯、读开关)
  • cron_add / cron_list / cron_remove — 定时任务

LLM 通过 ReAct 模式自主决定使用哪些工具,最多 10 轮迭代。

💬 多通道通信

  • QQ:单聊 + 群聊 @机器人
  • 飞书:WebSocket 长连接,无需公网 IP
  • WebSocket:本地端口 18789,可接入自定义前端
  • 串口 CLI:直接在终端调试

🎯 可扩展技能系统

技能以 Markdown 文件形式存储在 SPIFFS 上,LLM 会根据用户请求自动加载对应技能指令。你甚至可以通过对话让 AI 自己创建新技能。

📡 WiFi 配网门户

不想硬编码 WiFi 密码?设备会自动创建 MimiClaw-XXXX 热点,手机连上后在网页上配置所有参数。


架构简述

QQ / 飞书 / WebSocket
        │
    ┌───▼───────────┐
    │  Inbound Queue │ ← FreeRTOS xQueue
    └───┬───────────┘
        │
    ┌───▼───────────────────────┐
    │    Agent Loop (Core 1)     │
    │                            │
    │  Context Builder           │
    │  → System Prompt           │
    │    (SOUL.md + MEMORY.md    │
    │     + Skills + History)    │
    │                            │
    │  ReAct Loop (max 10 iter)  │
    │  → LLM API Call            │
    │  → Tool Execution          │
    │  → Repeat until done       │
    └───┬───────────────────────┘
        │
    ┌───▼───────────┐
    │ Outbound Queue │
    └───┬───────────┘
        │
    QQ / 飞书 / WebSocket

全部用 C 实现,没有第三方框架,核心依赖只有 ESP-IDF 自带的组件(esp_http_client、esp_websocket_client、cJSON、mbedTLS)。


移植过程中的关键设计

四级平台宏

#if defined(CONFIG_IDF_TARGET_ESP32C3)
  #define MIMI_HAS_PSRAM    0
  #define MIMI_DUAL_CORE    0
  #define MIMI_AGENT_STACK  (12 * 1024)
#elif defined(CONFIG_IDF_TARGET_ESP32P4)
  #define MIMI_HAS_PSRAM    1
  #define MIMI_DUAL_CORE    1
  #define MIMI_AGENT_STACK  (32 * 1024)
// ... ESP32, ESP32-S3
#endif

一个 mimi_config.h 搞定所有平台差异,核心业务逻辑(agent_loop、memory_store、session_mgr 等)完全不需要修改。

可移植的 PSRAM 分配

#if MIMI_HAS_PSRAM
  #define MIMI_PSRAM_CALLOC(n, sz)  heap_caps_calloc(n, sz, MALLOC_CAP_SPIRAM)
#else
  #define MIMI_PSRAM_CALLOC(n, sz)  calloc(n, sz)
#endif

有 PSRAM 用 PSRAM,没有就用内部 SRAM,调用方完全无感。

ESP32-P4 的芯片版本坑

P4 是最新的 ESP32 芯片,我用的模组(JC1060P470C_I_W_Y)硬件版本是 v1.3,但 ESP-IDF v5.5 默认编译的 bootloader 要求 v3.1+。解决方案是在 sdkconfig 里加两行:

CONFIG_ESP32P4_SELECTS_REV_LESS_V3=y
CONFIG_ESP32P4_REV_MIN_100=y

这个坑花了不少时间排查,因为 P4 的 v1.x 和 v3.x 在硬件上有巨大差异,是互斥的。


快速体验

如果你手边有任意一块 ESP32 开发板,5 分钟就能跑起来:

# 1. 克隆项目
git clone https://github.com/user/mimiclaw-multiplatform.git
cd mimiclaw

# 2. 配置密钥(最少只需 WiFi + LLM API Key)
cp main/mimi_secrets.h.example main/mimi_secrets.h
# 编辑 mimi_secrets.h,填入你的 WiFi 和 API Key

# 3. 编译烧录(以 ESP32-S3 为例)
idf.py set-target esp32s3
idf.py build
idf.py -p /dev/ttyUSB0 flash monitor

详细的配置指南(包括 QQ Bot、飞书 Bot、搜索 API 的注册步骤)见项目 README。


未来可能的方向

这个项目让我看到了一些有趣的可能性:

🏠 真正的本地智能家居中枢

MimiClaw 已经能控 GPIO、有定时任务、有持久记忆。加上温湿度传感器、继电器、红外发射器,它就是一个通过 QQ 聊天控制的智能家居中枢——而且数据全部在本地,不经过任何云端。

🤖 多 Agent 协作

多块 ESP32 通过 WebSocket 互联,每块负责不同区域或功能,形成 Agent 网络。一个 Agent 负责客厅,一个负责卧室,它们之间可以协调行动。

📷 多模态扩展

ESP32-S3 和 P4 都支持摄像头接口。加上图像识别能力(本地或云端),MimiClaw 可以"看"到环境,而不仅仅是"听"文字。

🎤 语音交互

加上 I2S 麦克风和扬声器,结合语音识别 API,可以实现全语音交互——一个真正的桌面 AI 助手。

🔌 工业 / 农业场景

ESP32 的功耗极低(深度睡眠 < 10μA),配合太阳能供电,可以部署在户外。想象一个能联网、能思考、能自主决策的环境监测节点。

🧩 MCP 协议接入

未来如果实现 MCP(Model Context Protocol)客户端,MimiClaw 可以直接对接各种外部工具和数据源,成为物理世界的 AI 接口。


上游致谢与项目关系

本项目是基于 memovai/mimiclaw(MIT License)的多平台移植版本。原始项目由 memovai 创建,实现了在 ESP32-S3 上运行 AI Agent 的核心架构。

本版本的改动:

  • 从 ESP32-S3 单平台扩展到 ESP32-P4 / S3 / ESP32 / C3 四平台
  • 将 Telegram 通道替换为 QQ 通道
  • 增加阿里千问 DashScope API 支持
  • 大量内存优化(尤其是 C3 平台的极限适配)
  • 中国网络环境全面适配

核心架构零改动的模块(体现原始项目的优秀设计):
WiFi 管理、记忆存储、会话管理、WebSocket 网关、HTTP 代理、OTA 更新、技能加载、心跳服务、文件工具、GPIO 工具——这些模块在四个平台上一行代码都不需要改。


参与贡献

这个项目还有很多可以做的事情:

  • 新平台移植:ESP32-C6、ESP32-H2 等新芯片
  • 新通信通道:微信、钉钉、Discord
  • 新工具:I2C/SPI 传感器读取、蓝牙扫描、红外控制
  • 语音交互:I2S 麦克风 + 语音识别
  • 多模态:摄像头 + 图像识别
  • MCP 协议:接入标准化的 AI 工具生态
  • 更好的前端:配网页面美化、WebSocket 前端 UI

如果你对嵌入式 AI、ESP32 开发、或者"在极端约束下做有趣的事情"感兴趣,欢迎:

  • ⭐ Star 项目
  • 🐛 提 Issue 报 bug 或提需求
  • 🔧 提 PR 贡献代码

项目地址:Gitee- MimiClaw 多平台移植版


写于 2026 年 4 月 3 日,ESP32-P4 全功能验证通过的那个晚上。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐