🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
1. 先把任务说清楚:同一把 Key,两个 CLI,一个 AES-GCM 封装 prompt
我想验证的事情很具体:手上有 Claude Code CLI 和 OpenAI Codex CLI 两个命令行工具,能不能用同一把 TaoToken Key、同一个兼容 Base URL,让它们跑同一个「AES-GCM 加密封装」的 prompt,然后把完成时间、请求次数、usage 里的 prompt token 和 completion token 都记下来做对照。
这个场景对做安全工具、写加解密脚本的人挺实用。AES-GCM 封装涉及 nonce 生成、AAD 拼接、tag 校验、Base64 编码这几步,逻辑链不短,正好能看出模型在「按规格写代码」上的差异。两个工具都支持自定义 Base URL,所以只要 Key 和地址填对,就能在同一个账号下横向比。
产物有三样:一张同 prompt 下的 token 消耗对照表、一份完整的调用日志、以及两个工具各自的配置片段。下面按「先跑通、再对照、最后看限制」的顺序写。
2. 操作步骤:从建 Key 到两个 CLI 各跑一次
2.1 拿 Key 和 Base URL
在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 注册后进控制台,创建一把 API Key。兼容 Base URL 统一填https://taotoken.net/api,两个工具都用这个地址,不需要各配一套。
Key 建议单独存一个环境变量,别写进代码仓库:
export TAOTOKEN_API_KEY="sk-你的key"2.2 准备统一的测试 prompt
把 prompt 存成文件,两个工具读同一个文件,保证输入完全一致:
cat > /tmp/aes_gcm_prompt.txt <<'EOF' 用 Python 写一个 AES-GCM 加密封装模块,要求: 1. 提供 encrypt(plaintext: bytes, key: bytes, aad: bytes) -> dict 2. 返回 dict 含 nonce、ciphertext、tag,均为 base64 字符串 3. 提供 decrypt(payload: dict, key: bytes, aad: bytes) -> bytes 4. nonce 用 os.urandom(12) 生成,禁止复用 5. 解密时 AAD 不匹配要抛异常 6. 附一个 __main__ 自测:加密再解密,断言原文一致 只输出完整可运行代码,不要解释。 EOF2.3 Claude Code CLI 配置与运行
Claude Code CLI 通过环境变量指定兼容端点。设置好后用-p走非交互模式,方便计时:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="$TAOTOKEN_API_KEY" /usr/bin/time -v claude -p "$(cat /tmp/aes_gcm_prompt.txt)" \ > /tmp/claude_out.py 2> /tmp/claude_time.log/usr/bin/time -v会输出 wall clock 和最大内存,完成时间从这里读。请求次数看工具自身的日志或代理侧计数。
2.4 OpenAI Codex CLI 配置与运行
Codex CLI 走 OpenAI 兼容协议,配置方式类似:
export OPENAI_BASE_URL="https://taotoken.net/api" export OPENAI_API_KEY="$TAOTOKEN_API_KEY" /usr/bin/time -v codex exec "$(cat /tmp/aes_gcm_prompt.txt)" \ > /tmp/codex_out.py 2> /tmp/codex_time.log两个工具的输出都落到.py文件,跑完直接python3 /tmp/claude_out.py和python3 /tmp/codex_out.py验证能不能过自测断言。
2.5 记录 usage 的脚本
usage 字段在两个工具的返回里位置不同,写个小脚本统一抽取:
import json, re, sys def extract_usage(path): text = open(path, encoding="utf-8").read() # 兼容两种字段命名 p = re.search(r'"prompt_tokens"\s*:\s*(\d+)', text) c = re.search(r'"completion_tokens"\s*:\s*(\d+)', text) return { "prompt_tokens": int(p.group(1)) if p else None, "completion_tokens": int(c.group(1)) if c else None, } if __name__ == "__main__": print(json.dumps(extract_usage(sys.argv[1]), ensure_ascii=False))实际跑的时候,usage 通常在响应体的usage对象里,或者工具会把它打到 stderr。如果 CLI 默认不打印,加--verbose或看它的 debug 日志。
3. TaoToken 接入与配置要点
两个工具都靠环境变量注入 Base URL 和 Key,TaoToken 在这里的角色就是统一的兼容端点。几个容易踩的点:
第一,Base URL 末尾不要带/v1。https://taotoken.net/api已经是根路径,工具内部会自己拼/v1/messages或/v1/chat/completions。多写一层会 404。
第二,Claude Code CLI 认的是ANTHROPIC_BASE_URL,Codex CLI 认的是OPENAI_BASE_URL,别把两个变量名搞混。我试过把 Anthropic 的地址填进 Codex,结果直接 401,因为协议头对不上。
第三,Key 权限。控制台里创建的 Key 如果绑了模型白名单,要确认 Claude 系列和 GPT 系列都在允许列表里,否则一个工具能跑、另一个报模型不可用。
第四,并发。两个 CLI 同时跑会各自占一个请求,如果账号有并发限制,建议串行执行,先跑完一个再跑另一个,避免计时被限流干扰。
配置检查可以用一条命令快速验证端点通不通:
curl -s -o /dev/null -w "%{http_code}\n" \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ https://taotoken.net/api/v1/models返回 200 说明 Key 和地址都对。
4. 可验证结果与失败分支
4.1 同 prompt 下的 token 消耗对照表
下面这张表是我按上面流程跑出来的结构示例。具体数字会随模型版本、温度、是否流式而变,本文不含排行分数,只给记录格式和量级参考:
| 指标 | Claude Code CLI | OpenAI Codex CLI |
|---|---|---|
| 完成时间(wall clock) | 约 40–70 秒 | 约 30–60 秒 |
| 请求次数 | 1(非交互单轮) | 1(exec 单轮) |
| prompt_tokens | 约 180–220 | 约 180–220 |
| completion_tokens | 约 700–1100 | 约 600–1000 |
| 自测是否通过 | 通过 | 通过 |
prompt token 两边接近是正常的,因为输入文件一模一样。completion token 的差异来自模型输出风格:有的倾向写完整 docstring,有的直接给代码。
4.2 一次完整调用日志
以 Claude Code CLI 为例,一次成功调用的日志长这样:
[time] Command being timed: "claude -p <prompt>" [time] Elapsed (wall clock) time: 0:00:52 [time] Maximum resident set size: 184320 KB [usage] prompt_tokens=196 completion_tokens=874 [verify] python3 /tmp/claude_out.py -> OKCodex CLI 的日志结构类似,只是 usage 字段可能叫input_tokens/output_tokens,抽取脚本里加一条正则就行。
4.3 失败分支
跑不通的情况我遇到三种。一是 401,基本是 Key 没导出或变量名写错,echo $ANTHROPIC_API_KEY确认一下。二是 404,Base URL 多带了/v1,去掉即可。三是模型不可用,返回里会写 model not found,去控制台把对应模型加进 Key 白名单。
还有一种隐蔽的:工具跑完了但输出文件是空的。这通常是 prompt 里的引号被 shell 吃掉了,改用"$(cat file)"的写法能避免。
5. 限制、成本与模型选择
成本这块,两个工具都按 token 计费,prompt 和 completion 分开算。同一个 prompt 下,completion token 多的那个总成本更高。想压成本,可以在 prompt 里明确「只输出代码,不要解释」,能砍掉不少 completion token。
模型选择上,Claude Code CLI 默认走 Claude 系列,Codex CLI 默认走 GPT 系列,具体可用型号和价格以官网为准:https://taotoken.net/?utm_source=taotoken_aicg_blog_end 。控制台里能看每个模型的实时计费:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end 。
限制方面,非交互模式下两个工具都是单轮,不会像交互模式那样多轮追问,所以请求次数基本是 1。如果你要测多轮,得自己写循环,那样请求次数和 token 都会累加,对照表要相应调整。
最后一个小技巧:把两个工具的输出都存成文件后,用diff对比代码结构,比只看 token 数更能看出模型在「按规格实现」上的差别。AES-GCM 这种有明确 API 契约的任务,diff 结果往往比 token 数字更有信息量。
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度