← 博客首页 Codex App 的 token 税 CLI 0.149.1 ChatGPT.app 26.818

Codex App 与 CLI 的 token 差在哪:本机 app-context 对照

我对照本机 Codex CLI、ChatGPT.app 的 Codex 模式和会话文件,想知道桌面端多带了哪些内容。两边记录的基础指令相同;Desktop 另有默认约 949 token 的 app-context,带 Git 设置的样本为 1,203 token。下面把这个输入差异与缓存、费用估算分开说明。

核对日期 2026-08-27 · tokenizer tiktoken o200k_base · 模型 gpt-5.6-sol · 数据见同目录 aggregate.json

Base Instruction 3,552 CLI 和 Desktop 同一份,SHA 前缀 cbefa6b0bede
App 默认多出来 949 <app-context>,12 条 Desktop 会话都在这个量级
200K 长对话额外税 < 1 cr 大约 0.3–1 credit,相对整段对话费用不到 1%

先限定比较对象

这里比较本机两种 Codex 客户端的请求构造,不比较普通 ChatGPT 聊天。两边使用相关的 Rust app-server 路径,但这不足以单独证明服务端对所有客户端、账号和套餐执行完全相同的计费规则。本文可核对的是指令文本、客户端配置和已有会话记录。

真正多出来的,是 Desktop 写进 history 的那段 <app-context>。默认 949 token。第一轮就在,后面每轮还带着,但不会 949、1898 那样叠加。

普通 ChatGPT 聊天气泡不走这条链路。Help Center 写明 Regular Chat 不进 Desktop 的 Codex 用量看板。本文只比较 Codex CLI 和 ChatGPT.app 里的 Codex 模式。

本机安装的两个客户端版本

我看的安装包是 ChatGPT.app 26.818.61809,bundle id com.openai.codex,从 codex/codex-apps/electron 打出来。旁边还有 ChatGPT Classic.app(com.openai.chat),那是旧聊天客户端。现在这个 ChatGPT.app 里同时有 Codex 线程和 ChatGPT 会话,别把两者的额度混着谈。

捆绑的 codex 二进制版本是 0.149.0-alpha.4.3。本机 npm 安装的 CLI 是 0.149.1。两个 Mach-O 都大约 210MB,都带 https://chatgpt.com/backend-api/codex 这条基址。

请求怎样进入 app-server

CLI 的 TUI 在进程里启动 app-server,client_name 是 codex-tui。Desktop 用 stdio 拉起捆绑二进制,originator 写成 Codex Desktop,并且固定加上 -c features.code_mode_host=true。

CLI 和 Desktop 汇入同一条 Codex 请求 CLI TUI codex-tui Codex App Codex Desktop app-server + core build_responses_request /backend-api/codex input / cached / output

请求体在 ModelClient::build_responses_request 里拼出来:instructions、input、tools、推理设置,并用 thread_id 当 prompt_cache_key。开源仓库里,ChatGPT 登录的基址是 https://chatgpt.com/backend-api/codex。公开文档也写明富客户端连的是同一套 app-server。

Base Instruction 两边就是同一份

生产目录不再用仓库里那份写着 “running in the Codex CLI” 的 prompt.md 兜底。本机 ~/.codex/models_cache.json 在 2026-08-26 拉到的 gpt-5.6-sol 模板是 17,730 字符。CLI 会话和 Desktop 会话落盘的 base_instructions.text 与这份模板逐字节相同。

17,730字符
17,766字节
3,552o200k token
13.8%占 CLI 实测首包 25,832

这份基础指令与桌面 app-context 分开记录。不同模型的指令长度也不同;原稿统计的 gpt-5.4-mini 约为 2,303 token,gpt-5.5 约为 4,090 token。不能把它们算作只属于 Desktop 的开销。

Desktop 额外附带的 app-context

Electron 把一段 <app-context> 塞进第一段 developer 消息。CLI 的 TUI 启动线程时不传这段。最近 12 条 Desktop 会话(0.148 到 0.149)默认都是下面这组小节:

小节o200k作用
# Codex desktop context31声明你在桌面 App 里
### Images/Visuals/Files228图片要用绝对路径 Markdown
### Automations93自动化走专用工具
### Thread Coordination428create_thread 等线程工具
### Inline Code Comments168::code-comment
小节合计948实测整段 949,差 1 token 来自拼接

