【拥抱AI】详解MimiClaw上扩展飞书与GLM来改造xiaozhi-esp32的过程

【拥抱AI】详解MimiClaw上扩展飞书与GLM来改造xiaozhi-esp32的过程
本项目基于github上的开源项目MimiClaw进行改造,新增飞书通信与GLM的导入,结合xiaozhi-esp32小智机器人完成基础控制的实验。

在这里插入图片描述

📋 目录

  1. 项目概述
  2. 核心特性
  3. 工作原理
  4. 快速开始
  5. 配置说明
  6. CLI命令详解
  7. 记忆系统
  8. 工具系统
  9. 定时任务
  10. 心跳服务
  11. 其他功能
  12. 架构设计
  13. 飞书集成

项目概述

基本信息

项目说明
名称MimiClaw
硬件ESP32-S3 开发板(16MB Flash + 8MB PSRAM)
成本约 $5
功耗0.5W
运行时间24/7
许可证MIT
GitHub源项目memovai/mimiclaw
改造后的项目ZhiqiangHe/mimiclaw_esp32

技术特点

  • 纯 C 实现 - 没有 Linux,没有 Node.js,没有臃肿依赖
  • 轻量级 - 运行在拇指大小的芯片上
  • 易用性 - 通过 Telegram/飞书 发消息即可使用
  • 持久记忆 - 跨重启不会遗忘
  • 本地存储 - 所有数据存在本地 Flash

核心特性

1. 多平台支持

平台状态说明
Telegram✅ 完整支持原生支持
飞书✅ 新增支持通过小智服务端集成

2. 多 LLM 提供商

提供商模型切换方式
AnthropicClaude运行时切换
OpenAIGPT运行时切换
智谱AIGLM运行时切换

3. 工具调用

  • 🌐 网页搜索 - Brave Search API
  • 📅 定时任务 - AI 自主创建 cron 任务
  • 💾 记忆管理 - 读写长期记忆
  • 时间获取 - HTTP 获取当前时间

工作原理

消息处理流程

┌─────────────┐ │ 用户消息 │ │ (飞书/Telegram)│ └──────┬──────┘ │ ↓ ┌─────────────────────────────────┐ │ 消息接收层 │ │ - Telegram Bot API │ │ - 飞书 WebSocket (小智) │ └──────┬──────────────────────┘ │ ↓ ┌─────────────────────────────────┐ │ 消息路由层 │ │ - 统一消息格式 │ │ - 通道识别 │ └──────┬──────────────────────┘ │ ↓ ┌─────────────────────────────────┐ │ Agent 核心 (大脑) │ │ - 会话管理 │ │ - 上下文构建 │ │ - LLM 调用 │ │ - 工具编排 │ └──────┬──────────────────────┘ │ ↓ ┌─────────────────────────────────┐ │ 工具执行层 │ │ - 网页搜索 │ │ - 记忆读写 │ │ - 定时任务 │ └──────┬──────────────────────┘ │ ↓ ┌─────────────────────────────────┐ │ 回复生成层 │ │ - LLM 生成回复 │ │ - 格式化输出 │ └──────┬──────────────────────┘ │ ↓ ┌─────────────────────────────────┐ │ 消息发送层 │ │ - Telegram Bot API │ │ - 飞书 API (小智) │ └──────┬──────────────────────┘ │ ↓ ┌─────────────┐ │ 用户收到 │ └───────────┘ 

核心组件

Agent 核心(大脑)
会话管理 ├── 会话创建/切换 ├── 会话历史维护 └── 上下文窗口管理 LLM 调用层 ├── OpenAI 接口适配 ├── Anthropic Claude 接口适配 ├── 智谱AI 接口适配 ├── 模型选择与切换 └── API 密钥管理 工具调用编排 ├── 工具注册管理 ├── 工具参数解析 ├── 工具执行调度 └── 执行结果反馈 

快速开始

硬件需求

组件说明备注
ESP32-S3 开发板16MB Flash + 8MB PSRAM如小智 AI 开发板,约 ¥30
USB Type-C 数据线用于供电和烧录-
网络环境WiFi 或代理国内需要代理

软件需求

组件版本获取方式
ESP-IDFv5.5+官方文档
飞书 App ID/Secret-open.feishu.cn 获取

安装步骤

