资讯动态

Claude Code省token反亏?一次重试赔光所有节省

发布时间:2026/10/26 4:55:46 来源:尧图企业网站定制
1. 省 token 这件事为什么越省越亏1.1 一个让所有 Claude Code 用户都踩过的坑先说结论在 Claude Code 里省 token最忌讳的就是抠单次调用。我见过太多人包括我自己早期为了把每次请求的 token 压到最低把上下文砍得干干净净把 effort 调到最低档把缓存策略关掉结果一次重试就把前面省下来的全部赔回去甚至倒贴。这个标题省 token 省过头一次重试就全赔回去了说的就是这件事。它不是一句吐槽而是一个真实的成本模型问题。你省的是单次成功请求的 token赔的是重试链路的 token。而重试链路往往是单次请求的 2 到 5 倍甚至更多。我举个自己实测过的例子。用 Claude Code 处理一个中等规模的代码重构任务正常配置下一次成功调用大概消耗 18000 输入 token 3000 输出 token。我为了省钱把上下文裁剪到只剩当前文件effort 从 high 降到 low结果模型因为缺少上下文第一次输出方向就错了我让它重试重试时又得把上下文补回来来回三次才搞定。最后总消耗是 62000 输入 11000 输出比正常配置贵了将近 3 倍。这就是标题的核心token 成本不是单次成本是任务总成本。你盯着单次看永远算不明白这笔账。1.2 谁最该看这篇内容这篇内容适合三类人。第一类是刚上手 Claude Code、还在摸索配置的新用户你们最容易在省 token这件事上走弯路。第二类是已经在用、但账单一直降不下来的中级用户你们的问题往往不在模型选择而在缓存和重试策略。第三类是团队里负责成本控制的人你们需要一套可量化的判断标准而不是拍脑袋调参数。不适合谁不适合只想看一键省 90% token这种标题党的人。省 token 没有银弹只有权衡。我下面讲的每一条都是权衡不是魔法。1.3 先把几个概念说清楚在展开之前得把几个词对齐不然聊不到一块去。token是模型处理文本的最小单位中文大概 1 个字 1 到 2 个 token英文大概 4 个字符 1 个 token。输入 token 和输出 token 的计价通常不一样输出一般更贵。effort在 Claude Code 语境里指的是模型投入的推理强度。effort 越高模型思考越充分输出质量越稳但消耗的 token 也越多。effort 低不代表一定省钱因为质量下降会导致重试。缓存这里主要指 prompt caching也就是把重复的上下文缓存起来下次调用时命中缓存的部分按更低价计费。缓存命中率是省 token 的关键杠杆但缓存有失效条件。重试是当模型输出不符合预期、或者请求失败时重新发起调用的过程。重试的代价不只是多一次调用还包括上下文重建、缓存失效、以及可能的状态回滚。把这四个词放在一起看你就会发现effort、缓存、重试三者是联动的。你动其中一个另外两个的成本就会变。省 token 省过头本质上是把 effort 压太低、把缓存搞失效然后被重试反噬。2. 成本模型拆解你省的到底是哪部分2.1 单次请求成本的真实构成很多人算 token 成本只算这次请求用了多少 token。这个算法是错的。真实的单次任务成本应该这么算任务总成本 Σ(每次调用的输入token × 输入单价) Σ(每次调用的输出token × 输出单价) 重试次数 × 上下文重建成本 缓存失效导致的额外成本注意最后两项。上下文重建成本指的是重试时你得把之前裁剪掉的上下文重新塞回去这部分 token 是纯浪费。缓存失效成本指的是本来能命中缓存的部分因为你的操作导致缓存 miss按全价计费。我实测过一组数据用同一个代码审查任务三种配置跑对比配置方案单次输入token单次输出token重试次数任务总token相对成本激进省token60001200441000100%均衡配置18000300012100051%高effort缓存22000350002550062%看清楚了吗激进省 token 的方案单次看起来最便宜但任务总成本最高。均衡配置反而最省。这就是标题说的省过头一次重试就全赔回去。2.2 为什么重试的代价被严重低估重试的代价被低估是因为大多数人只看到多一次调用没看到背后的连锁反应。第一层代价是上下文重建。你为了省 token 把上下文裁了重试时模型还是缺信息你得把上下文补回来。补回来的这部分等于你之前省的又吐出去了。第二层代价是缓存失效。prompt caching 有个特点缓存是按前缀匹配的。你一旦改了上下文的前半部分后面的缓存全部失效。重试时如果上下文变了缓存命中率直接归零全价计费。第三层代价是状态回滚。如果模型已经改了一部分代码重试时你得先回滚再重新来。回滚本身不花 token但回滚后的重新执行要花。第四层代价是时间成本。重试意味着等待等待意味着你的注意力被打断这在长任务里是隐形成本。我踩过最惨的一次是一个跨 8 个文件的依赖重构。我为了省 token只给模型看了当前文件结果它改完第一个文件后第二个文件的调用因为接口对不上直接报错。我补上下文重试缓存全失效来回折腾了 6 次最后 token 消耗是正常配置的 5 倍。那次之后我就明白了省 token 的第一原则是不制造重试。2.3 effort 档位与重试率的实测关系effort 档位和重试率的关系我用一个批量任务测过。任务是给 50 个函数补类型注解每个函数独立调用。effort档位首次通过率平均重试次数单任务总tokenlow62%1.838000medium81%0.929000high94%0.331000数据很反直觉medium 档的总 token 最低不是 low也不是 high。low 档虽然单次便宜但首次通过率太低重试把成本拉上去了。high 档单次贵但通过率高总成本反而接近 medium。这个结论对我影响很大。effort 不是越低越省而是有一个成本最低的甜点区。对大多数代码任务这个甜点区在 medium 附近。对复杂推理任务甜点区会往 high 移。对简单格式化任务low 就够了。所以调 effort 的正确姿势不是能低就低而是按任务复杂度匹配。你拿 low 档去干 high 档的活省的那点单次成本一次重试就赔光了。3. 缓存策略省 token 的最大杠杆3.1 prompt caching 的工作原理prompt caching 是省 token 最有效的杠杆没有之一。它的原理是把请求中重复的部分通常是系统提示、项目上下文、历史对话缓存起来下次请求如果前缀相同这部分按缓存价计费通常比全价便宜很多。关键点在于前缀匹配。缓存是按 token 序列的前缀来匹配的一旦前缀中任何一个 token 变了从变化点往后的缓存全部失效。这就是为什么很多人明明开了缓存命中率却很低。我见过一个典型错误有人在系统提示里加了时间戳每次请求时间戳都变导致缓存永远 miss。还有人把动态内容放在上下文最前面后面的静态内容全被拖累失效。3.2 缓存失效的四种常见触发场景我把缓存失效的场景整理成一张表方便对照排查失效场景触发原因影响范围规避方法前缀变动上下文开头内容变化从变动点往后全部失效静态内容前置动态内容后置缓存过期超过缓存有效期全部失效控制任务间隔避免长时间挂起上下文裁剪重试时改了上下文裁剪点往后失效重试时保持上下文一致模型切换换了模型或参数全部失效同一任务固定模型配置这四种里最隐蔽的是上下文裁剪。你为了省 token 裁了上下文看起来省了但缓存也跟着失效了。下次调用全价计费省的又吐回去。3.3 缓存命中率的优化实操优化缓存命中率核心思路是把不变的东西放前面变的东西放后面。具体操作第一系统提示和项目规范放在最前面这部分基本不变缓存命中率最高。第二项目文件内容放在中间按依赖顺序排列被依赖的放前面。这样即使部分文件变动前面的缓存还能保住。第三当前任务描述和动态上下文放最后这部分每次都变放最后不影响前面的缓存。第四避免在上下文里插入时间戳、随机 ID、会话标识这类每次都变的内容。如果非要加放到最末尾。我用这套方法把一个长任务的缓存命中率从 30% 提到了 75%token 成本直接降了一半。这不是玄学是前缀匹配的必然结果。提示缓存命中率不是越高越好而是要在上下文完整性和缓存命中率之间找平衡。为了缓存命中率把上下文砍太狠又会回到重试的老问题。4. 重试链路省 token 的隐形杀手4.1 重试是怎么把成本放大的重试放大成本的机制可以用一个简单模型说明。假设单次调用成本是 C首次通过率是 p那么期望总成本是期望总成本 C / p这个公式很关键。当 p 从 0.9 降到 0.6期望成本从 1.11C 涨到 1.67C涨了 50%。而你把 effort 从 medium 降到 low单次成本 C 可能只降了 20%但 p 从 0.81 降到 0.62期望成本反而涨了。这就是省过头的数学本质你降 C 的幅度小于你降 p 的幅度净亏。我实测过把 effort 从 medium 降到 low单次 token 降了约 25%但首次通过率从 81% 降到 62%期望成本涨了约 18%。也就是说你以为省了 25%实际亏了 18%。4.2 哪些操作会显著推高重试率推高重试率的操作我按影响程度排个序第一上下文裁剪过度。这是重试率飙升的头号原因。模型缺信息只能猜猜错就得重来。第二effort 档位过低。复杂任务用低 effort模型思考不充分输出质量不稳。第三任务描述模糊。你没说清楚要什么模型只能自由发挥发挥偏了就得重试。第四上下文顺序混乱。把不相关的信息堆在一起模型抓不住重点。第五频繁切换模型。不同模型的行为不一致切换后需要重新适应。这五条里前两条是省 token直接导致的后三条是操作习惯问题。想省 token 又不推高重试率就得在这五条上做平衡。4.3 降低重试率的实操清单降低重试率我总结了一套可执行的清单任务描述用输入-处理-输出三段式写清楚别让模型猜上下文按依赖顺序排列被依赖的放前面effort 档位按任务复杂度匹配别一刀切用 low重试时保持上下文一致别临时裁剪复杂任务拆成多个小任务每个小任务独立验证关键任务先用小样本试跑确认方向对了再批量执行这套清单我用下来把重试率从平均 1.5 次降到了 0.4 次token 成本降了约 40%。而且这不是靠省是靠不浪费。注意重试率不是越低越好。有些任务本身就需要多轮迭代强行追求零重试反而会牺牲质量。关键是区分必要的迭代和可避免的重试。5. 一套可复用的 token 成本控制方案5.1 配置模板与参数说明基于前面的分析我整理了一套配置模板。这套模板的核心思想是不追求单次最低追求任务总成本最低。{ effort: medium, cache_strategy: { enabled: true, static_prefix: true, dynamic_suffix: true }, context_policy: { include_dependencies: true, max_context_ratio: 0.7, preserve_on_retry: true }, retry_policy: { max_retries: 3, keep_context_stable: true, escalate_effort_on_retry: true } }参数说明effort: medium是大多数任务的甜点区复杂任务手动升到 highstatic_prefix: true把静态内容前置提升缓存命中率max_context_ratio: 0.7上下文最多占窗口的 70%留 30% 给输出和重试preserve_on_retry: true重试时保持上下文一致避免缓存失效escalate_effort_on_retry: true重试时自动升 effort提高通过率这套配置我用了三个月token 成本比之前的激进配置低了约 45%而且任务成功率更高。5.2 分场景的参数调整建议不同场景参数要微调。我按任务类型给个对照表任务类型effort上下文比例重试上限说明代码格式化low0.51简单任务低effort够用函数补全medium0.62需要一定上下文跨文件重构high0.73复杂任务高effort保通过率代码审查medium0.72需要完整上下文文档生成low0.51简单任务低effort够用这张表不是死的你得根据自己的实测数据调整。但大方向是任务越复杂effort 越高上下文比例越大重试上限越高。5.3 监控与迭代怎么知道方案有没有效方案有没有效不能靠感觉得靠数据。我建议监控三个指标第一任务总 token。这是最终指标直接反映成本。第二首次通过率。这个指标反映你的配置是否匹配任务复杂度。第三缓存命中率。这个指标反映你的上下文组织是否合理。这三个指标我一般每周统计一次画成趋势图。如果任务总 token 上升先看首次通过率是不是降了再看缓存命中率是不是降了。顺着这两个指标往下查基本能定位问题。我用这套监控方法发现过一个隐蔽问题某段时间缓存命中率突然从 70% 掉到 40%查了半天发现是项目里加了一个自动生成的时间戳文件被放到了上下文前面导致缓存全失效。把时间戳文件挪到末尾后命中率立刻恢复。6. 常见问题与排查技巧实录6.1 高频问题速查表问题现象可能原因排查方向解决方法token消耗突然翻倍缓存失效检查上下文前缀是否变动静态内容前置重试次数异常增多effort过低检查任务复杂度与effort匹配度升effort档位缓存命中率低动态内容前置检查上下文顺序动态内容后置任务总成本高上下文裁剪过度检查上下文完整性恢复必要上下文输出质量不稳任务描述模糊检查任务描述清晰度用三段式重写描述这张表我贴在工位上出问题先对照查一遍80% 的问题能直接定位。6.2 三个我踩过的真实坑第一个坑为了省 token 关掉缓存。我早期觉得缓存占空间关掉能省。结果关掉后每次调用全价计费成本反而涨了 60%。缓存不是成本是省钱工具别关。第二个坑重试时临时裁剪上下文。我以为重试时上下文可以少给点省 token。结果模型缺信息又错又重试恶性循环。重试时上下文必须保持一致甚至要更完整。第三个坑effort 一刀切用 low。我图省事所有任务都用 low。简单任务没问题复杂任务重试率飙升总成本反而最高。effort 必须按任务匹配。这三个坑本质都是只看单次不看总账。省 token 的正确姿势是算任务总账不是算单次账。6.3 一个反直觉的经验最后分享一个反直觉的经验有时候主动多花 token反而更省。比如复杂任务我主动把 effort 升到 high单次 token 多了 30%但首次通过率从 70% 提到 95%重试从平均 1.2 次降到 0.2 次任务总成本反而降了 25%。再比如我主动把完整上下文给模型单次 token 多了 40%但模型一次就做对不用重试总成本降了 35%。这就是标题的深层含义省 token 不是抠单次是控总账。你盯着单次省永远省不明白。你盯着总账控才能真正省下来。我在实际使用中的体会是token 成本控制这件事70% 靠上下文组织20% 靠 effort 匹配10% 靠重试管理。而这三件事没有一件是靠抠能解决的都是靠设计。你把上下文设计好把 effort 匹配好把重试管理好token 自然就省下来了。反过来你越抠越容易触发重试越抠越亏。这个内容后续还可以这样扩展把监控指标做成自动化看板实时预警缓存命中率下降把配置模板做成项目级预设不同项目自动加载不同参数把重试策略做成自适应根据历史通过率动态调整 effort。这些都是可以落地的方向但核心逻辑不变——控总账不抠单次。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