视线程类型还会再加:工作区依赖 27、Git 设置 244、无项目目录 140。自动化线程另有 remark-directive 709,手聊没有。用户会话(带 Git)整段 app-context 实测 1,203。

在这些会话样本中,app-context 从第一轮就存在。基础指令相同,与开发者消息中另有桌面上下文并不矛盾。实际长度还会随线程设置变化。

每轮都带,不等于每轮按全价再收一次

为了看清重复部分,可以把请求中的基础指令、桌面上下文、历史和新增内容分别列出:

  1. 信头:Base Instruction + tool 定义,几乎固定。
  2. 已经写过的正文:对话、工具结果、Memory、AGENTS.md,以及 Desktop 的 app-context。
  3. 这轮新写的几行。

同一 thread 使用相同的 prompt_cache_key,但有这个字段不保证每次都命中缓存。是否按 cached input 计量,要查看具体请求的 usage;前缀变化、失效和路由等都可能影响结果。后面的计算器只是给定命中假设后的估算。

按原稿采用的 Sol credit 单价,949 token 全部未命中时约为 0.095 credit,全部按缓存输入计算时约为 0.0095 credit。这是给定单价的算式,不是每轮实测账单。

从 usage 看实际命中,而非只看线程名

本机一条 CLI 会话的 token_count 是这样涨的。input 变大是因为历史在长,不是 Base Instruction 从 3,552 变成了别的数:

第几次inputcached命中率uncached
125,8325,88822.8%19,944
235,66525,34471.1%10,321
338,01534,56090.9%3,455
756,42156,06499.4%357

Desktop 的这条首包记录已有缓存:27,946 input 中 cached 为 6,912。因此,新建 thread 不等于所有前缀必然按未缓存输入计费;应读取实际 usage,不能仅用“第一轮”推算。

费用估算要给出调用次数和命中假设

对话增长到 200K,不会把固定的桌面段自动变成一个百分比加成。估算需要知道每次 app-context 的长度、模型调用次数 N,以及各次缓存命中情况;一句用户消息也可能产生多次工具循环。

额外 credit
949 / 1,000,000 × [100 + 10 × (N − 1)]
调用次数 N额外 credit怎么理解
10.095整段一次性塞进去;相对 200K 未缓存 input(20 credit)约 0.5%
200.28短一点的 agent 会话
500.56更常见的长会话
1001.03工具很碎、轮次很多

下方示例假设固定增加 949 token、第一调用未命中、之后全部命中,再沿用原稿单价计算。只要长度、调用次数或命中情况改变,结果就会变。因此不能把“200K 对话”直接等同于固定的 0.3–1 credit 差额。

本文不把这个估算换算成美元,也不据此推荐套餐。额度计量、套餐内使用和追加购买是不同问题,需要对应账号的正式账单或价格说明。

0.56额外 credit(Sol 官方卡)
~$0.02非正式换算,按 1 credit ≈ $0.04

工具和插件:核心一样,外壳不同

核心 tool 规划器是同一份 spec_plan.rs。这台机器的 ~/.codex/config.toml 两边共用,启用了 12 个插件。ChatGPT.app 还捆绑了 config 里没有的 5 个:messages、latex、deep-research、computer-history、record-and-replay。

本机 CLI 和 Desktop 会话的 skills 清单都是 55 条、同名。Apps 连接器工具缓存 159 个;因为 ≥100,会走 tool_search 延迟加载,不会把大约 198k token 的 schema 整包塞进每一轮。

两边暴露的工具还可能不同:TUI 的插件发现和安装路径有限制,Desktop 可能包含线程协调或 Computer Use 工具。相关 schema、截图和工具结果不在默认 949 token 中,不能用这一个数字概括总输入差异。

把首包 input_tokens 减去 instructions 和已落盘 messages 后,CLI 约剩 8,847,Desktop 约剩 9,186–9,268。这些余量可能包括工具 schema 和未写入 rollout 的字段,但样本不是受控 A/B,也没有逐项捕获请求体,所以不能将差额精确归因于工具。

证据边界

同目录 aggregate.json 和 verify.mjs 会把小节合计、credit 公式和 cache 序列再算一遍。构建时走 bun run verify:articles。

主要材料:build_responses_request、Codex 基址、App Server 文档、Using Codex with your ChatGPT plan、Codex pricing。

文章目录10
Silent Star约 6 分钟