深入解析Claude Code的Effort等级与缓存机制

深度解析 Claude Code 的 effort 等级、prompt 缓存机制与子代理行为,帮助开发者控制成本、优化工作流。
本文整理自 Reddit 社区用户对 Claude Code 配置机制的深度研究,重点揭示了三个常被误解的领域。首先,在长会话中途更改 effort 等级会使 prompt 缓存失效,造成不可忽视的额外成本。其次,Ultracode 本质上只是 xHigh 加上"使用工作流"的指令,Ultrathink 则是已基本失效的遗留关键词,两者均不真正改变 effort 等级。第三,子代理的缓存仅保留 5 分钟(主会话为 1 小时),导致"唤醒卡住的子代理"往往比新建代理代价更高。此外,较低 effort 可缓解模型钻牛角尖的问题,但根本解法通常是优化提示词。这些底层逻辑对于追求效率与成本平衡的开发者具有直接的实用价值。
Claude Code 提供了多种 effort(努力等级)和模型选择选项,但围绕这些概念存在不少误解。一位 Reddit 用户在 /r/ClaudeAI 社区分享了他对 effort 等级、prompt 缓存机制以及子代理(subagent)行为的深入研究,揭示了一些官方文档未必讲清楚的细节。这些经验对于希望控制成本、优化工作流的开发者尤为实用。

