😱为什么你的Agent不工作了?
💥 真实故事:消失的Agent
那是一个平静的周二下午,我正在测试一个新的OpenClaw Agent。代码看起来完美无缺,配置文件也检查了三遍。但是当我运行openclaw run时,什么都没有发生。
没有错误提示,没有日志输出,就像Agent从未存在过一样。我花了整整4个小时,最后发现是因为config.yaml里的一个缩进错误——少了两个空格。
教训:调试OpenClaw就像侦探破案,每一个细节都可能是关键线索。
OpenClaw是一个强大的Agent平台,但正因为强大,调试起来也充满挑战:
- 配置复杂:YAML配置、环境变量、Skills依赖,任何一个环节出错都会导致神秘故障
- 异步执行:Agent的异步特性让错误难以追踪,日志可能延迟或丢失
- Skills生态:第三方Skills可能有bug,但错误信息往往不够清晰
- MCP通信:Model Context Protocol的通信问题像黑盒一样难以诊断
- Prompt问题:Agent行为不符合预期,可能是因为Prompt的某个微妙之处
- 缓存玄学:改了代码没生效?八成是缓存!清一下就好了
🔧调试技巧大揭秘
💡 调试第一定律
最详细的日志,包括所有内部通信、API调用细节、变量值。 默认级别,显示正常操作信息、重要事件。适合日常监控。 显示潜在问题,但不影响正常运行。比如Skills加载失败。 只显示错误,适合生产环境。但当问题发生时可能已错过关键线索。 开发环境:DEBUG级别,捕获所有细节。测试环境:INFO级别,平衡信息量和性能。生产环境:WARN级别,但保留DEBUG开关以便随时启用。 OpenClaw Inspector是一个内置Web调试工具,实时查看Agent执行状态、Skills调用链、MCP通信。 主要功能: OpenClaw基于Node.js,可以使用Chrome DevTools进行远程调试。 Agent执行"发送邮件"时报"附件上传失败"。但我代码里根本没附件! 追踪2小时发现调用链:send-email → attach-file → resize-image → sharp库缺少libvips。 教训:错误在调用链最底层,表象在最顶层。需要一层层剥洋葱。 MCP是OpenClaw与AI模型通信的协议。理解MCP日志,就理解了Agent的"语言"。 使用Filebeat+ELK或Grafana Loki集中管理日志。配置JSON格式输出便于解析。 我让Agent"找最新的AI论文"。它给了我一堆2020年的论文,还附注"这些是经典论文,历久弥新"。 我没定义"最新"的含义,Agent自己选择了解释。这不是bug,是Prompt的问题。 教训:Agent不是读心术大师。Prompt必须精确、无歧义、有约束。 好问题示例:"Ubuntu 22.04, OpenClaw 2.3.1, MCP连接超时。日志ECONNREFUSED 127.0.0.1:8080。端口未被占用,防火墙已关,config.yaml正确。求帮助!" 调试OpenClaw Agent就像侦探破案: 每个错误都是学习的机会。今天的bug,明天的feature。 🚀 1. 保持冷静:bug不会因为你着急就自己消失。 2. 二分法排查:注释掉一半代码,看问题是否还在。再注释掉一半,直到找到问题代码。 3. 休息一下:盯屏幕2小时没思路?去喝杯咖啡,回来可能就看出问题了。 4. 请教别人:有时候别人的一句话就能点醒你。别死磕!1. 日志级别配置:你的第一道防线
🔍 DEBUG级别
ℹ️ INFO级别
⚠️ WARN级别
❌ ERROR级别
✅ 分级日志策略
2. OpenClaw Inspector:可视化调试
🚀 快速启动
# Inspector running at
# 浏览器访问即可看到实时调试界面
3. Node.js远程调试:深入内核
💡 远程调试技巧
error.code === 'TIMEOUT'4. Skills调用链追踪
🎭 真实故事:俄罗斯套娃
5. MCP通信日志:看透Agent内心
🏆最佳实践
日志分析:从海量日志中提取价值
📈 步骤1:集中化收集
🔍 步骤2:结构化查询
性能追踪:为什么这么慢?
✅ 性能优化清单
--max-old-space-size=4096💣常见错误Top 10
错误/现象 原因 解决方案
ECONNREFUSED
MCP Server未启动
检查
config.yaml中的serverUrl,运行openclaw mcp status
429 Too Many Requests
API限流
指数退避重试、申请提高配额、多个API Key轮询
MODULE_NOT_FOUND
Skills依赖缺失
检查package.json,运行npm install
YAMLException
配置文件语法错误
用yamllint检查,缩进只能用空格
Agent无响应
死循环/阻塞IO
启用超时:
--skill-timeout 30000
ContextLengthExceeded
超过上下文窗口
精简Prompt、实现历史摘要、换Claude 200K
ToolNotFound
Skill未注册
运行
openclaw skills list确认
Invalid JSON
模型返回格式错误
Prompt加"只返回JSON"、用parser兜底
Permission denied
权限不足
检查日志/缓存目录写权限
ENOSPC
磁盘空间不足
find /var/log -name "*.log" -mtime +7 -delete⚠️ Agent卡死紧急恢复
kill -3 $(pgrep -f openclaw) — 打印线程堆栈kill -9 $(pgrep -f openclaw) — 强制杀戮strace -p PID -e trace=network — 看卡在哪个调用config.globalTimeout: 60000防止再次卡死🧠Agent行为分析
🤖 故事:Agent的"创意"解释
调试5步流程
openclaw prompt inspect查看实际发送的PromptPrompt调试
📞社区排错渠道
✅ 求助渠道
openclaw标签提问⚠️ 提问的智慧
💻代码示例
示例1:带错误处理的Skill调用
示例2:自定义调试类
🔗相关链接
🎯 总结
💡 调试心态