feat: 添加编译时模块开关配置
通过 sdkconfig.defaults 选择性启用/禁用模块,减少固件体积: 新增模块开关: - CONFIG_MIMI_CHAN_TELEGRAM (默认 n) - CONFIG_MIMI_CHAN_FEISHU (默认 y) - CONFIG_MIMI_TOOL_WEB_SEARCH (默认 y) - CONFIG_MIMI_TOOL_GPIO (默认 n) - CONFIG_MIMI_WS_SERVER (默认 y) - CONFIG_MIMI_WIFI_ONBOARD (默认 y) - CONFIG_MIMI_OTA (默认 n) 技术实现: - CMakeLists.txt 条件编译源文件 - 头文件使用 static inline stub - CLI 命令和工具注册也支持条件编译 消除 Telegram 未配置时的 5 秒轮询警告日志
This commit is contained in:
76
AGENTS.md
76
AGENTS.md
@@ -2,7 +2,7 @@
|
||||
|
||||
## 项目概述
|
||||
|
||||
MimiClaw 是一个运行在 ESP32-S3 上的 AI 助手,使用纯 C 语言编写。用户通过 Telegram 与之交互,设备连接 WiFi 后,将消息传递给 LLM(大语言模型)进行处理,并支持工具调用。
|
||||
MimiClaw 是一个运行在 ESP32-S3 上的 AI 助手,使用纯 C 语言编写。用户通过 Telegram 或飞书与设备交互,设备连接 WiFi 后,将消息传递给 LLM(大语言模型)进行处理,并支持工具调用。
|
||||
|
||||
## 项目结构
|
||||
|
||||
@@ -14,20 +14,21 @@ mimiclaw/
|
||||
│ │ └── context_builder.c # 构建上下文(系统提示、记忆等)
|
||||
│ ├── llm/ # LLM 代理
|
||||
│ │ ├── llm_proxy.c # 处理与 LLM API 的通信
|
||||
│ │ └── llm_proxy.h # LLM 代理的头文件
|
||||
│ │ └── llm_provider.c # 多提供商支持(Anthropic/OpenAI/硅基流动/火山引擎)
|
||||
│ ├── cli/ # 串口命令行界面
|
||||
│ │ └── serial_cli.c # 处理运行时配置命令
|
||||
│ ├── channels/ # 输入/输出通道
|
||||
│ │ ├── telegram/ # Telegram 机器人集成
|
||||
│ │ └── feishu/ # 飞书机器人集成
|
||||
│ │ ├── telegram/ # Telegram 机器人集成(可选)
|
||||
│ │ └── feishu/ # 飞书机器人集成(可选)
|
||||
│ ├── tools/ # LLM 可调用的工具
|
||||
│ ├── memory/ # 记忆和会话管理
|
||||
│ ├── proxy/ # HTTP 代理支持
|
||||
│ ├── proxy/ # HTTP/SOCKS5 代理支持
|
||||
│ ├── cron/ # 定时任务调度
|
||||
│ ├── heartbeat/ # 心跳服务
|
||||
│ ├── gateway/ # WebSocket 网关
|
||||
│ ├── onboard/ # WiFi 配置门户
|
||||
│ ├── onboard/ # WiFi 配置门户(Captive Portal)
|
||||
│ ├── skills/ # 技能加载器
|
||||
│ ├── bus/ # 消息总线(连接通道和代理循环)
|
||||
│ ├── mimi_config.h # 全局配置定义
|
||||
│ ├── mimi_secrets.h # 构建时密钥(需用户创建)
|
||||
│ └── mimi_secrets.h.example # 密钥模板
|
||||
@@ -72,6 +73,62 @@ mimiclaw/
|
||||
- 工具注册在 `tool_registry.c`
|
||||
- 支持的工具:`web_search`、`get_current_time`、`cron_add/list/remove`
|
||||
|
||||
## 模块配置系统
|
||||
|
||||
MimiClaw 支持**编译时模块开关**,可以禁用不需要的模块以减少固件体积和内存占用。
|
||||
|
||||
### 可配置模块
|
||||
|
||||
| 模块 | 配置项 | 默认 | 说明 |
|
||||
|------|--------|------|------|
|
||||
| Telegram | `CONFIG_MIMI_CHAN_TELEGRAM` | n | Telegram 机器人集成 |
|
||||
| 飞书 | `CONFIG_MIMI_CHAN_FEISHU` | y | 飞书机器人集成 |
|
||||
| WebSocket | `CONFIG_MIMI_WS_SERVER` | y | WebSocket 网关 |
|
||||
| Web Search | `CONFIG_MIMI_TOOL_WEB_SEARCH` | y | 网络搜索工具 |
|
||||
| GPIO | `CONFIG_MIMI_TOOL_GPIO` | n | GPIO 控制工具 |
|
||||
| WiFi 配置页 | `CONFIG_MIMI_WIFI_ONBOARD` | y | Captive Portal |
|
||||
| OTA | `CONFIG_MIMI_OTA` | n | OTA 升级(未实现) |
|
||||
|
||||
### 修改模块配置
|
||||
|
||||
编辑 `sdkconfig.defaults` 文件,添加或修改配置项:
|
||||
|
||||
```
|
||||
CONFIG_MIMI_CHAN_TELEGRAM=n
|
||||
CONFIG_MIMI_CHAN_FEISHU=y
|
||||
CONFIG_MIMI_TOOL_WEB_SEARCH=y
|
||||
CONFIG_MIMI_TOOL_GPIO=n
|
||||
```
|
||||
|
||||
修改后必须重新编译:
|
||||
|
||||
```bash
|
||||
idf.py fullclean && idf.py build
|
||||
```
|
||||
|
||||
### 添加新模块的编译时开关
|
||||
|
||||
1. 在 `sdkconfig.defaults` 中添加配置项:
|
||||
```
|
||||
CONFIG_MIMI_MODULE_EXAMPLE=y
|
||||
```
|
||||
|
||||
2. 在 `main/CMakeLists.txt` 中条件编译:
|
||||
```cmake
|
||||
if(CONFIG_MIMI_MODULE_EXAMPLE)
|
||||
list(APPEND srcs "modules/example/example.c")
|
||||
endif()
|
||||
```
|
||||
|
||||
3. 在模块头文件中添加 stub:
|
||||
```c
|
||||
#ifdef CONFIG_MIMI_MODULE_EXAMPLE
|
||||
esp_err_t example_init(void);
|
||||
#else
|
||||
static inline esp_err_t example_init(void) { return ESP_OK; }
|
||||
#endif
|
||||
```
|
||||
|
||||
## 构建和烧录
|
||||
|
||||
### 前提条件
|
||||
@@ -85,7 +142,9 @@ idf.py set-target esp32s3
|
||||
|
||||
# 配置(首次需要)
|
||||
cp main/mimi_secrets.h.example main/mimi_secrets.h
|
||||
# 编辑 mimi_secrets.h 填写 WiFi、Telegram、LLM 密钥
|
||||
# 编辑 mimi_secrets.h 填写 WiFi、LLM 密钥
|
||||
|
||||
# 编辑 sdkconfig.defaults 启用/禁用模块(可选)
|
||||
|
||||
# 清理构建(修改配置后必须执行)
|
||||
idf.py fullclean && idf.py build
|
||||
@@ -110,11 +169,14 @@ config_reset # 重置为构建时配置
|
||||
|
||||
## 开发注意事项
|
||||
|
||||
## 开发注意事项
|
||||
|
||||
1. **内存限制**:ESP32-S3 内存有限,使用 `MALLOC_CAP_SPIRAM` 分配大内存
|
||||
2. **堆栈大小**:任务堆栈在 `mimi_config.h` 中定义
|
||||
3. **日志**:使用 `ESP_LOG` 宏,标签在每个文件中定义
|
||||
4. **错误处理**:使用 `esp_err_t` 返回码
|
||||
5. **JSON 处理**:使用 cJSON 库
|
||||
6. **模块开关**:新增模块或可选模块应在 `sdkconfig.defaults` 中添加配置项,并在头文件中添加 `#ifdef` stub
|
||||
|
||||
## 调试技巧
|
||||
|
||||
|
||||
Reference in New Issue
Block a user