MimicLaw vs OpenClaw

一个 $5 的嵌入式 Agent 和完整框架相比如何?

功能对照

相同之处

功能MimicLawOpenClaw
ReAct Agent 循环 + 工具调用agent_loop.c(最多 10 次迭代)auto-reply/run.ts
工具调用协议Anthropic 原生 tool_use/tool_result相同
记忆系统MEMORY.md + 每日笔记 (SPIFFS)MEMORY.md + 每日笔记 (文件系统)
会话持久化JSONL(按对话)JSONL(按对话)
Telegram 通道HTTPS 长轮询node-telegram-bot-api 长轮询
引导文件SOUL.md, USER.mdSOUL.md, USER.md
上下文构建器加载记忆 + 工具到系统提示词相同模式
WebSocket 网关JSON 协议(端口 18789)JSON 协议

差异之处

方面MimicLawOpenClaw
运行时裸机 C / FreeRTOSNode.js / Python asyncio
LLM 提供商仅 Anthropic(直接 API)LiteLLM(多提供商)
API 模式非流式 JSON流式 SSE
内存512 KB SRAM + 8 MB PSRAMGB 级
存储12 MB SPIFFS(平面文件系统)GB 级磁盘(完整文件系统)
并发FreeRTOS 任务 + 队列(双核)async/await 事件循环
消息总线FreeRTOS xQueue(深度 8)异步队列
配置编译时密钥 + NVS (CLI)YAML / .env 文件
CLIesp_console(串口,17 条命令)终端 (stdin)
更新esp_https_ota(双 OTA 槽位)Git pull / 包管理器
固件大小~1.5 MB~100 MB (Node.js + 依赖)
功耗~0.5 W(USB 供电可 24/7 运行)~10-50 W(服务器)

MimicLaw 缺失的功能

尚未实现(来自 TODO.md):

功能优先级说明
Skills 系统P1可插拔能力(SKILL.md 文件)
子代理P0后台任务派生
Cron / 心跳P2定时任务
媒体处理P1Telegram 图片、语音、文件
语音转写P2Whisper API 集成
多 LLM 支持P2OpenAI、Gemini、OpenRouter
Telegram 白名单P1用户认证 (allow_from)
Markdown → HTMLP1更好的 Telegram 渲染
流式 Token 推送P2WebSocket 逐 token 推送
WhatsApp / 飞书P2更多通道

受硬件限制而省略的功能:

  • 本地 LLM 推理(RAM 不够)
  • 音频输入输出(参考开发板无麦克风/扬声器)
  • 视觉/摄像头
  • 完整 POSIX 文件系统(SPIFFS 是平面的,无真正目录)

设计取舍分析

非流式 API 响应

MimicLaw 使用 Claude API 的非流式 JSON 响应,而非 SSE 流式传输。

为什么: 解析更简单(单个 JSON 对象),内存开销更低(无流式状态机),错误处理更容易。

代价: 用户在完整响应到达之前看不到任何输出。对于长回复,有明显的等待感。

JSONL 而非 SQLite

会话历史使用 JSONL(每行一个 JSON 对象)而非数据库。

为什么: 人类可读,不需要 SQLite 移植(节省 ~500 KB Flash),追加写入对 Flash 友好。

代价: 无索引,加载历史需要扫描整个文件。通过环形缓冲区缓解(只加载最近 20 条消息)。

直接调用 Anthropic API 而非 LiteLLM

MimicLaw 通过 esp_http_client 直接调用 Anthropic Messages API。

为什么: LiteLLM 需要 Python/Node.js 运行时。直接调用完全消除了这个依赖。

代价: 锁定在 Anthropic。切换到 OpenAI 或 Gemini 需要修改请求/响应格式的代码。

HTTP CONNECT 代理而非 SOCKS5

代理支持使用 HTTP CONNECT 隧道。

为什么: 协议更简单(基于 HTTP),被常用代理工具广泛支持(Clash Verge、V2Ray、Squid)。

代价: 不兼容仅支持 SOCKS5 的代理。

双核任务分离

Core 0 处理所有 I/O(Telegram、WebSocket、串口)。Core 1 专门运行 Agent 循环。

为什么: 防止网络 I/O 延迟阻塞 Agent 处理。Agent 可以在后台 Telegram 轮询的同时执行完整的 ReAct 迭代。

代价: 任务协调略复杂(队列而非直接调用)。

20 条消息的会话环形缓冲区

每个对话只将最近 20 条消息加载到 LLM 上下文中。

为什么: 限制内存增长。20 条消息约 200 token/条 ≈ 4,000 token,完全在 Claude 上下文窗口内。

代价: 长对话会丢失早期上下文。重要信息应由 Agent 保存到 MEMORY.md。

架构映射

MimicLaw 模块与 OpenClaw 模块的对应关系:

MimicLawOpenClaw说明
bus/message_bus.csrc/channels/FreeRTOS 队列 vs 异步通道
telegram/telegram_bot.cextensions/telegram/直接 HTTP vs node-telegram-bot-api
llm/llm_proxy.csrc/agents/pi-embedded-runner/直接 Anthropic vs LiteLLM
agent/agent_loop.csrc/auto-reply/run.ts相同 ReAct 模式
agent/context_builder.csrc/agents/.../build-prompt.ts相同结构
memory/memory_store.csrc/memory/SPIFFS vs 文件系统
memory/session_mgr.csrc/sessions/两者都用 JSONL
tools/tool_registry.csrc/tools/相同工具 Schema 格式
gateway/ws_server.csrc/gateway/相同 JSON 协议
cli/serial_cli.c嵌入式独有
proxy/http_proxy.c嵌入式独有
ota/ota_manager.c嵌入式独有