跳到主要内容

CC Switch v3.16.3 发布 —— 按真实模型计费,用量不再虚高

· 阅读需 8 分钟

CC Switch v3.16.3 封面

用量计费:从「回显什么就记什么」到「实际用了什么就记什么」

这次最核心的改动在计价归因链上。

当请求被路由到不同上游(env 模型映射、Claude Desktop 路由、Copilot 归一化、Codex chat 覆盖)时,代理之前是按上游回显的模型名来归因和计价的。举个例子:你把 kimi/glm 的请求路由到了 Claude 兼容接口,系统会按 claude-* 的价格来算这笔账——token 量是 kimi 的量,价格是 claude 的价格,成本被高估 5–25 倍。

这不是小误差。如果你用路由接管 + 第三方供应商的组合,之前看到的用量数字可能跟真实开销差了整整一个数量级。v3.16.3 的修复方案是:在转发器里捕获真实的出站模型,按「上游回显 → 出站模型 → 客户端别名」的顺序归因,每条记录持久化实际使用的定价依据(schema v11),这个依据贯穿成本回填和 30 天 rollup 裁剪。

类似的问题还出现在格式转换路径上。CC Switch 内部有 Chat、Responses、Gemini 转 Anthropic 等多条转换路径,之前在 caching 的处理上有个隐蔽的双重记账:cache_readcache_creation 被计入了 input token,然后又作为缓存项再算了一次。修正后,代理会在 Claude←OpenAI 路径上把这两项从 input 中排除,Gemini 的缓存提示 token 也做扣减处理。

做 AI 网关类工具最难的不是转协议,而是算账。 协议转错了客户端会报错,一眼就能发现;账算错了用户要月底对账才发现,信任修复成本远高于功能 bug。这一版花大力气修计价归因链,说明团队意识到「计费准确」是网关产品的底线——功能再多,账单不对就是零。

用量看板改版:供应商/模型筛选全局化了

看板的供应商和模型筛选从请求日志表内部提升到了顶栏。现在 Hero 汇总、趋势图、请求日志、两个统计页签——整张看板都可以按某个来源和模型缩小范围。来源按展示名精确匹配(像「Claude (Session)」这种会话占位行也能选),模型按有效计价模型匹配,模型下拉会随所选来源级联,而且两个列表只列出当前时间范围内有数据的选项。

同时额度的查询也做了韧性改进:单次网络抖动不再让卡片变红——查询失败会重试一次,并在网络/超时/5xx 下继续展示上次成功的结果最多 10 分钟。确定性失败(鉴权、空 key、未知供应商、4xx)仍会立即暴露并清空快照,避免凭据过期后陈旧额度又冒出来。

自定义 User-Agent 覆盖:一石二鸟

供应商现在可以设置自定义 UA,而且代理在请求转发、连通性检测和模型列表(GET /v1/models)三条路径上一致应用。这意味着什么?对那些按 UA 白名单放行的 Coding Plan 上游来说,之前你在 UI 里点「检测连通性」可能是绿的,但实际流量里的 codex-cli UA 进了对方的 WAF 被 403 拦——检测成功、代理失败,这种体验很分裂。现在 UA 三处一致,这种不一致不会再出现。

这个功能也间接恢复了 Codex「Kimi For Coding」预设——之前被移除就是因为那个编程端点会 403 拒绝 codex-cli 的 User-Agent,现在设成 claude-cli/* 等白名单 UA 就能正常用了。一石二鸟的设计。

Claude 和 Codex 表单都在高级选项里暴露了这个字段,配有精选的 UA 预设下拉(Claude Code / Kilo Code 等能通过 UA 白名单的家族)和实时格式校验。

Codex 统一会话历史:不止是开个开关

新增了一个可选开关(设置 → Codex 应用增强),让官方 Codex 会话与 CC Switch 的第三方会话共享同一份 resume 历史桶。这句话听起来简单,实际操作涉及:

开启后,live 的 config.toml 会把官方运行路由到一个镜像内建 OpenAI 供应商的共享 custom model_provider(auth.json 不动)。默认只对未来会话生效;开启弹窗提供勾选项,可把已有官方会话迁入共享桶(含逐代备份)。关闭弹窗时提供按备份账本精确还原——只回退备份中记录为 openai 的会话,开启期间新建的会话不会被改动。

这个开关的设计思路是对的:共享历史桶,但还原时能精确区分「哪些是迁移前的官方会话」和「哪些是迁移后的会话」,不会一把推倒。这不是一个简单的「开/关」能概括的——写这段代码的人肯定被「用户开了一周又关掉,关掉后发现旧会话全没了」这种场景坑过。

新模型定价与供应商生态

模型定价种子做了一次全量核价:新增 9 个模型(含 Claude Fable 5、Grok 4.3、Mistral Medium 3.5 / Small 4、Qwen 3.7 Max/Plus 等),按各厂商官方 list 价订正了 28 处既有价格。每处改动同时更新种子(影响全新安装)并向 repair_current_model_pricing 加守卫(修复存量数据库)。

Claude 模型映射从三档扩展到四档(Sonnet / Opus / Fable / Haiku),Fable 5 档位的回落链为 fable → opus → default。同时新增 Unity2.ai 作为合作伙伴供应商,覆盖全部 7 个受管应用。

关于页新增了 Fable 5 Verified 标识,标明这个版本是用 Fable 5 协助开发的——说实话,模型帮开发做代码复查和逻辑梳理这件事本身就是产品的使用案例:一个 AI 网关用它协助开发自己的功能,这种自举的姿态比贴个标签更有说服力。

🔧 修复精选

应用内更新不再卡死:下载—安装—重启整条链路现在完全在后端执行,不再依赖旧 WebView 在应用包已被替换之后继续跑 JS。以前新版已装好,界面却卡在「重启中」必须手动强制退出的问题不复存在。

Codex 升级不再损坏安装:从设置关于页升级 Codex 不再让它抛出「Missing optional dependency」错误。升级链之前会先跑 codex update,但它在 npm 安装下其实是一次裸的重装——即便对应平台的二进制没装上也会报告成功。现在改成「卸载 + 重装」自愈,是唯一能真正补回缺失平台二进制的修复。

跨配置目录切换的接管残留恢复:在代理接管激活时更改配置目录后重启应用,不再把 Claude / Codex / Gemini 留在指向已失效的本地代理上。简单来说就是:你改了配置路径,旧的路由残留应该被清理——这在之前居然没做。

错标 SSE(Server-Sent Events,服务器推送事件)响应聚合:当 MaaS 网关把一个 stream:false 的请求强制流式、并以非 SSE 的 Content-Type 返回 SSE 响应体时,不再以一句晦涩的 422 失败。代理现在会嗅探 SSE、把分片聚合成单个 JSON 再跑转换器——这是典型的「网关兼容性修正是修不尽的」场景,但至少遇到了能兜底,不会崩在用户面前。

Hermes 配置重复 YAML 键:Hermes 配置写入不再累积重复的顶层键(如 mcp_servers),那会导致「Failed to parse Hermes config as YAML: duplicate entry with key」错误。修复保留最后的那份副本,与 Hermes 自身基于 PyYAML 的「后者胜」语义一致。

升级

brew install --cask cc-switch
brew upgrade --cask cc-switch

GitHub Releases 直接下载对应平台安装包,或通过应用内更新器升级。

完整更新日志:GitHub Release

📢 关注我,获取最新开源更新日志和开发者工具动态。

#CCSwitch #AI编程 #网关工具 #模型路由 #开源工具