# 1. 克隆项目git clone https://github.com/memovai/mimiclaw.git cd mimiclaw # 2. 设置目标芯片 idf.py set-target esp32s3 # 3. 配置密钥(复制模板)cp main/mimi_secrets.h.example main/mimi_secrets.h # 4. 编辑配置文件# 编辑 main/mimi_secrets.h,填入你的密钥# 5. 编译 idf.py fullclean && idf.py build # 6. 烧录# 查找串口ls /dev/cu.usb* # macOSls /dev/ttyACM* # Linux# 烧录并监控 idf.py -p PORT flash monitor 

⚠️ 重要提示

USB 接口选择

  • ✅ 使用标有 USB 的接口(原生 USB Serial/JTAG)
  • ❌ 不要使用标有 COM 的接口(外部 UART 桥接)
  • 插错接口会导致烧录/监控失败

配置说明

配置层次

优先级(从高到低): 1. 运行时配置(NVS Flash) - CLI 命令设置 2. 编译时配置(mimi_secrets.h)- 编译时默认值 

配置文件

mimi_secrets.h(编译时配置)
/* WiFi 配置 */#defineMIMI_SECRET_WIFI_SSID"你的WiFi名"#defineMIMI_SECRET_WIFI_PASS"你的WiFi密码"/* Telegram Bot */#defineMIMI_SECRET_TG_TOKEN"123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"/* 飞书机器人 */#defineMIMI_SECRET_FEISHU_APP_ID"cli_xxxxxxxxxxxxxx"#defineMIMI_SECRET_FEISHU_APP_SECRET"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/* LLM 配置 */#defineMIMI_SECRET_API_KEY"sk-ant-api03-xxxxx"#defineMIMI_SECRET_MODEL"claude-opus-4-5"#defineMIMI_SECRET_MODEL_PROVIDER"anthropic"// "anthropic" | "openai" | "zhipu"/* 搜索 API(可选) */#defineMIMI_SECRET_SEARCH_KEY"tvly-dev-xxxxx"#defineMIMI_SECRET_SEARCH_PROVIDER"tavily"/* 代理配置(国内用户) */#defineMIMI_SECRET_PROXY_HOST"192.168.1.83"#defineMIMI_SECRET_PROXY_PORT"7897"#defineMIMI_SECRET_PROXY_TYPE"http"// "http" | "socks5"

CLI 命令详解

配置命令(运行时修改)

命令参数说明示例
wifi_setSSID 密码wifi_set MySSID MyPassword
set_tg_tokenBot Tokenset_tg_token 123456:ABC...
set_api_keyAPI Keyset_api_key sk-ant-api03-...
set_model_provider提供商set_model_provider openai
set_model模型名set_model gpt-4o
set_proxy主机 端口set_proxy 192.168.1.83 7897
clear_proxy-清除代理
set_search_keyAPI Keyset_search_key BSA...
config_show-查看所有配置(脱敏)
config_reset-清除 NVS,恢复编译时默认值

调试命令(系统运维)

命令说明输出示例
wifi_statusWiFi 连接状态Connected to MySSID, IP: 192.168.1.100
heap_info剩余内存Free heap: 245760 bytes
session_list列出所有会话Session 12345: 10 messages
session_clear删除会话session_clear 12345
memory_read查看记忆显示 MEMORY.md 内容
memory_write写入记忆memory_write "记住:我喜欢咖啡"
heartbeat_trigger触发心跳手动执行心跳检查
cron_start启动 cron立即启动定时任务
restart重启设备重启 ESP32

使用场景

场景 1:更换 WiFi

mimi> wifi_set NewWiFi NewPassword WiFi connecting... WiFi connected! IP: 192.168.1.100 

场景 2:切换 LLM 提供商

mimi> set_model_provider openai Provider switched to OpenAI mimi> set_model gpt-4o Model set to gpt-4o 

场景 3:配置代理

mimi> set_proxy 192.168.1.83 7897 Proxy configured: 192.168.1.83:7897 mimi> wifi_status Connected to MySSID via proxy 

记忆系统

存储结构

文件位置说明
SOUL.md/spiffs/config/机器人人设
USER.md/spiffs/config/用户信息
MEMORY.md/spiffs/memory/长期记忆
HEARTBEAT.md/spiffs/待办清单
cron.json/spiffs/定时任务
tg_12345.jsonl/spiffs/sessions/聊天记录

文件内容示例