Effort 等级与缓存的隐藏成本
最容易被忽视的一点是:在长会话中途更改 effort 等级会使 prompt 缓存失效。这意味着模型需要重新处理整个对话上下文,直接导致额度或费用的额外消耗。对于动辄数万 token 的长对话来说,这笔开销并不小。
作者提到一个例外情况——在 Fable 5.1 模型上,逐条消息切换 effort 并不会破坏缓存。据其透露,Opus 也正在测试类似能力(目前处于 API 的 beta 阶段),预计后续会进入 Claude Code。这一差异提醒用户:不同模型对缓存的处理逻辑并不统一,切换前需要了解自己所用模型的具体行为。
Prompt 缓存(Prompt Caching) 是大语言模型 API 中的一种优化机制:当连续请求共享相同的前缀上下文时,服务端可以复用已计算的 KV(键值)缓存,从而跳过对这部分 token 的重复计算,显著降低延迟和费用。Anthropic 的缓存命中价格通常仅为标准输入价格的十分之一左右。然而缓存是与特定的模型配置(包括 effort 等级)绑定的——一旦参数变化,服务端无法确认当前请求与缓存的前缀是否兼容,只能从头计算。在动辄包含数万 token 系统提示和历史对话的长会话中,一次 effort 切换等同于让整个上下文"重新付费",这正是作者强调需要谨慎操作的原因。
Ultracode 与 Ultrathink 的真相
社区中流传着不少关于 "Ultracode" 的说法,但作者直言它其实是一个"假"的 effort 等级。它本质上就是 xHigh 加上一条额外指令——让模型使用工作流(workflows),也就是派生一批子代理来协作完成任务。
因此,如果你已经处于 xHigh,切换到 Ultracode 是免费的;而在 Fable 上,无论当前处于哪个 effort 等级都可以免费切换。更有意思的是,你甚至可以直接在提示词里说 "Ultracode",效果等同于告诉模型"使用工作流"来启动子代理,而不会真正改变 effort 等级。为了避免混淆,作者建议干脆直接写 "use workflows"。
另一个容易误导人的关键词是 Ultrathink(注意是 THINK)。它是一个提示词关键词,请求模型"想得更深",但同样不会改变 effort 等级。作者坦言,如今这类"想得更努力"的指令基本已经失效,属于遗留功能,建议直接忽略、不必纠结。
Effort 等级(Effort Level) 在 Claude Code 中是控制模型推理深度与 token 消耗的核心参数,通常从低到高分为若干档(如 low、medium、high、xHigh 等)。更高的 effort 意味着模型会投入更多"思考 token"(即 extended thinking 中的内部推理步骤),在复杂任务上表现更好,但也会线性增加成本。用户容易误以为 Ultracode、Ultrathink 这类关键词会进一步提升 effort 等级,实际上它们只是自然语言层面的行为指令,并不触及底层的 effort 参数配置。理解这一点有助于避免在已处于 xHigh 的情况下误以为"还能再高",从而做出无效的配置调整。
用 Effort 等级解决"钻牛角尖"问题
Effort 等级不只是关于算力投入,它还会影响模型的行为模式。作者指出,较低的 effort 可以缓解模型"钻牛角尖"(rabbit-holing)的毛病——比如过度验证、过度探索、陷入循环却不肯放弃。
但这是一把双刃剑:effort 太低也可能让模型过早放弃一个本该解决的问题。作者补充道,钻牛角尖很多时候其实是提示词的问题,只要把需求描述得足够具体,往往就能避免。这一观点对开发者是很好的提醒:调 effort 之前,先检查自己的 prompt 是否够清晰。
子代理的缓存生命周期
子代理的行为是这份分享中信息量最大的部分。关键要点包括:
- 子代理继承主会话的 effort 等级,这在使用工作流时尤其需要注意。
- 主会话的缓存保留 1 小时,而子代理的缓存只保留 5 分钟。
5 分钟的差异带来一个实际问题:当某个子代理看似卡住,你让编排代理(orchestrator)去"唤醒"它时,如果动作不够快,就会触发该子代理整段对话的完整重新缓存,成本陡增。作者给出的经验法则是——与其唤醒旧代理,不如直接创建一个新的子代理来继续工作。当然,这也要权衡:新建代理本身也有开销,如果旧代理已经完成了大量工作,重建未必划算。
对于想调整这一行为的用户,可以在 settings.json 中修改 subagentPromptCacheTtl 参数。但作者提醒,把缓存延长到 1 小时并非免费——它会让缓存本身更昂贵。由于子代理通常只做单一任务、不会长时间等待指令,默认设置其实是合理的。
子代理(Subagent)与编排代理(Orchestrator) 是多代理工作流中的核心概念。编排代理负责分解任务、调度并监控多个子代理并行执行;子代理各自持有独立的会话上下文,专注于单一子任务。这种架构可以显著提升并行效率,但也带来了上下文隔离的复杂性。每个子代理本质上是一次独立的 API 调用链,拥有自己的 token 计数和缓存生命周期。正因子代理通常执行短周期、单次性的任务,Anthropic 将其默认缓存窗口设定为 5 分钟,而非主会话的 1 小时——这在大多数正常执行场景下是够用的,但在需要人工介入或网络等待导致暂停时,就容易超时失效。subagentPromptCacheTtl 参数允许用户延长这一窗口,但需权衡缓存写入本身的额外费用。
平台差异与实用建议
作者还提到 TUI(终端界面)与 Desktop(桌面端)的体验差异:TUI 在你做一些"危险操作"时会更"多嘴",比如继续一个陈旧的会话或在长会话中切换 effort 时,会提醒"你确定吗"。而桌面端则不会有这类提示。
需要特别强调的是,上述缓存时长针对的是订阅计划下使用 Claude Code 的情况。API、预付费额度、云服务商等场景下的行为可能各不相同,用户需自行验证(buyer beware)。
综合来看,这份经验分享的核心价值在于:厘清了 effort 等级、Ultracode、Ultrathink 之间的真实关系,并揭示了缓存机制这一影响成本的关键变量。对于追求效率与成本平衡的 Claude Code 用户来说,理解这些底层逻辑,远比盲目切换配置更有意义。
相关推荐

B站最细Codex保姆级攻略:从安装到实战全解析
B站最细Codex保姆级攻略:从应用商店安装到日常工作模式配置,用真实咖啡馆项目演示文件整理、数据提取、仪表盘制作等实战任务,教你用计划模式和桌面宠物高效使用Codex。

体渲染中的外观补偿:为何RGB准确无法保证密度正确
体渲染研究揭示:完美复现外部RGB视图的体数据仍可能存在密度错误。外观补偿机制使中心密度翻倍、L2误差超14.52%时外部射线仍不变,密度恢复依赖外观容量、空间分辨率与测量设计。

TMLE与AIPW的样本分割选择:交叉拟合与重复分割的影响
一项TMLE与AIPW模拟研究发现,样本分割方式显著影响区间覆盖率:样本内拟合倾向得分可使覆盖率跌至0.12-0.48,双nuisance交叉拟合则恢复至0.91-1.00;近正性下AIPW优于未加权TMLE,重复划分降低划分依赖但使区间更保守。