作者的模型循环因缺少停止条件,隔夜消耗了套餐额度的 13 个百分点。文章解释 Claude 与 Claude Code 共享用量池、不同限额的区别,并介绍无人值守循环的三项限制措施。
一个没有停止条件的 LLM 循环,在我的 Claude 订阅上跑了一整夜,消耗了套餐额度的 13 个百分点。问题不在于每个 token 的价格,而在于代码里没有任何机制能结束循环,也没有人看着。这篇文章会介绍 Claude 套餐限额究竟如何运作、如何查看用量,以及我现在为每个无人值守循环设置的三道上限。

Pro 和 Max 订阅都包含 Claude Code,限额分为两项:5 小时的会话限额和 7 天的每周限额。根据 Anthropic 帮助页面的说明,Claude 和 Claude Code 共用同一个额度池。在聊天应用中消耗的额度,会减少 Claude Code 可用的额度,反过来也一样。
正因为额度共享,早上看到用量条“高得出乎意料”时,仅凭终端里的信息很难解释原因。如果部分用量来自聊天应用,它就不会出现在终端的用量明细中。
触及限额时,有两个细节很容易搞错:
usage credits 有一个副作用:prompt 缓存的有效期会从 1 小时(60 分钟)缩短到 5 分钟,因此,同样的使用习惯会带来更高的消耗。另外,Max 套餐附带的每月 API 额度,不能用于扩展 Claude Code 的限额。
在 Claude Code 中输入 /usage。如果你是订阅用户,可以忽略 Session 区块,重点看套餐用量条,以及下方的明细。明细分为三部分:
按 d 查看过去 24 小时,按 w 查看过去 7 天。有一点要注意:这些数字来自当前机器上的本地记录,不包含其他设备和 claude.ai 应用中的用量。
2026-08-01,一个 LLM 循环在未经任何人批准的情况下运行了一整夜,套餐用量增加了 13 个百分点。这里的 13 来自用量表的读数,是运行前后的差值。我刻意没有把它换算成 token 数,因为任何换算系数都只能是估算值。(完整的事故复盘中有详细说明。)
根本原因在于,这个循环停不下来。如果有人盯着,几分钟内就会把它终止。换成更便宜的模型也解决不了问题,因为退出条件依然缺失,只不过消耗得慢一些。

从下面三项中至少选择两项,并在代码中强制执行:连续失败次数上限、总调用次数上限,以及实际运行时长上限。我自己的示例值是连续失败 3 次、调用 200 次和运行 3 小时。
import time
MAX_FAILS, MAX_CALLS, MAX_SECONDS = 3, 200, 3 * 3600
def run(task, step):
start, calls, fails = time.time(), 0, 0
while not task.done():
if fails >= MAX_FAILS:
return "stopped: 3 consecutive failures"
if calls >= MAX_CALLS:
return "stopped: 200 calls"
if time.time() - start >= MAX_SECONDS:
return "stopped: 3 hours"
calls += 1
try:
step(task)
fails = 0
except Exception:
fails += 1
return "done"
每次迭代开始前都会执行检查,函数会返回停止原因,方便记录日志。先测试这些保护条件:给 step 传入一个始终抛出异常的函数,确认恰好尝试 3 次后,就会返回失败提示。
有一个陷阱:遇到 429 后进入冷却等待,并不算设置了上限。它是一种恢复运行机制,因为每到新的限额窗口,它都会让循环重新运行。它只是让循环客客气气地永远跑下去。
这些保护措施只适用于你自己编写的循环。对于 Claude Code 自带的 /loop,需要查看 /usage 中的 Loops 行,再手动关闭它或延长运行间隔。而且,由于明细不包含聊天应用的用量,早上看到用量条偏高时,单凭屏幕上的信息并不总能确定消耗来自哪里。
完整复盘,以及关于限额、额度和模型切换的 FAQ,都收录在 my-blog.org 上的原文中。
我自己的网站上还提供免费工具:34 个计算器和操作指南,涵盖贷款、离职补偿、税后工资,以及储蓄与存款对比。有新内容时,会通过一封邮件统一通知,不含广告。
如果需要采取进一步行动,你可以考虑屏蔽此人,或举报滥用行为。