【拥抱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

Anything to RealCharacters 2.5D转真人引擎:AR应用虚拟角色写实化预处理

Anything to RealCharacters 2.5D转真人引擎:AR应用虚拟角色写实化预处理 1. 这不是“换脸”,而是让二次元角色真正“活”在现实里 你有没有试过把游戏里那个陪伴你通关的2.5D角色,或者社交平台收藏夹里最心动的动漫立绘,直接变成一张能放进手机相册、发朋友圈、甚至嵌入AR应用里的高清真人照片?不是贴图、不是滤镜、不是简单磨皮——而是从骨骼结构、皮肤微纹理、光影反射逻辑,到眼神神态的完整重建。 Anything to RealCharacters 2.5D转真人引擎干的就是这件事。它不追求“像真人”,而是让输入图像中的人物,在物理可信的维度上,真正符合真实世界的人体光学规律和解剖常识。这对AR内容创作者、虚拟偶像运营方、游戏本地化团队,甚至教育类数字人项目来说,意味着一个关键环节的自动化突破:虚拟角色的写实化预处理,终于可以脱离专业美术外包,本地一键完成。 它专为RTX 4090(24G显存)设计,不是“能跑”,而是“

Qwen3-TTS-Tokenizer-12Hz应用场景:AR眼镜实时语音交互token流低延迟传输

Qwen3-TTS-Tokenizer-12Hz应用场景:AR眼镜实时语音交互token流低延迟传输 1. AR眼镜语音交互的技术挑战 AR眼镜作为下一代人机交互终端,正面临着一个核心难题:如何在有限的硬件资源下实现高质量的实时语音交互。传统音频传输方案存在几个关键痛点: 带宽瓶颈问题:高清音频流需要占用大量带宽,在无线传输环境下容易造成延迟和卡顿。一段1分钟的16kHz采样音频就需要近2MB的传输量,这对于AR眼镜的电池续航和网络稳定性都是巨大挑战。 实时性要求:语音交互需要极低的端到端延迟,理想情况下应该控制在100毫秒以内。传统编解码器由于计算复杂,往往难以在资源受限的AR设备上实现这样的性能。 音质保真度:在压缩传输过程中,语音质量容易受损,影响语音识别准确率和用户体验。特别是在嘈杂环境中,低质量的音频会让AR眼镜的语音助手变得"耳背"。 这些挑战催生了对新一代音频编解码技术的需求,而Qwen3-TTS-Tokenizer-12Hz正是为此而生。 2. Qwen3-TTS-Tokenizer-12Hz技术原理 2.1 超低采样率编码 Qwen3-TTS-T

基于开源鸿蒙(OpenHarmony)的【智能家居综合应用】系统

基于开源鸿蒙(OpenHarmony)的【智能家居综合应用】系统

基于开源鸿蒙OpenHarmony的智能家居综合应用系统 * 1. 智能安防与门禁系统 * 1) 系统概述 * 2) 系统架构 * 3)关键功能实现 * 4)安全策略 * 5)总结 * 2.环境智能调节系统 * 1)场景描述 * 2)技术实现 * 3)总结 * 3.健康管理与睡眠监测 * 1)业务场景描述 * 2)技术实现方案 * 3 )总结 1. 智能安防与门禁系统 1) 系统概述 本智能安防与门禁系统是基于开源鸿蒙(OpenHarmony)操作系统设计的,旨在为用户提供一套高度集成、智能化的家庭安全防护解决方案。通过整合智能门锁、监控摄像头、门窗传感器等多种安防设备,结合智能手机或智能音箱等控制终端,实现远程监控、身份识别、异常警报等功能,全面提升家庭居住的安全性和便利性。 2) 系统架构 1. 设备层

FPGA烧写硬件连接详解:Vivado固化程序操作指南

FPGA固化实战指南:从JTAG连接到QSPI烧写全解析 你有没有遇到过这样的场景? 辛辛苦苦调试好的FPGA设计,一切功能正常——结果一拔掉JTAG线、断电重启,板子直接“罢工”,什么信号都没了。 别慌,这不是你的逻辑有问题,而是 程序没固化 。 在嵌入式系统开发中,FPGA和MCU最大的区别之一就是:它是个“健忘”的家伙。每次上电都得重新加载配置数据才能工作。要想实现“上电即运行”,就必须把比特流(bitstream)写进非易失性存储器里,这个过程,我们俗称“ 烧写 ”或“ 固化程序 ”。 而Xilinx的Vivado工具链虽然强大,但很多工程师卡在最后一步——明明流程走完了,Flash也写了,可为什么启动失败? 问题往往出在两个地方: 硬件连接不规范 ,或者 操作步骤理解有偏差 。 今天我们就来一次讲透:如何正确完成 vivado固化程序烧写步骤 ,让FPGA真正具备自主启动能力。 从调试到部署:为什么JTAG不能“一劳永逸”? 我们在开发阶段最常用的下载方式是JTAG。通过USB-JTAG下载器(比如Digilent HS2、