返回

文章详情

最大化您的Claude Code会话的价值

Hacker News2026年8月14日 16:15

输入和输出令牌请求通过GPU分为两个阶段,并且它们的费用不同。首先,在预填充阶段,模型读取您的请求和上下文:系统提示、您的CLAUDE.md、您的消息,以及自此以来添加到对话中的所有内容(Claude阅读过的文件及其运行的命令输出)。这些是您的输入令牌。然后,在解码阶段,它写出输出令牌:它的思考、它所做的工具调用,以及您看到的文本。这是一次处理一个令牌;200个令牌的响应是模型的200次运行,依次进行。每个令牌,解码会让GPU忙碌更长时间,这就是为什么输出的费用大约是输入的5倍。会话中的许多输出令牌是思考令牌,模型每次轮次的思考量是由努力水平控制的。就像模型一样,您在/effort中选择的级别也会作为下一个会话的默认值保留。提示:在新会话中运行一次/model和/effort,以查看您实际上处于什么状态。两者都会记住您上次选择的内容,您希望这个决定是故意的。提示:如果您已经知道某个会话将是繁重的工作,设置MAX_THINKING_TOKENS=0可以在该会话中关闭思考(Fable 5除外),这是低于/effort low的一步。提示缓存如果请求以与服务器刚刚看到的请求完全相同的令牌开始,那么对于该共享开头的状态会是相同的,因此服务器可以将其保留在上次会话中,并只预填充之后的内容。这被称为提示缓存。从缓存中读取的费用是输入价格的0.1倍,因为服务器加载状态而不是计算它。将令牌写入缓存的费用比正常输入略高,最高可达2倍,因为服务器还必须在之后保持状态。但写入每个令牌只发生一次,0.1倍的读取将在之后的每个轮次中发生。Claude Code在每次请求中管理提示缓存,不需要开启任何功能。但是您可以破坏它,因此了解如何避免这些成本峰值是重要的。假设我们输入 "修复utils.test.ts中的失败测试"。Claude Code为此发送的内容是:Claude Code将第一个请求组装自系统提示(包括工具定义)、您的CLAUDE.md和您的消息,并将其发送出去(输入令牌)。此时缓存中尚未有任何内容,因此所有内容都被预填充并写入缓存。模型无法修复未见过的测试,因此它思考了一下,并以对utils.test.ts的读取调用回应(输出令牌)。Claude Code读取该文件,将其附加到对话中,并再次发送整个内容(输入令牌)。这次,第一个请求的所有内容从缓存中以十分之一的价格读取,而唯有新的内容是:读取调用和文件。现在模型希望获取待测试的文件(输出)。再一次读取、再一次附加,一切又再次发送出去:缓存中的请求1和请求2,第二个文件以全价(输入)。模型以编辑(输出)回应。Claude Code应用了它,附加结果,并再次发送所有内容。情况相同:编辑及其结果是新的,前面的所有内容都是缓存读取(输入)。模型运行npm test(输出)。Claude Code附加测试输出并再次发送所有内容,只有测试输出是新的部分(输入)。测试通过,模型以简短的总结回应(输出)。没有工具调用意味着没有附加内容,且没有请求6,因此我们完成了。对于一个小的修复,这是五个请求,每个请求都包含了直到那时的整个对话。典型的轮次是不平衡的:输入数以万计的令牌,输出几百个。但只有最新的内容以全价被预填充。这就是每轮费用的全部:对历史的缓存读取,新内容的全输入价格,以及响应的输出价格。这适用于订阅。您不会直接看到这些价格,但相同的请求会消耗您的限制。缓存必须从请求的开始到前进时保持匹配,请求总是按以下顺序发送:工具定义、系统提示,然后是对话(CLAUDE.md位于开头)。如果前缀中的任何内容发生改变,后面的所有内容都将被重新预填充。附加到对话末尾的工具结果是理想情况,因为其后没有任何内容。破坏缓存的原因是更改请求前面的任何内容,或更改缓存的关键:/model:每个模型都有自己的缓存,因此在下一个轮次,整个对话将以全价重新预填充。(这包括opusplan,每次进入或退出计划模式时都会切换模型。)/effort:努力水平也是缓存的一个关键部分,因此情况相同。这就是为什么在对话途中切换时,/model和/effort都要求您确认的原因。快速模式:也部分涉及。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