当前位置: 首页 > news >正文

【MimiClaw 嵌入式 AI Agent 实战】ESP32-S3 从零搭建多端互联智能体:26天36篇开发记录的全方位踩坑与经验总结

摘要

本文基于自主开发的嵌入式 AI Agent 项目 MimiClaw(运行于 ESP32-S3 开发板),系统记录了整个开发周期中的架构设计、模块集成、典型故障及解决思路。MimiClaw 已实现多消息渠道接入(飞书、Telegram、WebSocket)、DeepSeek LLM 代理、博查搜索(联网检索工具)、技能系统、双电机差速驱动、WS2812 灯光控制、WiFi 配网与 OTA 预留等核心功能。文章详细阐述了消息总线设计、内存管理、外设驱动集成、网络异常处理、任务调度等关键环节的真实踩坑经验,并提供可直接复用的代码模板与最佳实践,旨在为从事嵌入式 AI Agent、边缘计算、机器人控制开发的工程师提供高价值参考。

真实硬件清单:ESP32-S3 开发板(8MB PSRAM)、9 颗 WS2812 LED(GPIO48)、双电机驱动模块(差速驱动)、可选串口调试线。

核心服务:DeepSeek LLM API(负责对话生成与推理决策)+ 博查搜索 API(提供联网信息检索能力),当前两者均存在网页解析失败问题,包括相关排查方案。

1. 项目背景:从“养一只 AI 小虾”到多端智能体

MimiClaw 的命名源自 “Miniature Intelligent Mobile & Interactive Cobot with Lightweight AI Wizard”,其定位是一款可部署在极低成本硬件上的轻量级 AI Agent。该项目可通过飞书、Telegram 等常用 IM 平台与用户交互,并能执行电机移动、灯光反馈等物理动作,实现“思考-搜索-行动”的完整闭环。

整个项目精准契合边缘 AI 落地的三大核心趋势:
(1)云端 LLM + 边缘执行:ESP32-S3 仅运行调度逻辑与工具调用,LLM 推理通过代理请求云端 DeepSeek API,兼顾智能性与实时性,避免边缘设备资源不足的瓶颈。
(2)多模态交互渠道:通过统一消息总线,同步支持飞书、Telegram、WebSocket 三种交互方式,后续可快速扩展至钉钉、微信等平台,降低多渠道接入成本。
(3)技能可插拔 + 联网搜索:借助 tool_registry 和 skill_loader 实现技能动态加载,结合博查搜索 API 赋予 Agent 联网检索真实世界实时信息的能力,弥补 LLM 知识截止日期的局限。

本文基于26天开发周期产出的36篇博客,完整记录了从裸机开发到完整 Agent 部署的全部弯路与教训。以下重点展开 DeepSeek LLM 接入与博查搜索工具集成两个核心模块的工程实践,同步融入当前 API 解析失败的排查思路。

2. 系统架构与模块划分

2.1 总体架构图(文字描述)

┌────────────────────────────────────────────────────────────────┐ │ app_main()│ ├─────────────┬─────────────┬──────────────┬────────────┬────────┤ │ 基础系统 │ 网络与消息 │ LLM 与 AI │ 联网搜索 │ 外设 │ ├─────────────┼─────────────┼──────────────┼────────────┼────────┤ │ NVS/SPIFFS │ WiFiManager │ DeepSeek代理 │ 博查搜索 │ WS2812 │ │ MessageBus │ Feishu Bot │ AgentLoop │ 工具集成 │ 电机 │ │ SessionMgr │ TelegramBot │ ToolRegistry │ │ │ │ MemoryStore │ WS Server │ CronService │ │ │ │ SerialCLI │ HTTP Proxy │ SkillLoader │ │ │ └─────────────┴─────────────┴──────────────┴────────────┴────────┘

2.2 核心模块职责

3. DeepSeek LLM 代理实现

3.1 为什么选择 DeepSeek?
在嵌入式 AI Agent 的 LLM 选型上,需要权衡以下几个维度:

  • 成本:DeepSeek API 定价远低于 OpenAI 同类模型,适合开发测试与长期运行。
  • 性能:推理速度快,响应延迟低(通常 1-3 秒),不阻塞 Agent 循环。
  • 中文支持:原生中文理解与生成能力优秀,适合国内开发者场景。
  • 兼容性:API 格式与 OpenAI 兼容,可复用成熟的 HTTP 客户端代码。

