OpenClaw Thinking Levels:一招解决上下文窗口溢出崩溃问题

3分钟,接入 世界模型
ChatGPT/Claude/Gemini 国内中转平台 官方授权服务商,100+ 大模型一站接入点此 获取 API Key

用 OpenClaw 跑复杂任务的时候,你可能遇到过一个让人头疼的报错:Unhandled stop reason: model_context_window_exceeded。说白了就是模型的上下文窗口被撑爆了。解决思路其实不复杂——限制 thinking budget,也就是控制模型的"思考深度"。OpenClaw 内置了一套 Thinking Levels 机制,专门干这个事。

什么是 Thinking Levels

Thinking Levels 是 OpenClaw 的内置工具,允许你通过指令控制模型在每次推理时投入多少"思考预算"。你可以在消息中直接插入指令,格式很灵活:/t <level>/think:<level> 或者 /thinking <level> 都行。

支持的级别和对应的效果:

  • off — 关闭思考
  • minimal — 对应 "think",最低限度思考
  • low — 对应 "think hard"
  • medium — 对应 "think harder"
  • high — 对应 "ultrathink",最大预算
  • xhigh — 对应 "ultrathink+",仅限 GPT-5.2 和 Codex 模型
  • adaptive — 由模型提供商自动管理推理预算,Anthropic Claude 4.6 系列支持

别名方面也很宽松,x-highx_highextra-highextra highextra_high 都映射到 xhighhighest 和 max 映射到 high

不同模型提供商的差异

这里有个坑要注意——不是所有模型都支持全部级别:

  • Anthropic Claude 4.6 系列:默认就是 adaptive,不设的话自动走自适应模式,体验最好。
  • Z.AI(zai/*:只支持开/关两档,任何非 off 的级别都当 on 处理,映射到 low
  • Moonshot(moonshot/*/think off 映射为 thinking: { type: "disabled" },其他级别映射为 thinking: { type: "enabled" }。开启思考后,Moonshot 只接受 tool_choice 为 auto 或 none,OpenClaw 会自动把不兼容的值转成 auto

优先级规则

当你在多个地方都设了 thinking level,OpenClaw 按这个顺序决定最终生效的配置:

  1. 消息内联指令 — 只对当前这条消息生效,优先级最高
  2. 会话级覆盖 — 发送一条只包含指令的消息来设置,整个会话生效
  3. 全局默认值 — 在配置中设置 agents.defaults.thinkingDefault
  4. 兜底策略 — Anthropic Claude 4.6 模型用 adaptive,其他支持推理的模型用 low,不支持的直接 off

实际怎么用

回到最开始那个上下文窗口爆掉的问题。如果你跑的是长对话或者复杂的 Agent 工作流,模型的 thinking token 可能占掉大量上下文空间。这时候把 thinking level 调低,比如设成 minimal 或 low,能有效缓解这个问题。

最简单的做法是在消息前面加一句 /t low,或者干脆在配置里设个全局默认值,省得每次都手动指定。对于不需要深度推理的日常任务,low 或 minimal 完全够用;只有在真正需要模型深度思考的场景(比如复杂代码重构、多步推理),再拉到 high

说实话,这种按需调节思考深度的设计挺实用的。一人公司搭 Agent 工作流,token 就是成本,能省则省。建议把 adaptive 作为日常默认,遇到上下文超限再手动降级,这样既保证质量又不浪费预算。