SOUL.md(机器人人设)
I am MimiClaw, a personal AI assistant running on an ESP32-S3 microcontroller. Personality: - Helpful and friendly - Concise and to the point - Curious and eager to learn Values: - Accuracy over speed - User privacy and safety - Transparency in actions 
USER.md(用户信息)
# User Profile - Name: 张三 - Language: Chinese - Timezone: Asia/Shanghai 
MEMORY.md(长期记忆)
# Long-term Memory - 用户喜欢喝咖啡 - 用户的工作时间是 9:00-18:00 - 用户有一个 5 岁的孩子 

记忆操作

写入记忆

mimi> memory_write "记住:用户生日是 5月20日" Memory written to MEMORY.md 

读取记忆

mimi> memory_read # Long-term Memory - 用户生日是 5月20日 - 用户喜欢喝咖啡 

工具系统

工具列表

工具名功能API
web_search网页搜索Brave Search API
get_current_time获取当前时间HTTP API
cron_add创建定时任务内部 cron
cron_list列出任务内部 cron
cron_remove删除任务内部 cron

工具调用流程

用户消息 ↓ Agent 解析意图 ↓ 判断是否需要工具 ↓ 调用工具(如 web_search) ↓ 工具执行并返回结果 ↓ Agent 整合结果 ↓ 生成回复 ↓ 发送给用户 

工具示例

网页搜索

用户:今天北京天气怎么样? ↓ Agent 调用 web_search("北京天气") ↓ 返回:北京今天晴,气温 15-25℃ ↓ Agent 生成回复:北京今天天气不错,晴,气温在 15 到 25 度之间。 

定时任务

用户:每天早上 8 点提醒我喝水 ↓ Agent 调用 cron_add("0 8 * * *", "提醒用户喝水") ↓ 任务保存到 cron.json ↓ 每天 8 点自动触发 

定时任务

Cron 表达式

* * * * * * │ │ │ │ │ │ │ │ │ │ └───── 星期几 (0-6, 0=周日) │ │ │ └─────── 月份 (1-12) │ │ └───────── 日期 (1-31) │ └─────────── 小时 (0-23) └───────────── 分钟 (0-59) 

常用示例

表达式说明
0 8 * * *每天 8:00
0 */6 * * *每 6 小时
0 9 * * 1-5工作日 9:00
*/30 * * * *每 30 分钟
0 0 1 * *每月 1 号 0:00

Cron 命令

命令说明
cron_add创建定时或一次性任务
cron_list列出所有任务
cron_remove按任务 ID 删除

心跳服务

工作原理

每 30 分钟 ↓ 读取 HEARTBEAT.md ↓ 检查待办事项 ↓ 发现未完成任务 ↓ 注入到 Agent 循环 ↓ AI 自动处理 

HEARTBEAT.md 格式

# 待办清单 - [ ] 回复客户邮件 - [ ] 准备周报 - [x] 已完成:购买咖啡豆 

规则

  • - [ ] - 未完成任务,会触发 AI 处理
  • - [x] - 已完成任务,忽略
  • 空行或标题 - 忽略

使用场景

场景:定期提醒

# HEARTBEAT.md - [ ] 每周一提醒我准备周报 - [ ] 每天 9 点提醒我喝水 - [ ] 每月 1 号提醒我交房租 

效果

  • 心跳服务每 30 分钟检查一次
  • 发现未完成任务时,自动通知 AI
  • AI 会主动提醒用户

其他功能

1. WebSocket 网关

特性说明
端口18789
用途局域网内 WebSocket 客户端连接
协议WebSocket
消息格式JSON

使用场景

  • Web 界面控制
  • 第三方应用集成
  • 调试和监控

2. OTA 更新

特性说明
方式WiFi 远程刷固件
优势无需 USB 连接
安全HTTPS 传输,签名验证

更新流程

新固件上传到服务器 ↓ ESP32 检测到更新 ↓ 下载固件 ↓ 验证签名 ↓ 写入 Flash ↓ 重启 

3. 双核架构

核心用途优先级
Core 0网络 I/O
Core 1AI 处理

优势

  • 网络和 AI 处理并行
  • 提高响应速度
  • 避免阻塞

4. HTTP 代理

特性说明
协议HTTP CONNECT 隧道
类型HTTP / SOCKS5
用途适配受限网络

架构设计

模块树状图