3.2 DeepSeek API 调用实现
参考官方文档,DeepSeek 提供标准的 OpenAI 兼容 API 接口。在 ESP-IDF 环境下,使用 esp_http_client 组件实现请求发送与响应接收。当前 API 地址(https://api.deepseek.com/v1/chat/completions)出现解析失败报错,需优先排查接口可用性、网络连接及证书配置问题。

// llm_proxy.h 核心接口typedefstruct{char*api_key;char*model;// deepseek-chat / deepseek-reasonerchar*base_url;// https://api.deepseek.com/v1/chat/completionsuint32_ttimeout_ms;bool stream;// 是否启用流式输出}deepseek_config_t;esp_err_tdeepseek_chat_completion(deepseek_config_t*config,constchar*system_prompt,constchar*user_message,char**response);

3.3 HTTP 请求与 JSON 解析实现

// llm_proxy.c 核心实现片段staticesp_err_tbuild_request_json(constchar*system_prompt,constchar*user_message,char**out_json){cJSON*root=cJSON_CreateObject();cJSON_AddStringToObject(root,"model","deepseek-chat");cJSON*messages=cJSON_CreateArray();cJSON*sys_msg=cJSON_CreateObject();cJSON_AddStringToObject(sys_msg,"role","system");cJSON_AddStringToObject(sys_msg,"content",system_prompt);cJSON_AddItemToArray(messages,sys_msg);cJSON*user_msg=cJSON_CreateObject();cJSON_AddStringToObject(user_msg,"role","user");cJSON_AddStringToObject(user_msg,"content",user_message);cJSON_AddItemToArray(messages,user_msg);cJSON_AddItemToObject(root,"messages",messages);cJSON_AddNumberToObject(root,"temperature",0.7);cJSON_AddNumberToObject(root,"max_tokens",2048);*out_json=cJSON_Print(root);cJSON_Delete(root);returnESP_OK;}

3.4 踩坑与解决方案(含 API 解析失败补充)
踩坑 1:SSL 证书验证失败
现象:ESP32 调用 DeepSeek API 时返回 SSL/TLS 握手失败。
原因:ESP32 的 mbedTLS 默认不包含 DeepSeek 服务端的根证书。
解决:

  • 在 menuconfig 中启用 CONFIG_MBEDTLS_CERTIFICATE_BUNDLE
  • 将 DeepSeek API 域名添加到证书 bundle 白名单
  • 或使用 esp_http_client_config_t 中的 skip_cert_common_name_check(仅限开发环境)
    踩坑 2:PSRAM 与 JSON 解析内存不足
    现象:调用 DeepSeek API 时,JSON 响应解析失败,返回 DeserializationError::NoMemory。
    原因:DeepSeek 返回的响应可能超过 4KB,默认的静态 JSON 缓冲区不足。
    解决:将 JSON 文档对象分配在 PSRAM 中。
// 将 JsonDocument 分配在 PSRAMJsonDocument*doc=new(std::nothrow)JsonDocument();if(doc==NULL){// 回退到栈上分配}

踩坑 3:流式输出阻塞 Agent 循环
现象:启用 stream: true 后,DeepSeek 的流式响应导致 Agent 循环被阻塞。
解决:在独立任务中处理流式响应,通过队列将完整响应发送回 Agent。
踩坑 4:API Key 硬编码风险
教训:将 API Key 硬编码在固件中既不安全也难以更新。
解决方案:

  • 将 API Key 存储在 NVS 或 SPIFFS 的配置文件中。
  • 通过 Serial CLI 命令动态更新 API Key,无需重新烧录固件。
    踩坑 5:请求超时与重试机制缺失
    现象:网络波动时,DeepSeek API 请求超时导致 Agent 无响应。
    解决方案:实现指数退避重试机制(最多 3 次),并在重试失败时返回友好的错误提示。
    踩坑 6:API 网页解析失败(新增)
    现象:调用 DeepSeek API(https://api.deepseek.com/v1/chat/completions)时,系统提示“网页解析失败,可能是不支持的网页类型,请检查网页或稍后重试”。
    可能原因:API 接口地址变更、网络连接异常(如 ESP32 未正常联网)、API 访问权限不足(如 API Key 无效)、请求头配置错误。
    排查方向:
  • 检查 WiFi 连接状态,确保 ESP32 能正常访问外网。
  • 验证 DeepSeek API 地址是否正确,查询官方文档确认接口是否有更新。
  • 检查 API Key 有效性,确认是否已开通对应接口权限。
  • 简化请求参数,发送最小化合法请求,排查是否为请求体格式错误导致解析失败。

4. 博查搜索工具集成

4.1 为什么选择博查搜索?
博查(Bocha)是国内领先的 AI 搜索引擎 API 服务,为 LLM 和 AI Agent 提供联网搜索能力:

  • 数据安全:国内合规服务,数据不出境。
  • 内容安全:符合国内内容审核要求,有合规的内容过滤机制。
  • 响应快速:平均响应时间 < 1 秒。
  • 结果丰富:返回网页标题、URL、摘要、发布时间、网站名称等结构化信息。
  • 成本低廉:单条搜索最低 0.001 元。
  • 语义重排序:支持 Bocha Semantic Reranker,使搜索结果对 LLM 更友好。
    4.2 博查搜索 API 调用实现
    当前博查搜索 API 地址(https://api.bochaai.com/v1/web-search)出现解析失败报错,需同步排查接口可用性、网络及配置问题,以下为标准实现代码。
// tools/tool_websearch.htypedefstruct{char*api_key;char*query;bool summary;// 是否返回摘要intcount;// 返回结果数量,最大 50char*freshness;// 时间范围:noLimit / oneDay / oneWeek / oneMonth / oneYearchar*include_sites;// 限定搜索网站,用 | 分隔char*exclude_sites;// 排除搜索网站}bocha_search_params_t;esp_err_tbocha_web_search(bocha_search_params_t*params,char**result_json);

4.3 HTTP 请求实现

// tools/tool_websearch.c 核心实现staticesp_err_tbocha_http_request(bocha_search_params_t*params,char**response){esp_http_client_config_tconfig={.url="https://api.bochaai.com/v1/web-search",.timeout_ms=10000,.keep_alive_enable=true,};esp_http_client_handle_tclient=esp_http_client_init(&config);// 设置请求头charauth_header[256];snprintf(auth_header,sizeof(auth_header),"Bearer %s",params->api_key);esp_http_client_set_header(client,"Authorization",auth_header);esp_http_client_set_header(client,"Content-Type","application/json");esp_http_client_set_method(client,HTTP_METHOD_POST);// 构建请求体cJSON*root=cJSON_CreateObject();cJSON_AddStringToObject(root,"query",params->query);cJSON_AddBoolToObject(root,"summary",params->summary);cJSON_AddNumberToObject(root,"count",params->count);if(params->freshness){cJSON_AddStringToObject(root,"freshness",params->freshness);}char*post_data=cJSON_Print(root);esp_http_client_set_post_field(client,post_data,strlen(post_data));// 执行请求esp_err_terr=esp_http_client_perform(client);if(err==ESP_OK){intcontent_length=esp_http_client_get_content_length(client);if(content_length>0){*response=malloc(content_length+1);esp_http_client_read_response(client,*response,content_length);(*response)[content_length]='\0';}}free(post_data);cJSON_Delete(root);esp_http_client_cleanup(client);returnerr;}

4.4 注册为 Agent 工具

// tools/tool_registry.c 注册函数voidtool_registry_register_all(void){// ... 其他工具注册 ...tool_register(&(tool_t){.name="web_search",.description="搜索互联网获取实时信息,返回包含标题、链接和摘要的搜索结果",.parameters="{\"type\":\"object\",\"properties\":{\"query\":{\"type\":\"string\",\"description\":\"搜索关键词\"}}}",.handler=websearch_tool_handler});}

4.5 踩坑与解决方案(含 API 解析失败补充)

踩坑 1:JSON 响应过大导致内存溢出
现象:博查搜索返回 50 条结果时,JSON 响应体可能超过 20KB,ESP32 内存不足。
解决方案:

  • 使用流式 JSON 解析(deserializeJson(doc, client.getStream())),避免将整个响应加载到字符串中。
  • 启用 PSRAM 存储 JSON 文档:JsonDocument doc; doc.reserve(32768)。
  • 限制 count 参数不超过 10 条,减少单次搜索的内存占用。

踩坑 2:中文搜索关键词 URL 编码问题
现象:搜索中文关键词时,API 返回空结果。
原因:ESP32 的 esp_http_client 对中文未进行 URL 编码。
解决:使用 esp_http_client_set_post_field 以 POST 方式发送 JSON 请求体,中文直接放在 JSON 字符串中。

踩坑 3:并发搜索请求阻塞系统
现象:多个用户同时请求搜索时,Agent 循环被长时间阻塞。
解决:将搜索请求放入独立任务执行,使用消息队列通知 Agent 搜索结果。

踩坑 4:API Key 余额不足导致搜索失败
现象:搜索请求返回 HTTP 402,You do not have enough money。
解决方案:在 Serial CLI 中添加 check_balance 命令,定期检查余额并预警。

踩坑 5:搜索结果摘要包含特殊字符导致 JSON 解析失败
现象:博查返回的摘要中包含换行符或转义字符,导致 Agent 解析失败。
解决:使用 cJSON 自动处理字符串转义,或在使用前对摘要内容进行清理。

踩坑 6:API 网页解析失败(新增)
现象:调用博查搜索 API(https://api.bochaai.com/v1/web-search)时,系统提示“网页解析失败,可能是不支持的网页类型,请检查网页或稍后重试”。
可能原因:与 DeepSeek API 解析失败类似,主要包括接口地址变更、网络连接异常、API Key 无效、请求格式错误、博查服务临时故障。

排查方向:

  • 确认 ESP32 外网连接正常,可通过 ping 命令测试博查 API 域名连通性。
  • 核对博查 API 官方文档,确认接口地址、请求方法、请求头是否有更新。
  • 检查 API Key 是否正确,是否已完成实名认证、余额充足。
  • 简化请求参数(如仅传递 query 和 api_key),测试基础请求是否能正常响应。

5. DeepSeek + 博查搜索联合工作流

5.1 ReAct 循环设计
MimiClaw 的 Agent 循环采用 ReAct(Reasoning + Acting) 模式:

用户消息 → AgentLoop → 构造 Prompt(含历史会话 + 可用工具描述)→ 调用 DeepSeek API → 解析响应 → ├─ 若为普通回复 → 直接返回给用户 └─ 若为工具调用 → 执行对应工具(如 web_search)→ 将结果返回给 DeepSeek → 生成最终回复

5.2 系统 Prompt 设计(工具调用引导)
为了让 DeepSeek 正确识别何时需要联网搜索,系统 Prompt 需包含工具说明:

你是 MimiClaw,一个智能助手。你可以使用以下工具:1. web_search(query)- 搜索互联网获取实时信息。当你需要了解最新信息、新闻、事实或用户查询涉及的知识超出你的知识截止日期时,请调用此工具。2. set_led(r,g,b)- 设置 RGB LED 颜色。3. motor_control(motor, direction)- 控制电机。

请按以下格式输出工具调用:

<tool_call>{"name":"web_search","arguments":{"query":"搜索关键词"}}</tool_call>

5.3 完整交互示例
用户:今天深圳的天气怎么样?
Agent:调用 web_search(query=“深圳 今天 天气”)
博查返回:[网页结果…]
DeepSeek:今天深圳晴天,气温 22-28℃,适合出行。
Agent:今天深圳晴天,气温 22-28℃,适合出行。

5.4 联合工作流的踩坑

踩坑 1:LLM 返回格式不稳定导致工具调用失败
现象:DeepSeek 返回的工具调用 JSON 格式不符合预期(缺少引号、字段名错误)。
解决方案:

  • 在系统 Prompt 中给出严格的格式示例。
  • 实现容错解析:支持 {“name”:“web_search”,“arguments”:{“query”:“…”}} 和 {“tool”:“web_search”,“query”:“…”} 两种格式。
  • 解析失败时重新调用 DeepSeek 并要求纠正格式。

踩坑 2:搜索无结果时 LLM 仍然“编造”答案
现象:博查搜索返回空结果,DeepSeek 仍然生成了一个看似合理的虚假答案。
解决方案:

  • 在工具返回结果中明确标识 success: false 或 results: []。
  • 修改系统 Prompt,要求当搜索结果为空时明确告知用户“未找到相关信息”。

踩坑 3:DeepSeek 推理时间 + 博查搜索时间叠加导致超时
现象:用户等待时间超过 10 秒,体验差。
解决方案:

  • 在飞书/Telegram 回复中先发送“正在思考…”的提示。
  • 使用流式输出,逐字返回 DeepSeek 的生成内容。
  • 将博查搜索的超时设置为 5 秒,超时后返回部分结果。

6. WiFi 配网与配置管理

6.1 WiFi 自动连接实现

// wifi/wifi_manager.c 核心配置typedefstruct{charssid[64];charpassword[64];}wifi_credential_t;esp_err_twifi_manager_init(void){// 从 NVS 读取已保存的 WiFi 凭证wifi_credential_tcred;if(nvs_read_credential(&cred)==ESP_OK){// 自动连接returnwifi_manager_connect(cred.ssid,cred.password);}returnESP_ERR_NOT_FOUND;// 未配置,进入配网模式}

6.2 WiFi 配置模板
为了方便批量部署,支持预置 WiFi 配置模板:

// wifi_config_template.h#ifndefWIFI_CONFIG_TEMPLATE_H#defineWIFI_CONFIG_TEMPLATE_H// 预置 WiFi 配置(首次烧录时使用,可被 NVS 覆盖)#defineDEFAULT_WIFI_SSID"your_wifi_ssid"#defineDEFAULT_WIFI_PASSWORD"your_wifi_password"// 备用 WiFi 配置#defineBACKUP_WIFI_SSID"backup_wifi"#defineBACKUP_WIFI_PASSWORD"backup_password"#endif

6.3 踩坑与解决方案
踩坑 1:WiFi 断线后无法自动重连
解决方案:注册 WiFi 断连事件,触发自动重连。

esp_event_handler_instance_register(WIFI_EVENT,WIFI_EVENT_STA_DISCONNECTED,wifi_event_handler,NULL,NULL);

踩坑 2:WiFi 连接超时导致系统卡死
解决方案:设置超时(30 秒),超时后进入配网模式。

if(wifi_manager_wait_connected(30000)!=ESP_OK){ESP_LOGW(TAG,"WiFi timeout, entering onboarding");wifi_onboard_start(WIFI_ONBOARD_MODE_CAPTIVE);}

7. 单元测试与验证方案

7.1 DeepSeek 代理单元测试

// test_llm_proxy.cvoidtest_deepseek_chat(void){deepseek_config_tconfig={.api_key="your-api-key",.model="deepseek-chat",.timeout_ms=10000,.stream=false,};char*response=NULL;esp_err_tret=deepseek_chat_completion(&config,"You are a helpful assistant.","Hello, who are you?",&response);TEST_ASSERT_EQUAL(ESP_OK,ret);TEST_ASSERT_NOT_NULL(response);ESP_LOGI("TEST","DeepSeek response: %s",response);free(response);}

7.2 博查搜索工具单元测试

// test_tool_websearch.cvoidtest_bocha_websearch(void){bocha_search_params_tparams={.api_key="your-bocha-api-key",.query="ESP32 开发教程",.summary=true,.count=5,.freshness="oneMonth",};char*result=NULL;esp_err_tret=bocha_web_search(&params,&result);TEST_ASSERT_EQUAL(ESP_OK,ret);TEST_ASSERT_NOT_NULL(result);// 验证返回结果包含必要字段cJSON*root=cJSON_Parse(result);TEST_ASSERT_NOT_NULL(root);TEST_ASSERT_NOT_NULL(cJSON_GetObjectItem(root,"webPages"));cJSON_Delete(root);free(result);}

7.3 端到端集成测试

// test_agent_loop.cvoidtest_agent_with_websearch(void){// 模拟用户消息mimi_msg_tmsg={.channel=MIMI_CHAN_TEST,.chat_id="test",.content=strdup("今天的科技新闻有哪些?"),};message_bus_push_inbound(&msg);// 等待 Agent 处理(超时 15 秒)mimi_msg_treply;message_bus_pop_outbound(&reply,15000);TEST_ASSERT_NOT_NULL(reply.content);ESP_LOGI("TEST","Agent reply: %s",reply.content);// 验证回复包含搜索相关信息TEST_ASSERT_TRUE(strstr(reply.content,"科技")!=NULL||strstr(reply.content,"新闻")!=NULL);}

8. 核心经验与避坑速查表

汇总 MimiClaw 项目开发全流程典型问题、根本原因、解决方案及对应模块,重点标注当前 DeepSeek 与博查搜索 API 解析失败相关排查要点,方便开发调试快速查阅。


9. AI 落地的洞察:嵌入式 Agent 的三大实践原则

通过 MimiClaw 项目,我们可以提炼出适用于资源受限边缘设备的 AI Agent 设计准则:

9.1 云端大脑 + 边缘小脑 + 联网搜索
云端 LLM(DeepSeek):负责复杂推理、对话生成、工具选择。
边缘执行:实时响应、低延迟控制(电机、LED)、网络容灾。
联网搜索(博查):赋予 Agent 实时信息检索能力,弥补 LLM 知识截止日期的局限。
本项目体现:ESP32-S3 仅做轻量调度,DeepSeek Proxy 将请求转发至云端 API,同时集成博查搜索作为工具,实现“思考→行动→验证”的完整闭环(当前需先解决 API 解析失败问题)。

9.2 工具即技能(Tool as Skill)
将硬件操作和外部服务抽象为统一的工具接口,Agent 可通过自然语言调用。
代码实现:

tool_registry_register("set_led",led_set_rgb)tool_registry_register("move",motor_differential)tool_registry_register("web_search",bocha_web_search)

优势:用户可以说“请搜索今天的最新科技新闻”,Agent 自动调用博查搜索工具,将结果返回给 DeepSeek 后生成回复。

9.3 多渠道归一化
通过内部消息总线屏蔽不同 IM 的差异,Agent 核心只处理 mimi_msg_t。
扩展性:新增钉钉机器人只需实现 channel_send 和 channel_recv,并注册到 outbound_dispatch_task。
这些原则使得 MimiClaw 成为一个真正可落地的边缘 AI 原型——它不仅能“思考”,还能“搜索信息”和“执行动作”。

10. 后续优化方向

基于当前代码框架,以下工作可进一步提升实用性:
(1)OTA 固件更新:当前未实现,但已预留 SPIFFS 分区,可增加 ota_service 模块,从 HTTP 服务器拉取新固件。
(2)技能脚本热加载:skill_loader 目前仅支持 C 编译工具,可改为支持 Lua 或 MicroPython 脚本,让用户自定义行为。
(3) 低功耗模式:使用 ESP32-S3 的 light sleep,在无消息时关闭 WiFi 和电机驱动,将功耗降至 5mA 以下。
(4)本地 TinyML:在 PSRAM 中部署轻量级关键词唤醒模型(如使用 Edge Impulse SDK),实现语音触发,减少对 IM 的依赖。
(5)博查搜索语义重排序:集成 Bocha Semantic Reranker,使搜索结果按与用户问题的语义相关度排序,提升 LLM 对搜索结果的利用率。
(6)DeepSeek Reasoner 模型探索:尝试使用 deepseek-reasoner 模型,在复杂推理场景下获得更准确的工具调用决策。
(7) API 异常处理优化:针对当前 DeepSeek 和博查 API 解析失败问题,增加完善的异常捕获和重试机制,提升系统稳定性。

11. 结论

本文基于真实运行的 MimiClaw 项目源代码,系统回顾了在 ESP32-S3 上构建嵌入式 AI Agent 的完整过程——从内存配置、消息总线设计、多 IM 渠道接入,到 DeepSeek LLM 代理、博查搜索工具集成、双电机驱动、WS2812 灯光控制。

文中所有踩坑案例均来自实际调试记录,提供的解决方案可直接复用于类似项目。需特别注意,当前 DeepSeek LLM API(https://api.deepseek.com/v1/chat/completions)与博查搜索 API(https://api.bochaai.com/v1/web-search)均出现网页解析失败报错,需优先排查网络、接口地址、API 权限等问题,确保核心服务正常运行。

DeepSeek 接入核心要点:

  • API 调用采用标准 OpenAI 兼容格式,响应通过流式或非流式返回。
  • SSL 证书配置是 ESP32 端的常见障碍,需提前配置好 mbedTLS。
  • PSRAM 是处理大 JSON 响应的关键,务必启用。
  • 需重点排查 API 解析失败问题,确保接口可用性。

博查搜索接入核心要点:

  • API 采用 RESTful 格式,支持丰富的搜索参数(时间范围、网站过滤等)。
  • 控制 count 参数 ≤ 10,避免内存溢出。
  • 使用流式 JSON 解析替代 getString(),大幅降低内存占用。
  • 同步排查 API 解析失败问题,确保联网搜索功能正常。

26 天,36 篇博客,最终交付的代码量(仅 mimi.c 主文件)已达 200+ 行,整个工程超过 3000 行。MimiClaw 证明了:即使是在主频 240MHz、可用 RAM 仅 512KB 的 ESP32-S3 上,依然可以构建一个具备云端 LLM 能力、联网搜索能力、可执行物理动作、支持多端交互的智能 AI Agent。

最后,以代码中那行硬编码电机测试作为结束的隐喻:
ESP_LOGI(TAG, “>>> Testing left motor forward 2 seconds <<<”);

MimiClaw 不仅学会了“思考”,学会了“搜索信息”,还学会了“行动”。这才是嵌入式 AI 真正迷人的地方。

http://www.jsqmd.com/news/673546/

相关文章:

  • kubectl-debug性能优化:如何配置资源限制和启动参数
  • 为什么92%的Java团队卡在Loom响应式配置最后一公里?这份内部调试日志级配置清单请收好
  • 告别客户端混乱!用Mountain Duck把OneDrive、Google Drive都变成电脑本地硬盘(保姆级配置)
  • xrdp终极指南:免费实现Windows到Linux的完美远程桌面连接
  • 打造家庭KTV新体验:3个步骤用UltraStar Deluxe开启免费卡拉OK之旅
  • 面试官:详细聊聊Spring的拓展功能!
  • 天猫茅台抢票时间策略:Tmall_Tickets如何精准把握抢购时机
  • 终极大麦网抢票指南:告别手速烦恼,三分钟搞定演唱会门票
  • C# 14原生AOT部署Dify客户端:从“Hello World”到生产就绪的72小时极速落地路径(含Docker multi-stage构建+符号调试逆向指南)
  • PowerCat在企业环境中的应用:合规使用的最佳实践指南
  • Circle最佳实践:10个提升团队协作效率的技巧与策略
  • Rust 并发同步之屏障(Barrier):让多线程步调一致
  • Qwen3-Reranker-8B模型安全指南:防御对抗攻击
  • xalpha 性能调优与缓存策略:处理大规模数据的终极方案
  • Speechless:免费Chrome插件,一键完整备份微博记忆的终极方案
  • 大厂Java面试:谈谈你对redis的理解?
  • Prisma Client Go查询构建器详解:10个高效数据库操作技巧
  • 别再只用EEMD了!CEEMDAN在MATLAB里这么用,信号分解又快又准
  • 打工人效率神器!OpenClaw 部署与办公自动化教程
  • 游戏天气系统动态变化与视觉效果
  • 别只看容量!深入聊聊STM32F103C6T6与C8T6那些容易被忽略的细节差异
  • CefSharp 中加载超长 HTML 的解决方案
  • 如何用Serverless Components构建完整无服务器应用?5个实用模板快速上手
  • lsp_signature.nvim故障排除大全:解决常见问题与性能优化
  • 如何配置Oracle的外部口令存储_安全外部密码库Wallet自动登录
  • 如何构建无懈可击的国际象棋平台:从单元测试到E2E测试的完整策略
  • 终极i3wm-themer指南:10分钟快速打造个性化Linux桌面环境
  • 026、AI与物联网(IoT):让身边设备变聪明
  • 原神成就管理终极指南:YaeAchievement免费工具完整使用教程
  • EssentialsX:打造专业级Minecraft服务器管理套件