系统化调试与问题定位技能

38152 81924 更新时间: 2026-07-12 18:08:10

OpenClaw Debugging 是一个用于系统化调试 OpenClaw 行为差异的技能。当 OpenClaw 在本地测试、实时模型、不同提供商、代码模式(code-mode)、Tool Search、Crabbox 或 CI 环境中的表现不一致时,使用此技能通过选择正确的日志、探测手段和验证路径来定位问题,而不是盲目猜测

安装
npx skills add https://github.com/openclaw/openclaw --skill openclaw-debugging
技能详情 readonly

1. 日志与调试标志(Debug Flags)

技能提供了一系列精准的环境变量调试标志,用于定向捕获特定环节的日志,而非开启全局调试

环境变量 用途
OPENCLAW_DEBUG_MODEL_TRANSPORT=1 记录请求开始、fetch 响应、SDK 头、首个 SSE 事件、流完成及传输错误
OPENCLAW_DEBUG_MODEL_PAYLOAD=summary 输出有边界的 payload 摘要
OPENCLAW_DEBUG_MODEL_PAYLOAD=tools 输出所有模型可见的工具名称
OPENCLAW_DEBUG_MODEL_PAYLOAD=full-redacted 输出经过截断和脱敏的完整 JSON payload(仅调试时使用,提示/消息文本仍可能可见)
OPENCLAW_DEBUG_SSE=events 记录首个事件和流完成的时间
OPENCLAW_DEBUG_SSE=peek 输出前五个脱敏后的 SSE 事件
OPENCLAW_DEBUG_CODE_MODE=1 输出 code-mode 工具层面的诊断信息

查看日志可使用 openclaw logs --follow 命令

2. 常见问题边界定位

技能将问题可能出现的边界进行了分类,帮助快速缩小排查范围

  • 配置 vs 激活(Config vs activation):配置可能已启用,但运行时禁用了工具、处于 raw 模式、allowlist 为空或模型不支持工具。在强制执行 provider payload 约束前,先检查实际可见的工具

  • 工具表面(Tool surface):检查最终模型可见的工具名称,而非仅看工具注册表或配置。Code mode 意味着只有 exec 和 wait 在实际激活后才生效

  • Provider payload:记录字段、模型 ID、service tier、推理参数、输入大小、metadata 键、prompt-cache 键存在性以及 SDK 调用前的工具名称

  • Fetch vs SSE:fetch 响应证明 HTTP 头已到达;首个 SSE 事件证明 provider 正在返回内容。两者之间的间隙表明是流/body/provider 问题,而非工具执行问题

  • Worker/分发(Worker/dist):修改 workers、动态导入、package exports、懒加载运行时边界或发布路径后,运行 pnpm build

  • Live keys:使用配置的 secret workflow 检查缺失的 provider key,不要因 key 问题而中断 live 验证。环境检查仅验证存在性,绝不打印 secrets

3. 代码定位指针

技能提供了关键源码文件的快速索引

文件路径 职责
src/agents/openai-transport-stream.ts Model payload + Responses stream
src/agents/provider-transport-fetch.ts Guarded fetch/timing
src/agents/pi-embedded-runner/openai-stream-wrappers.ts OpenAI/Codex provider wrappers
src/agents/pi-embedded-runner/run/attempt.ts Tool 构造、Tool Search、code-mode 激活
src/agents/code-mode.ts / src/agents/code-mode.worker.ts Code-mode 运行时和 worker
src/agents/tool-search.ts Tool Search catalog

4. 证明路径选择(Proof Choice)

根据问题类型选择最合适的验证方式

问题类型 推荐验证方式
单点 helper/payload bug 本地 targeted Vitest
文档/日志问题 pnpm check:docs + git diff --check
Worker/dist/lazy import/package surface targeted tests + pnpm build
Live provider/model 行为 相同 provider/model + debug flags + 真实 key(如有)
Docker/package/Linux/CI 一致性 $crabbox
CI 失败 精确 SHA + 相关 job + 失败/完成后的日志

三、主要用途

  1. 定位行为差异的根因
    当 OpenClaw 在不同环境(本地测试、live models、不同 provider、code mode、Tool Search、Crabbox、CI)中表现不一致时,系统化地定位问题边界

  2. 精准捕获调试信号
    使用定向的环境变量调试标志,而非开启全局调试,避免日志泛滥,只捕获最相关的信息

  3. 验证配置与实际运行的一致性
    检查配置是否真正生效,工具是否实际可见,code mode 是否真正激活

  4. 区分传输层与执行层问题
    通过 Fetch vs SSE 的对比,判断问题是出在 HTTP/流传输层还是工具执行层

  5. Worker 和构建问题的快速定位
    修改 workers、动态导入或 package 边界后,通过 pnpm build 验证构建是否完整


四、标准调试流程

text
1. 声明怀疑的边界:config、tool construction、provider payload、fetch、stream/SSE、transcript replay、worker/runtime、package/dist 或 CI[reference:24]
2. 添加或启用最精准的信号来证明该边界[reference:25]
3. 使用相同的 provider/model/config 复现问题(除非模型本身是测试变量)[reference:26]
4. 比较配置状态与实际运行激活状态[reference:27]
5. 修复根因[reference:28]
6. 重新运行精确的失败探测,仅在契约要求时才扩大范围[reference:29]

五、重要原则

  1. 不随机切换模型:除非模型本身是测试变量,否则复现时必须使用相同的 provider/model/config

  2. 环境检查仅验证存在性:绝不打印 secrets

  3. 输出习惯:报告时必须包含——测试的边界、精确的命令/env 形状(脱敏后)、观察到的信号(如工具名称或首个 SSE 事件时间)、修复位置、窄化证明及剩余风险


六、总结

OpenClaw Debugging 是一个系统化的调试技能,通过精准的调试标志、清晰的问题边界分类和代码指针,帮助开发者快速定位 OpenClaw 在不同环境中的行为差异根因。它适用于 OpenClaw 开发者在遇到本地与生产环境不一致、不同 provider 表现不同、code mode 或 Tool Search 行为异常、CI 失败等场景时,以信号驱动而非猜测驱动的方式进行调试