
最近圈子里聊得最多的就是怎么把 ChatGPT 和 Claude 的 API 账单压下来。我自己没搞什么花活就是把官方那几张折扣牌全都用上Batch 任务五折、Prompt 缓存、配合模型路由把简单请求甩给便宜模型一个月下来确实只花了一半的钱。这不是玄学OpenAI 和 Anthropic 在计费机制上都留了很明显的省钱口子只是大部分人没仔细读文档或者读完后不知道该怎么落到自己的项目里。这篇文章适合 API 重度用户、在 VS Code 里折腾过 Claude Code 的朋友以及拿 Codex CLI 写代码但月底被账单吓到的人。我会从官方省钱机制讲起然后用一份可落地的配置把 ChatGPT Codex 和 Claude Code 串起来最后把这一路上我踩过的坑和网上高频出现的报错一并整理给你。1. 半价不是玄学是官方省钱机制叠加很多人一听“半价”就觉得是第三方转售、拼车、盗刷额度之类的灰色路子。我先把话说清楚真正稳的省钱方式全部都写在了官方计费文档里只是散落在不同页面没人帮你串起来。把这些机制叠加使用之后整体的 Token 成本打到五折附近是很正常的。1.1 Batch API把异步任务直接打个五折OpenAI 的 Batch API 从上线那天起就明码标价异步任务享受 50% 折扣。你提交一批 JSONL 格式的请求OpenAI 在 24 小时内帮你跑完结果写进同一个输出文件。这个东西原本是给大规模数据处理设计的但用在个人开发场景里一样香前提是你能把任务切成异步的。我举个自己的例子。我的博客评论系统有一个“情感分析 自动回复建议”的后台任务之前是用户发一条评论就实时调一次模型单条几美分一个月下来积少成多。后来我把逻辑改成了这样每 6 小时把新增评论打包成一个 JSONL 文件 每行一个请求对象交给 Batch API 轮询任务状态跑完后解析结果写回数据库JSONL 的每一行大概是这个样子{custom_id: comment-1024, method: POST, url: /v1/chat/completions, body: {model: gpt-4.1-mini, messages: [{role: user, content: ...}]}}提交方式和实时调用差不多只是包了一层异步外壳curl https://api.openai.com/v1/batches \ -H Authorization: Bearer $OPENAI_API_KEY \ -H Content-Type: application/json \ -d { input_file_id: file-xxx, endpoint: /v1/chat/completions, completion_window: 24h }改完之后这部分成本直接降了 50%唯一付出的代价是结果延迟了几小时。对评论分析这种场景根本没人觉察得到。Anthropic 的 Message Batches API 也是一样的思路用法类似。所以凡是你能接受的延时任务统统扔进 Batch这是第一个“半价”的来源。1.2 Prompt Caching让缓存命中白赚 90% 的输入成本第二个更狠的省钱点是 Prompt Caching。Claude 这边Prompt 缓存命中之后输入 Token 成本直接降到原来的 10% 左右官方文档里写得很清楚。OpenAI 这边也在 2024 年底全面上线了自动缓存不需要你写额外代码同一个前缀在不同请求之间重复利用时系统自动按缓存价结算。但“自动”不等于“白给”。Claude 的缓存有一个重要前提提示词的前缀部分必须完全一致并且至少要达到 1024 个 Token 才会触发缓存。所以你得主动把系统提示词、工具定义、示例文本这些固定内容放到消息的最前面让它们成为缓存的前缀常驻段。我自己在 Claude Code 里是这么做的把项目的编码规范、技术栈说明、提交信息格式全部写进 CLAUDE.md并且把这个文件的路径配置给 Claude Code 作为额外的上下文。这样每次会话启动时那几百上千 Token 的规范内容都在缓存命中范围内。在 Claude Code 的配置文件里我加了类似这样的设置{ env: { ANTHROPIC_API_KEY: sk-ant-xxx }, permissions: { allow: [Read, Glob, Bash] } }缓存层面不需要额外参数只要你的 CLAUDE.md 内容稳定不频繁改动命中率自然就上去了。我实测下来长会话跑到后面输入 Token 的费用是原来的十分之一这就是“半价”里的第二张牌。1.3 模型路由简单任务别让旗舰模型干第三个机制看起来最土但省钱效果最直接给请求分级。把 GPT-5 这类旗舰模型留给架构设计、代码审查、复杂 Bug 分析把总结、标签、格式化、意图识别这类脏活累活交给gpt-4.1-mini或者claude-3-5-haiku这类廉价型号。可别小看这两类模型的差价。旗舰模型输出 1M Token 的价格是入门级的十几倍只要你有 30% 的请求能路由到廉价模型整体账单就能立刻降下来一大截。路由最简单的实现就是手动在代码里维护一个模型映射表def pick_model(task_type: str) - str: if task_type in {summarize, classify, extract}: return gpt-4.1-mini if task_type in {code_review, architecture}: return gpt-4.1 return gpt-4.1-mini如果嫌手动麻烦可以加一层 LiteLLM 或者 OpenRouter 之类的路由网关但这些属于额外依赖我个人还是倾向用最朴素的条件判断毕竟省钱的第一步就是把模型选择权握在自己手里。2. 环境准备把 Claude Code 装到常用系统里聊完省钱逻辑接下来进入实操。这一章先解决“工具装不上、跑不起来”的问题把环境夯实后面才能谈切换和混合调用。2.1 全局安装与前置条件Claude Code 的官方安装方式非常粗暴一句话搞定npm install -g anthropic-ai/claude-code装完直接敲claude进入交互式会话。前提是你的机器上有 Node.js 18 以上的版本这年头应该没人还在用老古董 Node 了吧。如果你是走原生安装包路线官方也提供了单独的安装脚本本质上就是把二进制下载到本地原理一样。这里我多说一句无论哪种安装方式装完之后一定要新开一个终端窗口再敲命令因为 PATH 环境变量不会自动刷新很多“装完了却提示找不到命令”的假故障就是这么来的。2.2 Windows 与 Linux 的差异Windows 上装 Claude Code最常撞上的坑是这个报错Claude‘s workspace requires the virtual machine platform on Windows. Enable it in “Windows features”.这不是 Claude Code 本身的问题而是它的运行环境依赖 Windows 虚拟机平台。解决方法是打开“控制面板 - 程序 - 启用或关闭 Windows 功能”勾选“虚拟机平台”然后重启。如果不打算用 WSL这一步迟早要做。Linux尤其 Ubuntu上相对简单装完 Node 再全局安装即可唯一要注意的是权限。如果你用 nvm 管理 Nodenpm install -g会自动装到用户目录不需要 sudo这是最干净的状态如果你用的是系统自带 Node大概率会遇到 EACCES 权限错误这时候去 nvm 才是正解我不建议用sudo npm install -g硬刚容易把系统目录权限搞乱。2.3 在 VS Code 里跑 Claude Code现在很多人的日常开发都在 VS Code 里完成直接在集成终端里跑claude自然最顺手。VS Code 的终端会继承工作区的环境变量所以推荐在项目的.env文件里集中管理 API Key然后设置好自动加载set -a source .env set a claude另外有个更省事的思路把 Claude Code 和本地模型串起来。报错热词里有一条“claude code 调用 lmstudio 的本地模型”这其实是个非常实用的省钱补充方案。用 LM Studio 启动本地模型服务后在 Claude Code 的配置里把ANTHROPIC_BASE_URL指向http://localhost:1234/v1再把 Key 填成任意占位符就能让 Claude Code 走本地推理链路。export ANTHROPIC_BASE_URLhttp://localhost:1234/v1 export ANTHROPIC_API_KEYlm-studio export ANTHROPIC_MODELqwen25-coder-7b-instruct本地模型的好处是零 Token 费用适合代码补全、简单重构这种对模型能力要求不高的操作。我也用这个方式做过压测和调优但它毕竟是开源小模型复杂任务还是得切回云端旗舰。3. 用配置切换 ChatGPT Codex 与 Claude Code玩转混合链路“ChatGPT 和 Claude 一起用”这个需求本质上是两个 CLI 工具之间的协作问题。一边是 OpenAI 的 Codex CLI走config.toml一边是 Anthropic 的 Claude Code走settings.json。两边各自维护一套模型列表和 Key但很少有人愿意手动改两处配置所以社区里出现了各种切换脚本比如热词里经常出现的“CC Switch”。3.1 读懂两种 CLI 的配置结构先拿 Codex CLI 开刀。它的配置文件是config.toml核心内容长这样model gpt-5-codex model_provider openai [model_providers.openai] name OpenAI base_url https://api.openai.com/v1 env_key OPENAI_API_KEY看到这里你就明白了热词里那条“the gpt-5.6-sol model is not supported when using codex with a chatgpt acc”是怎么来的你手动在config.toml里写了一个并不存在的模型名或者把gpt-5系列里某个不兼容 Codex 的变体填了进去。Codex CLI 只认它内置支持的那几个模型代号乱填一律报不支持。Claude Code 这边的配置结构更复杂一些主配置在~/.claude/settings.json项目管理规范写在./CLAUDE.md。它的模型相关设置长这样{ env: { ANTHROPIC_MODEL: claude-sonnet-4-20250514, ANTHROPIC_SMALL_FAST_MODEL: claude-3-5-haiku-20241022 } }你要记住的是ANTHROPIC_MODEL控制主对话模型ANTHROPIC_SMALL_FAST_MODEL控制后台快速任务后者用得好的话很多内部小调用会自动走便宜模型这又呼应了第一节说的模型路由。3.2 借助切换工具管理多份配置CC Switch 这类工具的底层逻辑很简单帮你保存多份config.toml或settings.json切换时一键覆盖同时把对应的环境变量也改掉。原理就是备份和恢复没有任何黑魔法。我自己对这种“一键切换工具”持保留态度因为配置文件里往往含有 API Key第三方脚本帮你读写这些文件等于把钥匙交给别人。我更推荐手动做一套切换脚本逻辑透明还不会引入供应链风险。举个可落地的方案。在项目根目录建一个profiles/文件夹放三份配置profiles/ openai-default.toml claude-sonnet.json deepseek-local.json然后写一个简单的切换脚本#!/bin/bash case $1 in openai) cp profiles/openai-default.toml ~/.codex/config.toml echo export OPENAI_API_KEYsk-xxxx .env ;; claude) cp profiles/claude-sonnet.json ~/.claude/settings_extra.json echo export ANTHROPIC_API_KEYsk-ant-xxxx .env ;; deepseek) cp profiles/deepseek-local.json ~/.claude/settings_extra.json echo export ANTHROPIC_BASE_URLhttp://localhost:1234/v1 .env ;; esac每次切换前先git commit当前配置切坏了随时回滚。这套东西我用了好几个月稳定性比任何 GUI 切换工具都强。3.3 一个真正能省钱的混合工作流配置切换只是手段最终要落到工作流上。我个人的习惯是白天写业务代码时用 Claude Code 处理整体架构和代码生成遇到需要严格遵循系统提示词的格式化任务切到 ChatGPT 的 Codex CLI。主要逻辑如下阅读代码、理解项目结构时用 Claude Code配合缓存命中省输入 Token生成大量样板代码时用 Batch API 离线跑完全不占实时额度需要多轮深度对话时直接切到旗舰模型但绝不拿它做无脑翻译和文本分类所有 Key 全部走环境变量配置文件不入库避免泄漏。这套混合链路跑下来我每月的 API 支出从一百多美元降到了五十多美元而且是在任务量几乎没变的前提下实现的。4. 常见报错与排查技巧实录这一节我整理了最近社区里出现频率最高的一批报错给每个报错写明问题原因和实际操作中的解药。你在搜索框里看到的那些热词几乎都能在这张表里对上号。4.1 高频报错速查表报错信息核心原因解决思路无法加载 config.toml此对话串无法继续Codex 配置文件损坏或语法错误备份后重建 config.toml校验 TOML 格式the ‘gpt-5.6-sol’ model is not supported模型名不在 Codex 支持列表内换成官方认可的模型代号error: claude native binary not installednpm 包原生二进制缺失重装 anthropic-ai/claude-code无法将“claude”项识别为 cmdletWindows 下未安装或 PATH 未刷新全局安装并重开终端workspace requires the virtual machine platformWindows 虚拟平台功能没开启用虚拟机平台并重启chatgpt failed to start该进程没有程序包标识符macOS 应用签名或权限损坏重新安装或修复应用签名chatgpt 10013网络端口或系统权限冲突检查端口占用与网络访问权限4.2 config.toml 无法加载的现场修复这个报错我遇到过两次一次是手滑在model字段里粘了带引号的字符串一次是编辑时把写成了:。TOML 格式比 JSON 宽容但对空格和数据类型照样敏感多一个符号就能让整个文件解析失败。修复思路很简单先把现有配置备份然后用toml解析工具逐段检查。cp ~/.codex/config.toml ~/.codex/config.toml.bak python3 -c import tomllib; tomllib.load(open(~/.codex/config.toml,rb))如果 Python 解析报错说明文件里有语法问题根据报错行号去改即可。另外要提醒一句不要在config.toml里写中文注释某些版本的解析器会因编码问题直接罢工。4.3 模型不支持的两种情况“the ‘gpt-5.6-sol’ model is not supported when using codex with a chatgpt acc”这条报错首先要分清你用的是 ChatGPT 账号登录还是 API Key 登录。Codex CLI 对两种登录方式的模型支持列表不同很多新模型名称只在 API 模式下可用ChatGPT 账号反而是绑定的固定模型集合。解决方法是看官方文档里当前模型列表或者直接在配置文件里把model改成最稳妥的gpt-4.1然后再逐步试新模型。还有一种情况是你把模型名拼错了比如写成了gpt-5.6-sol这种看起来很像未来版本的名字实际根本不存在Codex 当然不认识。动配置之前先在官网 Model 页面确认一下编号。4.4 Claude 原生二进制缺失的修复“error: claude native binary not installed. either postinstall did not run”这条几乎都出在 npm 安装过程中 postinstall 脚本没有执行成功常见诱因是网络中断、权限不足或者是 npm 配置里禁用了脚本。我推荐的修复步骤是npm uninstall -g anthropic-ai/claude-code npm cache clean --force npm install -g anthropic-ai/claude-code如果重装之后还是不行检查 npm 配置里是否有ignore-scriptstrue有的话临时改掉再装一次。Windows 上还可能是杀毒软件拦截了安装脚本把安装目录加白名单再跑一遍。4.5 Windows 下的几个关联问题“无法将‘claude’项识别为 cmdlet”这条本质就是 PATH 没配上。npm 全局包的安装路径往往不在系统 PATH 里尤其是在用户级 Node 安装的情况下。解决办法是把 npm 全局目录加入 PATH# PowerShell 中查看 npm 全局目录 npm prefix -g # 将输出路径加入用户 PATH # 系统属性 - 环境变量 - Path - 新建“claude‘s workspace requires the virtual machine platform”这条前面已经说过了去 Windows 功能里勾选“虚拟机平台”重启即可。别硬扛Claude Code 在 Windows 上依赖这个虚拟化层。macOS 上的“chatgpt failed to start. 该进程没有程序包标识符”则是典型的签名校验失败常见于从网上下载的 dmg 被系统隔离。解决方法是xattr -cr /Applications/xxx.app清除隔离属性或者直接从官方商店渠道重新安装。5. 把账单压下来之后别忘了这几件事省钱机制和排错技巧都聊完了最后我想分享几个容易被忽略的细节。这些细节看起来小实际每个月能影响 10% 到 20% 的花销而且决定了你的整套配置能否长期稳定跑下去。5.1 用 Batch 包住能容忍延迟的任务前面提到我把评论分析改成 Batch 任务实际上可以包进去的远不止这些定时生成周报摘要、批量清洗历史数据、给旧代码统一加注释、批量生成测试用例全都可以打包到 JSONL 里扔给 Batch 接口。一个实用的操作思路是在你的服务里加一个任务队列把实时请求和批量请求分流。实时请求走默认同步接口批量请求落库后由定时任务统一提交。这样既不影响在线体验又能把割裂的请求攒成一批去享受五折价格。我自己的经验是只要任务能容忍 30 分钟以上的延迟就尽量走 Batch。Batch 不仅便宜还能减少实时接口的并发压力降低了触发限流的概率属于一举两得。5.2 把缓存命中率当成日常指标来盯很多人设置了 CLAUDE.md 之后就不管了其实缓存命中率是需要维护的。每次你改动了系统提示词里的任何一个字符从那个位置往后的缓存全部失效。所以我的习惯是系统提示词和项目规范变更频率降到最低功能调整优先通过外部参数而不是改提示词正文来实现。Claude 的快速计数接口可以直接看到缓存相关的 Token 统计我在 CI 里加了一个简单的脚本每周拉取一次统计数据观察缓存命中量的变化曲线。如果命中率突然掉了基本就是有人改了 CLAUDE.md 而没通知大家。5.3 团队共用 Key 时做好隔离如果你不是单兵作战而是团队共用一套账单千万别让所有人都直接拿主 Key 裸奔。合理的做法是在主账号下创建多个子 Key各自绑定不同的额度上限或者至少用环境变量区分不同项目。这样即便某个项目的 Key 泄露也不至于影响整张账单。还有一个更简单的小技巧每天看账单明细时按模型维度分组排序最大的开销往往集中在几个特定模型上。你只要盯住这两个模型名再结合模型路由把它们重定向到便宜版本下个月账单立刻有反应。我实际用下来真正能把 ChatGPT 和 Claude 的 API 开销压到一半的不是某一个神秘的折扣渠道而是 Batch 半价、缓存降本、模型路由这三件事的组合拳。把这套机制想明白之后代码基本不用大改成本自然就下来了。如果你也正在被大模型账单追着跑不妨从这周开始先把能挪进 Batch 的任务挪进去再把 CLAUDE.md 固定下来用不了几天就能看到效果。