Files
mimiclaw/AGENTS.md
Z.To 46e46b0a13
Some checks failed
Build / idf-build (push) Has been cancelled
增加项目注释
2026-03-31 17:56:51 +08:00

5.2 KiB
Raw Blame History

MimiClaw AI Agent - 开发指南

项目概述

MimiClaw 是一个运行在 ESP32-S3 上的 AI 助手,使用纯 C 语言编写。用户通过 Telegram 与之交互,设备连接 WiFi 后,将消息传递给 LLM大语言模型进行处理并支持工具调用。

项目结构

mimiclaw/
├── main/                  # 主应用程序代码
│   ├── agent/             # 代理循环(核心逻辑)
│   │   ├── agent_loop.c   # 主代理循环,处理消息和工具调用
│   │   └── context_builder.c # 构建上下文(系统提示、记忆等)
│   ├── llm/               # LLM 代理
│   │   ├── llm_proxy.c    # 处理与 LLM API 的通信
│   │   └── llm_proxy.h    # LLM 代理的头文件
│   ├── cli/               # 串口命令行界面
│   │   └── serial_cli.c   # 处理运行时配置命令
│   ├── channels/          # 输入/输出通道
│   │   ├── telegram/      # Telegram 机器人集成
│   │   └── feishu/        # 飞书机器人集成
│   ├── tools/             # LLM 可调用的工具
│   ├── memory/            # 记忆和会话管理
│   ├── proxy/             # HTTP 代理支持
│   ├── cron/              # 定时任务调度
│   ├── heartbeat/         # 心跳服务
│   ├── gateway/           # WebSocket 网关
│   ├── onboard/           # WiFi 配置门户
│   ├── skills/            # 技能加载器
│   ├── mimi_config.h      # 全局配置定义
│   ├── mimi_secrets.h     # 构建时密钥(需用户创建)
│   └── mimi_secrets.h.example # 密钥模板
├── docs/                  # 文档
├── scripts/               # 构建和设置脚本
├── CMakeLists.txt         # 顶层 CMake 文件
└── sdkconfig.defaults     # ESP-IDF 默认配置

核心系统

1. 配置系统

  • 构建时配置:在 main/mimi_secrets.h 中定义(从 .example 复制)
  • 运行时配置:通过串口 CLI 命令设置,存储在 NVS 中,优先级高于构建时配置
  • 关键配置项
    • MIMI_SECRET_WIFI_SSID/PASSWiFi 凭证
    • MIMI_SECRET_TG_TOKENTelegram 机器人令牌
    • MIMI_SECRET_API_KEYLLM API 密钥
    • MIMI_SECRET_MODEL_PROVIDER:模型提供商("anthropic" 或 "openai"
    • MIMI_SECRET_MODEL:模型名称

2. LLM 集成

  • 当前支持Anthropic (Claude) 和 OpenAI (GPT)
  • 提供商切换:通过 MIMI_SECRET_MODEL_PROVIDER 或 CLI 命令 set_model_provider <provider>
  • 代码路径main/llm/llm_proxy.c
  • 关键函数
    • llm_proxy_init():初始化,从 NVS 加载配置
    • llm_chat_tools():发送聊天请求,支持工具调用
    • provider_is_openai():检查是否为 OpenAI 提供商

3. 代理循环

  • 代码路径main/agent/agent_loop.c
  • 工作流程
    1. 接收消息
    2. 构建上下文(系统提示、记忆、会话历史)
    3. 调用 LLM支持工具调用
    4. 处理工具调用结果
    5. 返回响应

4. 工具系统

  • 工具在 main/tools/ 中定义
  • 工具注册在 tool_registry.c
  • 支持的工具:web_searchget_current_timecron_add/list/remove

构建和烧录

前提条件

  • ESP-IDF v5.5+ 已安装
  • ESP32-S3 开发板16MB flash, 8MB PSRAM

步骤

# 设置目标芯片
idf.py set-target esp32s3

# 配置(首次需要)
cp main/mimi_secrets.h.example main/mimi_secrets.h
# 编辑 mimi_secrets.h 填写 WiFi、Telegram、LLM 密钥

# 清理构建(修改配置后必须执行)
idf.py fullclean && idf.py build

# 烧录(替换 PORT 为实际串口)
idf.py -p PORT flash monitor

串口 CLI 命令

连接到 UARTCOM端口后可用的配置命令

wifi_set <SSID> <Password>   # 设置 WiFi 凭证
set_tg_token <Token>         # 设置 Telegram 机器人令牌
set_api_key <Key>            # 设置 LLM API 密钥
set_model_provider <Provider># 设置提供商anthropic/openai
set_model <Model>            # 设置模型名称
config_show                  # 显示当前配置(脱敏)
config_reset                 # 重置为构建时配置

开发注意事项

  1. 内存限制ESP32-S3 内存有限,使用 MALLOC_CAP_SPIRAM 分配大内存
  2. 堆栈大小:任务堆栈在 mimi_config.h 中定义
  3. 日志:使用 ESP_LOG 宏,标签在每个文件中定义
  4. 错误处理:使用 esp_err_t 返回码
  5. JSON 处理:使用 cJSON 库

调试技巧

  • 查看日志:idf.py -p PORT monitor
  • 内存状态:串口 CLI 命令 heap_info
  • 会话列表:session_list
  • 记忆内容:memory_read

扩展指南

添加新的 LLM 提供商

  1. llm_proxy.c 中添加提供商检查函数
  2. 添加新的 API URL 和主机名
  3. 如需要,添加特定的请求头和消息格式转换
  4. 更新 mimi_config.h 中的默认配置

添加新工具

  1. tools/ 目录创建新文件
  2. 实现工具函数
  3. tool_registry.c 中注册工具
  4. 定义工具的 JSON Schema

添加新通道

  1. channels/ 目录创建新子目录
  2. 实现通道初始化和消息收发
  3. mimi.c 中初始化新通道