展示 HN: Claude-thermos - 为您保持 Claude 会话温暖
停止支付重新构建您的 Claude 代码缓存。当您的主代理在子代理上等待超过 5 分钟时,它的提示缓存会默默到期,下一个回合会以写入速率重新编码您整个的对话,而不是以较便宜的方式读取它。在与多个子代理的长会话中,这大约占您账单的 20%。claude-thermos 保持缓存温暖,因此您永远不会支付这笔税。像往常一样使用运行 Claude 代码,但通过 claude-thermos 使用 uvx : uvx claude-thermos # 而不是: claude uvx claude-thermos -p "修复错误" # 任何 claude 参数直接传递。需要 Python 3.11+ 并且 claude CLI 在您的 PATH 中。就这些。加热运行会在后台自动进行。要在不更改命令的情况下禁用某次运行,请设置 CLAUDE_WARMER_DISABLE=1。调优(全部可选):标志 默认值 含义 --idle 270 主代理必须闲置的秒数,才会启动加热 --interval 270 加热周期之间的秒数 --max-cycles 4 每个闲置回合的最大加热次数(自动为无限) --subagent-window 540 子代理被视为“仍然活动”的秒数 为什么您的缓存会不断过期 Claude 代码的提示缓存使用 5 分钟的 TTL。每个回合,您的整个对话历史都从缓存中以 0.1x 的输入价格提供,而不是以全价重新发送,只要缓存保持活着。如果在同一前缀上的请求之间经过超过 5 分钟,缓存就会过期。导致这种间隙的主要原因不是您在思考,而是主代理在子代理上被阻塞,子代理运行超过 5 分钟。子代理有不同的系统提示和工具集,因此其请求有不同的缓存前缀,并且从不刷新主代理的缓存。当子代理工作时,主代理的缓存历史未被更改;超过 5 分钟后就会消失。当子代理返回时,主代理会继续使用一个字节相同的附加历史,并发现其缓存缺失,迫使以 1.25x 的写入速率进行完全重新编码。那时候历史也变得庞大,因此重新编码的成本很高:单个折叠重写 20 万到 50 万个令牌。在大约 185 次本地会话中,这些重建大约占总账单的 22%,支出用于重新编码几分钟前已经缓存的内容。 工作原理 claude-thermos 在一个小的本地反向代理后启动 Claude 代码(它将 ANTHROPIC_BASE_URL 指向一个回环端口;所有流量仍指向真正的 Anthropic API)。观察。代理监视 /v1/messages 流量,将其分组为会话和谱系,谱系是一个缓存前缀,由模型 + 工具集 + 系统文本键控。第一个带有工具的谱系是主代理;其余的是子代理。检测危险窗口。当主谱系闲置且子代理正在积极运行时,主前缀面临过期的风险。加热。在低于 5 分钟 TTL 的间隔内,它重播主代理的最后一个真实请求作为热请求:相同的可缓存前缀,但 max_tokens: 1 且没有流。丢弃了这个单个令牌;关键是预填充,这会读取并刷新完整的缓存前缀。热请求直接发送到 API,而不是通过代理,因此不会干扰真实流量。结果。当子代理完成时,主代理的缓存仍然是温暖的。它支付较便宜的读取费用,而不是完整的重写。每次热请求的费用为缓存读取 (0.1x);每次重写避免的费用会在更大前缀上产生写入费用 (1.25x),因此交易对您有利。 事件日志和节省 每个会话写入到: ~/.claude-thermos/logs/<session_id>/ ├── events.jsonl # 仅附加的结构化事件流 └── summary.json # 总结总数,写入会话结束时 events.jsonl 记录每个请求/响应的令牌使用情况以及每个加热决策 (warm_fired、warm_result、cap_reached、resume_detected 等)。summary.json 是您通常阅读的汇总:字段 含义 warms_fired 发送的热请求 cache_read_total 通过这些加热读取回来的令牌总数 episodes 在成功恢复的闲置-子代理回合中结束(实际上避免了一次重写) rewrite_avoided_tokens 原本会被重写的令牌,在回合中累加 warm_cost 加热对您的成本:0.1 × cache_read_total rewrite_avoided_cost 节省的成本:1.25 × rewrite_avoided_tokens net_savings rewrite_avoided_cost − warm_cost 所有三个成本数字都以基本输入令牌单位(令牌计数已经按其缓存乘数加权)为单位。要将 net_savings 转换为美元,您需要将其乘以模型的每个输入令牌的价格:节省的美元 ≈ net_savings × (输入令牌价格) 例如,在 300 美元 / 100 万个令牌的输入价格下,1_200_000 的净节省大约是 1_200_000 × 300 / 1_000_000 = 3.60 美元的节省。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