AI Pulse

聊天记录不烧钱,没用的文件读取和命令输出才烧钱

聊天记录不烧钱,没用的文件读取和命令输出才烧钱

每次对话,Claude Code都会把整个会话历史重新过一遍。提示缓存让这一步很便宜。无用的文件读取和命令输出是另一回事——它们留在上下文里,之后每一轮都要重新传输。

成本从哪里来

输出token的价格大约是输入的5倍,解码过程占用GPU的时间长得多。会话里的大量输出token是思考token。/effort级别控制每轮思考量,选好的级别会被记住,作为下一次会话的默认。想让一次会话完全不思考,可以设置MAX_THINKING_TOKENS=0(Fable 5除外)。这比/effort low更彻底。

提示缓存由Claude Code自动管理,不用手动开。请求的开头和之前相同时,服务器复用已缓存的状态。读取价格只有正常输入的0.1倍。把新内容写进缓存,价格最高到正常输入的2倍。

缓存键绑定了模型、effort级别和快速模式。会话中途切换任何一项,整个对话重新预填充,按全价计费。订阅的缓存过期时间是一小时,API key只有五分钟。想让API key也按小时算,设ENABLE_PROMPT_CACHING_1H=1。

成本由三个变量决定:token数量、它们停留的轮数、同时运行的上下文数。启动时加载的工具定义、系统提示、CLAUDE.md也占空间。在新会话里跑/context,能看到这些还没输入任何指令就存在的内容。CLAUDE.md只放具体指令,工作流相关的说明移到skills里。不需要的MCP服务器,用/mcp关掉。

提问越具体越省钱

提问方式直接影响花多少钱。你说“测试失败了”,Claude得先搜索。grep几次、打开几个文件,才能确认是哪些测试。换成“修复utils.test.ts里的失败测试”,一次文件读取就够。

用@提及文件可以跳过Read调用,但文件本身仍占用上下文。同一文件在后续轮次再次提及会附加第二份副本,所以每个文件在会话里提一次就够。

命令输出是另一处隐藏成本。凡是进过会话的内容,之后每一轮都会重新发送,直到会话结束。超过30,000字符的输出会被写入文件,对话里只保留预览和路径。麻烦的是低于这个数字的输出。把常用的两三个命令连同安静标志写进CLAUDE.md。每次会话都能省出几百行输出和一个回合。

会话管理

长会话的代价在末尾。第40轮要重新读取前39轮的全部内容。同一个任务分散在几个短会话里做,反而便宜。开始新任务用/clear,别把上一个任务的上下文带进下一个。同一任务的前半部分完成了,用/compact。需要找回以前的会话,先/rename再/clear。压缩时可以告诉它保留什么。也可以在CLAUDE.md里写一节"Compact instructions"作为默认偏好。

/rewind和/compact不是一回事。/rewind只切掉末尾几轮,之前的内容还在缓存里,几乎不花钱。/compact要把整个对话重写一遍,之前的缓存全部失效。不过,只要旧对话还没被清出缓存,写摘要本身就便宜。只回退几步时,用/rewind。

在1M上下文模型上,/autocompact 200k可以把自动压缩的安全网恢复到200k阈值。需要Claude Code v2.1.221+。

/loop要单独说。它会作为完整轮次运行,每跑一次都带着整个对话。如果距离上一轮超过一小时,还会叠加缓存未命中。想循环执行任务,在另一个终端开新会话跑。

子代理

子代理有独立的上下文窗口,包含系统提示、工具和CLAUDE.md,但不含主对话。它跑自己的轮次,只有一个答案返回主会话。大量输出不会污染主上下文,处理日志这类产出一大堆但不需要保留的任务很划算。代价是它可能重新读取主会话读过的内容。

会产生大量输出的重复任务,可以给子代理定义haiku或sonnet模型。否则它和主会话跑同一个模型。省不省,取决于主会话里有没有它需要重读的东西。

阅读原文
📚 相关主题 AI开发教程

订阅 AI Pulse

每天 08:00 · 12:30 · 18:30 · 23:50 更新