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

143 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/PASS`WiFi 凭证
- `MIMI_SECRET_TG_TOKEN`Telegram 机器人令牌
- `MIMI_SECRET_API_KEY`LLM 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_search``get_current_time``cron_add/list/remove`
## 构建和烧录
### 前提条件
- ESP-IDF v5.5+ 已安装
- ESP32-S3 开发板16MB flash, 8MB PSRAM
### 步骤
```bash
# 设置目标芯片
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` 中初始化新通道