
1. 月底盘点日OpenAI 账单砍半这件事今天是9月29号离月底结算只剩最后两天。白天我把几个项目的月度数据拉出来做复盘顺手点开OpenAI的用量面板——说实话看到账单的瞬间我愣了一下9月的token消耗量比8月砍了一半还多对应成本从之前的每月一百多美元直接掉到了几十美元量级。这不是我刻意去省而是过去一个月陆陆续续把请求结构、模型路由、缓存策略和重试机制系统性调了一遍效果直接反映到了账单上。巧合的是同一周我还在用Claude Code折腾代码库的自我优化——不是改什么花哨功能就是让它把自己看得见的构建脚本、重复代码、CI流程挨个过一遍该合并的合并该抽公共函数的抽出来。两件事放在同一天复盘正好拼成一张完整的AI工具省钱提效工作流画面。这篇日记适合三类人看一是重度调用OpenAI API做产品的开发者账单肉疼但不知道怎么降二是刚接触Claude Code、想把它用在真实项目里的工程师三是对多模型协作感兴趣想知道怎么让OpenAI、Claude Code、本地模型各干各的活儿而不是互相打架的朋友。先说个结论省钱的本质不是少调用而是让每一次调用的token都花在刀刃上。下面我把账拆开讲。2. 先看数字把8月和9月的用量摊开对比我拉了一个简单的对比表覆盖同一个业务项目的API调用情况指标8月9月变化请求总次数约2.1万次约1.7万次-19%输入token总量约8500万约3900万-54%缓存命中输入token约600万约1500万150%输出token总量约1200万约700万-42%总费用约$142约$63-55%留意一个细节请求次数只降了19%但费用降了55%。这说明问题不出在少调用了而是出在每次调用烧了多少token。8月很多请求是带着几千token的静态前缀进去的同一段内容翻来覆去传给模型账单自然难看。9月起我把请求结构做了手术同样一件事token消耗能差出好几倍。另一个值得注意的指标是缓存命中量翻了1.5倍。OpenAI的输入token如果命中缓存价格大概是原价的十分之一。就是说我并没有减少给模型看的文字总量而是让其中大部分文字走了廉价通道。3. 用量砍半的四个实际动作缓存、瘦身、分级、防重试3.1 把Prompt前缀做成稳定缓存块第一个大动作是让OpenAI的Prompt Caching命中率从20%拉到85%。原理很简单OpenAI会自动缓存请求里前面一段完全相同的token序列第二次及以后再遇到相同前缀就直接读缓存计价低得多。但有个前提——前缀必须真的完全相同。我之前做了一件蠢事在系统提示词里拼上了当前时间戳和随机会话ID导致每次请求的前缀都不一样缓存几乎百分百miss。后来我把system prompt彻底拆开最前面是一段完全静态的角色说明和输出约束任何动态字段用户ID、当前时间、查询参数全部放到前缀后面这样每次请求的前128个token甚至前几百个token都能命中缓存。我还在日志里加了一个字段专门统计cache_read_input_tokens。上线一周命中率肉眼可见地涨从20%跳到80%。单这一项输入侧的费用就降了一大半。3.2 指令瘦身能交给代码的绝不交给大模型第二个动作是砍提示词本身。早期我写prompt有个坏毛病喜欢把所有边界情况和few-shot示例全塞进去一个请求的输入轻松破三千token。后来我反思了一下很多示例其实是给模型补常识而它本身就会根本不需要喂。现在我的原则是能用正则、JSON解析、字符串处理解决的绝不让大模型上。比如从一段日志里提取错误码以前是请帮我解析出错误码这种大模型调用现在就是一个正则表达式的事毫秒级返回零成本。再比如格式化输出我直接让代码做缩进和对齐模型只负责生成原始内容。典型请求从3500token压到700token效果几乎没差别。配合缓存成本是乘法级的下降不只是加法。3.3 模型分级让廉价模型挡第一枪第三件事是我觉得最值的把流量按任务复杂度分流。以前我是gpt-4o一根筋走到底不论什么问题都请最强大脑。后来发现大量请求根本不需要那么强的模型。现在我的路由规则大致是意图识别、实体抽取、文本分类、关键词提取——全部走gpt-4o-mini便宜一个数量级实测准确率不比大模型差甚至更稳代码生成、长文档总结、复杂推理——才轮到gpt-4oo1系列只在极少数需要深度推理的场景才用日常几乎不碰一个月跑下来70%的流量被mini接走了。我一开始担心准确率会崩结果分类任务上mini反而比大模型稳——后来想明白了gpt-4o在长指令下容易想太多把简单问题复杂化mini反而老老实实照指令干活。3.4 结构化输出把重试成本掐死第四个动作可能看起来不起眼但省下的钱很实在强制结构化输出。之前有一类请求老是出问题——我让模型返回一个JSON数组它偶尔会在前面加一段解释文字或者少个右括号导致解析失败。一旦失败我的代码就自动重试一次失败重试就相当于把这次请求的成本翻倍甚至翻两倍。9月在解析层我统一改成要求模型以JSON Schema约束输出OpenAI侧对应的是结构化输出参数Claude侧也有类似的JSON模式。解析失败率直接从5%降到0.2%重试基本绝迹。顺带说一句我还把重试上限从3次砍到2次超过就停下人工介入。以前重试是反正模型会再试一次现在每次重试前我都会先想清楚这条prompt是不是没写清楚是不是该改格式而不是让模型再猜一次4. Claude Code 启动自我优化让AI给自己的代码库做体检4.1 为什么选Claude Code来做这件事聊完省钱回到这周的重头戏用Claude Code做代码库自我优化。我手上有个维护了挺久的项目脚本目录越来越乱构建流程时间越来越长CI日志经常红。要说改吧又不是不能跑但每次改都得在那一堆shell脚本里翻来翻去找逻辑实在折磨人。这周我决定不自己动手让Claude Code把整个仓库读一遍先体检再动刀。Claude Code和普通聊天式AI最大的区别是它不是一个只会在对话框里给建议的顾问而是一个能直接读文件、改代码、执行命令的agent。你在终端启动它它有一个全局视角能看到仓库结构、能跑测试、能看CI日志然后自己决定改哪里、怎么改、改完怎么验证。我用的是Anthropic官方提供的CLI工具答案本身就在终端里操作。对我这种习惯命令行的人来说这个交互方式比网页聊天顺手得多。4.2 第一轮全库扫描把痛点暴露出来我没有一上来就让它改代码而是先让它做诊断。我给它下的指令很简单Scan the repository structure, identify duplicated build logic, and show me the slowest parts of the build pipeline.它先自己跑了一遍目录树、读了Makefile和CI配置文件然后列出一份清单三处几乎一模一样的部署脚本分布在三个子目录里两处硬编码的绝对路径换机器必挂每次构建都会全量复制整个资源目录而不是增量同步测试任务之间没有并行化白白浪费等待时间这份清单一出来我心里就有数了——这跟我想象的问题完全一致甚至比我自己印象中更细。重点是它没有乱改而是先把动了哪些文件、为什么要动列给看我确认后它才开始动手。4.3 第二轮模块拆分和脚本重写确认完诊断结果我让它按优先级逐步执行。第一个任务是把三处重复的部署逻辑抽成公共脚本放到scripts/lib.sh里。它用的方式是先创建一个lib.sh把公共函数写进去然后逐步把三个子目录里的脚本改成调用公共函数。每一步动作前它都会把diff整体展示出来我扫一眼确认没有问题它就继续。我不需要逐行审查但关键的删除和替换动作我都会扫一遍。第二个任务是处理硬编码路径。它建议把所有路径替换成环境变量引用并自动在CI配置里加上变量定义。生成后的代码长这样# 改动前 source/home/olduser/project/assets # 改动后 source${PROJECT_ROOT}/assets第三个任务是最花时间的把全量复制改成增量同步。它读取原来的复制逻辑后改用了rsync并加上了--checksum参数这样每次构建只同步变动过的文件。我跑了一轮对比资源复制耗时从四十几秒降到几秒。4.4 第三轮让AI自己验证自己改的代码改完不等于完事重点是验证。我让它读CI配置文件然后自己跑了一遍完整的测试流程。结果第一轮测试确实挂了——一个函数改名之后某个脚本还在引用旧的变量名。接下来的操作是我觉得最有价值的我没告诉它错误在哪只把测试日志贴回去。它看了日志用grep定位到引用旧变量的那个文件自己修掉了又重新跑了一遍测试。这次全绿。整个过程下来它在我眼皮底下完成了一个完整的发现问题→改造→回归验证→修回归→再验证闭环。作为使用者我的角色是审diff、控制执行权限、在它跑偏的时候喊停纯粹的监工而不是逐行写代码。所谓自我优化说白了就是让AI把项目里自己看得见的低效和不一致清理掉不用我动手写每一行。5. Claude Code 周边配置实录安装、接入各家模型、VS Code集成5.1 安装和升级装Claude Code本身不复杂npm全局安装就行npm install -g anthropic-ai/claude-code升级也简单直接执行claude update它会自动拉取最新版本。我日常会用beta频道尝鲜命令是claude update --beta如果你想稳定为主就不用管beta这个词。如果你习惯在IDE里操作官方有VS Code扩展装Claude Code for VS Code之后可以在编辑器里直接选中一段代码右键发送给Claude让它解释、重构或者写测试。我平时在终端用得多但需要对照着看diff的时候VS Code扩展还是很香的。5.2 用CC Switch切换第三方模型Claude Code默认连接Anthropic官方API但如果你想体验别的模型社区里有个开源工具叫CC Switch专门用来在几套服务之间快速切换配置好之后就不用来回改环境变量了。我实际用它接过几个模型包括DeepSeek-V3.2/R1系列、通义千问的Qwen2.5系列、智谱的GLM-4系列。原理就是修改API Base URL、模型名称和API Key这几项配置。像这样API Base URL: https://api.deepseek.com/anthropic Model: deepseek-chat API Key: sk-xxx需要注意一个关键点Anthropic的消息格式和OpenAI不完全一样所以第三方厂商都会提供Anthropic兼容端点。用CC Switch接入时一定要选对兼容模式否则请求结构对不上报错信息会很隐晦。5.3 接本地模型LM Studio 的折腾记录另一个被问得比较多的是Claude Code能不能调本地模型理论上可以实际要看模型支不支持工具调用。我试过通过LM Studio在本地起一个兼容端点然后把Claude Code指向本地。如果本地模型本身提供Anthropic兼容接口那用起来和官方API没有区别。但很多本地模型只提供OpenAI格式的接口这时需要中间做一层格式转换Claude Code发出的请求要先翻译成OpenAI协议才能被本地模型接收。我的建议是如果只是做代码补全、文本草稿这类轻量任务没必要硬塞进Claude Code但如果确实想让本地模型参与优先选明确支持工具调用的型号比如Qwen2.5-Coder 7B/14B这类。工具调用支持不好Claude Code连读取文件这种基础操作都会翻车。5.4 终端命令权限保证AI能动手但不乱来Claude Code最有威慑力的能力是它能直接执行bash命令。这既是效率神器也是安全隐患。我在项目里设置了一套权限白名单。常见命令比如git diff、git status、npm test、rsync这类只读或验证类命令我允许自动执行但rm -rf、curl管道bash、直接修改全局配置这类高危操作一律要求每次询问我按y才放行。如果你准备让它大规模修改代码我强烈建议先跑一轮权限限制再让它动手。没有边界约束的AI agent在压力下可能会提出一些你绝对不想执行的修复方案。6. 多AI协作让不同模型的手和脑打个配合6.1 为什么不能只依赖一个模型这周我越来越觉得单一大模型不是最佳解法。OpenAI强在结构化输出、生态成熟但贵Claude Code强在长上下文和代码agent执行能力但订阅和API的费用也不低本地模型便宜、数据不出网但能力和稳定性有天花板。我现在的做法是让模型们各自干自己最擅长的活。任务类型用谁原因结构化数据抽取、分类gpt-4o-mini便宜、稳定、够用复杂代码重构、CI排错Claude Code能读代码库、能执行命令、长上下文文档初稿、草稿生成本地模型便宜、隐私好、要求低深度推理、复杂算法设计gpt-4o / o1确实强但成本高只在必要时用6.2 一条实际的协作流水线我举个这周真实发生的例子项目里要加一个小工具模块我拆成了三个步骤。第一层让Claude Code动手重构现有的Python模块它负责理清原有逻辑、抽公共函数、补类型标注。第二层我让gpt-4o-mini生成一批测试用例的输入输出用来覆盖边界情况。第三层让本地GLM模型写一版markdown使用文档的初稿我再来统稿。整个过程消耗的成本大约是用单一大模型硬跑的三分之一。而且时间上也更快因为三个模型可以并行推进我不需要等一个模型把所有事情做完。6.3 顺带一提Codex CLI和Fitten Code如果你在配置OpenAI的Codex CLI最新版的终端里会提示用ChatGPT账号登录按官方提示走sign in流程就行。我在Windows测试机上遇到过missing optional dependency openai/codex-win32-x64的报错原因是npm安装时没有把某个平台相关的可选依赖拉下来重装一下npm包就好了。至于PyCharm用户如果你想要轻量补全可以试试Fitten Code这个插件至少在日常写Python的时候比默认补全靠谱不少而且免费。7. 今天踩的几个坑写出来免得你们再跳7.1 缓存不命中的元凶是动态前缀我前面提到把时间戳放进system prompt导致缓存全部miss其实这个坑比我想象中隐蔽。问题不是有动态内容而是动态内容出现在前缀里。缓存判断是严格前缀匹配只要前缀里任何一个token发生变化整段缓存就失效。我的修复办法是把消息结构改成第一条静态system消息 第二条动态用户消息。这样静态部分始终固定动态内容永远不干扰前缀。查日志时重点看cache_read_input_tokens这个字段它是衡量缓存收益的唯一标准。7.2 组织订阅被禁用这个问题如果你用的是公司或组织账号可能会遇到这样一条报错your organization has disabled claude subscription access for claude code。意思很简单组织管理员在控制台里关掉了订阅账号对Claude Code的访问权限。解决办法有两个一是找管理员在Anthropic控制台的访问权限设置里打开Claude Code的开关二是改用API Key方式运行不走订阅登录通道绕开这个限制。个人开发者一般碰不到这个问题团队用户记得提前确认权限。7.3 CC Switch接第三方模型后工具调用参数对不上这个坑我折腾了将近一个小时。用CC Switch切到DeepSeek后普通对话没问题但Claude Code一旦要调用工具比如读文件、执行命令就报参数错误。原因是DeepSeek的API走Anthropic兼容层时工具调用的参数格式和Anthropic原生格式没有完全对齐。解决办法是要么在CC Switch配置里选专门的兼容模式而不是裸的OpenAI格式要么干脆退回官方API。如果你一定要用第三方模型跑Claude Code先在简单场景验证工具调用可用再上真实项目不然你会被各种隐晦的报错搞疯。7.4 权限失控的瞬间最后说一个差点出事的场景。有一次我按y按太快Claude Code执行了一个find ... -delete命令目标是某缓存目录。虽然最终没造成什么损失但事后我反思了一下当时那个命令的作用范围我并不完全确定盲目放行本质上是在赌它不会误删。从那以后我把规则定死高危命令必须手输确认白名单只维护日常验证类命令每次让Claude Code批量修改前先让它展示完整的操作计划列出了哪些文件会被改、哪些会被删我再决定动哪一part。效率是重要但代码库的安全永远是底线。回到今天盘点的账单看着那两个数字我最大的感触是AI工具省钱和提效靠的不是某一个灵光一现的技巧而是一整套围绕让token花在正确的地方做的工程化改造。缓存、模型路由、结构化输出、权限控制任何单一动作单独拿出来效果都有限合在一起才产生砍半这种结果。你在实际项目里哪怕先捡两三点落地下个月账单应该也能给你一个惊喜。