mimiclaw/ │ ├── 🎯 核心应用层 │ ├── 📍 入口与初始化 │ │ ├── app_main() - 程序入口 │ │ ├── 系统初始化 - WiFi、NVS、SPIFFS │ │ └── 任务调度 - FreeRTOS 任务创建 │ │ │ ├── 🤖 Agent 核心 (核心大脑) │ │ ├── 会话管理 │ │ ├── LLM 调用层 │ │ ├── 工具调用编排 │ │ └── 消息处理循环 │ │ │ └── 🛠️ 工具模块 │ ├── 内置工具 │ └── 自定义工具扩展点 │ ├── 📡 通信层 │ ├── 📱 Telegram 客户端 │ ├── 📱 飞书客户端 │ └── 🌐 网络基础层 │ ├── 💾 存储与记忆层 │ ├── 📝 长期记忆 │ ├── ⚙️ 配置管理 │ └── 💾 会话持久化 │ ├── 🖥️ 用户交互层 │ ├── ⌨️ 串口 CLI │ └── 💬 消息路由 │ ├── 🏗️ 系统服务层 │ ├── ⏰ 定时任务 │ ├── 📊 系统监控 │ └── 🔄 电源管理 │ └── 📁 数据文件 ├── 📄 spiffs_data/ └── 🔧 配置模板 

核心模块详解

1. Agent 核心
子模块功能关键 API
会话管理维护多轮对话上下文session_create(), session_switch()
LLM 调用层与 OpenAI/Claude/智谱通信llm_call(), llm_set_provider()
工具编排解析 Function Calling 并执行工具tool_register(), tool_execute()
消息循环主事件循环agent_feed_message()
2. 通信层
子模块功能关键流程
Bot API 封装调用 Telegram/飞书 Bot APIHTTPS → JSON → 消息对象
消息转换协议适配Telegram/飞书格式 ↔ 内部格式
连接管理保持在线轮询 / WebSocket
3. 存储与记忆层
子模块功能存储位置
长期记忆MEMORY.md 管理SPIFFS 文件系统
配置管理NVS 键值存储Flash NVS 分区
会话持久化会话历史保存RAM + Flash 缓存
4. 串口 CLI
命令类型示例命令功能
配置命令wifi_set, set_api_key修改运行时配置
调试命令heap_info, session_list查看系统状态
管理命令restart, memory_write系统管理

飞书集成

集成架构

┌─────────────┐ │ 飞书用户 │ └──────┬──────┘ │ ↓ ┌─────────────────────────────────┐ │ 飞书开放平台 │ │ - 消息事件订阅 │ │ - Bot API │ └──────┬──────────────────────┘ │ ↓ ┌─────────────────────────────────┐ │ 小智服务端 │ │ - 飞书 SDK 集成 │ │ - WebSocket 服务 │ │ - 消息转发 │ └──────┬──────────────────────┘ │ WebSocket ↓ ┌─────────────────────────────────┐ │ ESP32 (MimiClaw) │ │ - WebSocket 客户端 │ │ - Agent 核心 │ │ - 消息处理 │ └─────────────────────────────────┘ 

消息处理流程

1. 飞书消息接收
飞书 SDK (WebSocket) ↓ 收到消息事件 ↓ lark.JSON.marshal(data) ↓ 转换为字典 ↓ self._message_handler(event_dict) ↓ 传递给集成层 
2. 飞书集成处理
_handle_feishu_message(event_dict) ↓ 提取消息内容 ↓ 遍历所有连接的客户端 ↓ self.forwarder.forward_to_client(message, client_handler) ↓ 转发消息 
3. 消息转换
forward_to_client(message, client_handler) ↓ self.converter.feishu_to_client(feishu_message) ↓ 检查是否是飞书事件消息 ↓ 提取 message、sender 等信息 ↓ 解析消息内容(content 字段是 JSON 字符串) ↓ 转换为内部格式 ↓ 发送到 Agent 

WebSocket 协议

连接 URI

ws://127.0.0.1:28000/xiaozhi/v1/?client=mimiclaw 

消息格式

{"type":"message","content":"用户消息内容","chat_id":"oc_xxxxxxxxx","sender_id":"ou_xxxxxxxxx"}

事件类型

类型说明
hello握手消息
welcome欢迎消息
message用户消息
responseAI 回复
ping心跳检测
pong心跳响应

优势对比

特性直接接入飞书 API通过小智服务端
HTTPS 请求复杂度
Token 管理需要自己实现服务端处理
事件订阅需要 Webhook服务端处理
ESP32 资源占用
维护成本

总结

项目亮点

