1. 项目概述:当AI遇上4美元的微控制器
去年冬天,我在整理抽屉时翻出一块2018年购买的ESP-WROOM-32开发板。这块售价仅4美元的微控制器,内存仅有520KB SRAM,其中可用空间不足120KB。就在同一天,我看到Ziboyan Wang开源的MimiClaw项目——一个在ESP32-S3上运行的AI智能体,需要8MB PSRAM和付费API密钥。这两件事碰撞出了一个疯狂的想法:能否在仅120KB内存的ESP32上,运行一个完整的AI智能体?
经过三个月的迭代,FemtoClaw诞生了。这个微型AI智能体不仅支持Telegram对话、网络搜索、长期记忆等完整功能,还能在本地Ollama/LM Studio模型上运行。最令人惊讶的是,所有这一切都运行在一块价格低于一杯咖啡的硬件上。
提示:ESP-WROOM-32与ESP32-S3的关键差异在于内存架构。前者仅有内部SRAM,后者额外配备8MB PSRAM,这使得内存密集型应用(如TLS连接)在S3上更容易实现。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构设计:120KB内存的极限分配
2.1 双核任务分工策略
在FreeRTOS环境下,我将任务精确分配到ESP32的双核处理器:
-
核心0(I/O核心):
- 处理WiFi连接状态机(占用量:18KB)
- 运行Telegram长轮询任务(峰值内存:64KB)
- 管理WebSocket服务器(需配置TLS缓冲区:32KB)
- 处理串行CLI输入(8KB环形缓冲区)
-
核心1(AI核心):
- 运行智能体主循环(基础占用:24KB)
- 维护消息队列(入站/出站各16KB)
- 执行ReAct推理循环(动态内存:32KB峰值)
通过xTaskCreatePinnedToCore()将任务绑定到指定核心,避免了核间切换的开销。实测显示,这种分离架构比混合调度节省约23%的内存碎片。
2.2 内存优化关键技术
在femto_config.h中定义了关键内存参数:
c复制// ESP32无PSRAM时的保守配置
#if !CONFIG_SPIRAM
#define FEMTO_LLM_STREAM_BUF_SIZE (8 * 1024) // LLM响应缓冲区
#def