轻量级 - 纯 C 实现,无臃肿依赖
多平台 - 支持 Telegram 和飞书
多 LLM - 支持 Anthropic、OpenAI、智谱AI
工具调用 - ReAct Agent 模式
持久记忆 - 本地存储,跨重启不丢失
定时任务 - AI 自主创建和管理
心跳服务 - 主动型助理
OTA 更新 - 远程固件升级
双核架构 - 网络和 AI 并行处理

技术栈

层级技术
硬件ESP32-S3 (Xtensa LX7)
固件ESP-IDF v5.5+
语言C (FreeRTOS)
通信WiFi、HTTP、WebSocket
存储SPIFFS、NVS
LLMAnthropic、OpenAI、智谱AI
搜索Tavity、Brave Search API

适用场景

  • 🏠 家庭助理 - 智能家居控制
  • 💼 办公助理 - 日程管理、信息查询
  • 🎓 学习助手 - 知识问答、笔记整理
  • 🤖 开发助手 - 代码生成、技术问答
  • 🎮 娱乐机器人 - 聊天、游戏互动

附录

相关链接

开发者资源


文档版本: 1.0
最后更新: 2026-03-05

Read more

从0到1彻底掌握Trae:手把手带你实战开发AI Chatbot,提升开发效率的必备指南!

从0到1彻底掌握Trae:手把手带你实战开发AI Chatbot,提升开发效率的必备指南!

我正在参加Trae「超级体验官」创意实践征文,本文所使用的 Trae 免费下载链接:www.trae.ai/?utm_source… 暴富技巧 比特鹰作为国内领先的 AI+Web3 领域企业,团队充满年轻活力 ——95% 成员为 00 后,不仅技术氛围浓厚,还会为每位成员量身定制成长规划;在职业发展层面,公司前景广阔,提供餐饮补贴、租房补贴、年底奖金、股票期权及额外假期等多重福利,助力员工在 35 岁前实现财富自由 目前公司正招聘海外运营、前端、后端、智能合约、AI 开发、HR 等岗位,有意向者可加微信联系: ai_lianqq 前言 大家好,我是小Q,字节跳动近期推出了一款 AI IDE—— Trae,

Lada v0.11.0最新版更新 本地一键启动包教程:AI去马赛克神器实测 支持 Nvidia显卡和Intel Arc GPU

Lada v0.11.0最新版更新 本地一键启动包教程:AI去马赛克神器实测 支持 Nvidia显卡和Intel Arc GPU

Lada v0.11.0最新版更新 本地一键启动包教程:AI去马赛克神器实测 Lada去马赛克工具、AI视频去马赛克、本地AI视频修复、一键启动AI工具、视频像素恢复神器 下载地址:https://pan.quark.cn/s/7819816715d6?pwd=Pnbx 之前在网上刷视频的时候,经常会遇到一个特别让人崩溃的问题——关键画面总被打上厚厚的马赛克。 想认真看内容,却只能看到一堆像素块,体验直接拉满折磨值。 对于图片马赛克 可以参考我的这篇文章来去除 【AI图片编辑模型】Qwen-Image-Edit-2511 十字鱼一键整合包分享|本地无限制生成 ai换装必备 4G显存可用 我前前后后试过不少所谓的去码工具,不是效果拉胯,就是要上传视频到云端处理,说实话这种私密视频谁敢随便传?直到最近发现了这个本地神器——Lada 本地一键启动包,才算是真正解决问题。 它直接在电脑本地跑AI模型,不联网、不上传、不限制,用起来相当舒服。 下载地址:https://pan.

AI 概念大扒皮:从 LLM 到 Agent,一次说清楚

🤖 AI 概念大扒皮:从 LLM 到 Agent,一次说清楚 这些词你认识几个?不管认识多少,今天都给你扒个底朝天。所谓智能体,其实是由所有"不需要智能"的部分拼凑而成的;那些花里胡哨的新概念,大多不过是新瓶装旧酒。 涉及关键词:LLMPromptContextMemoryAgentRAGFunction CallingMCPSkillSub-Agent 💡 先清空大脑 忘掉你已知的一切,跟着故事线走——你会发现这些概念都是从同一个起点,一步步生长出来的。 🧠 第一步:语言模型长大了 一切混乱的起点,是这个古老的东西——语言模型。早期的小模型基本上是个智障,只会简单的文字接龙。但随着参数规模不断膨胀,在某个临界点,它突然"涌现"出了真正的智能。 为了和之前的小模型做区分,我们在前面加了个"大"字: 🆕 词汇① 大语言模型(LLM) LLM