2026-10-02 更新:Sonnet 已升级为 Claude Sonnet 5.5,上游与 API 模型 ID 为 claude-sonnet-5-5。每百万 token 的输入 / 输出牌价仍为 $2 / $10,共享池 $1 / $5,官方线 $1.8 / $9;缓存读牌价 $0.20,5 分钟 / 1 小时缓存写牌价 $2.50 / $4。下方其他模型的报价与目录描述保留 2026-09-12 历史快照,不能当作当前报价。当前模型、路由与价格见 模型与价格页;Sonnet 来源见 Anthropic 模型文档。
2026-09-30 更新:claude-fable-5、claude-opus-5、gpt-5.6-sol 和 grok-4.6 从 9 月 24 日起停用,9 月 28 日这里推荐的 gpt-6-sol 也在 9 月 30 日停用,请求这些模型会返回 HTTP 403。请改用 claude-fable-5-1、claude-opus-5-5、gpt-6.1-sol 和 grok-4.7,下文两段可以直接运行的命令已经换成 gpt-6.1-sol。价格表是 9 月 12 日的记录,现价见 ai.topxea.com/pricing。Cursor、Cline 等客户端的配法,站点后来补进了文档:ai.topxea.com/docs。
OpenAI SDK 的 base URL 换成 https://ai.topxea.com/v1,Anthropic SDK 的换成 https://ai.topxea.com,值不值得,看两个数。共享池按牌价一半收,官方线按九成。claude-sonnet-5-5 的输出牌价是每百万 token $10,共享池收 $5,官方线收 $9。自己挂 Claude Code 写代码,或者批量跑自己的数据,走共享池,改这一行,账单对半。
两种情况别急着改。数据有去向要求的先别改,原因在建 key 那节。想走官方线、又还没给 support@topxea.com 发过邮件的也先别改:官方线背后是一条按账户配的专线,专线没配好之前,官方线 key 的请求照样走共享池,扣费却按官方线单价,等于花九折的钱走五折的路。
还有一条决定操作顺序:充值不退,经核实的重复扣款除外。第一笔别多充。建一把共享池 key,curl 通了再把 SDK 指过去。要官方线,先发邮件,回信说专线配好了再建那把 key。
SDK 只认路径和 JSON 格式
官方 SDK 发一次请求做的事不多。base URL 拼上端点路径,密钥塞进请求头,body 和回包各按一套固定格式序列化、解析。域名是谁的,SDK 不管。网关只要开出同样的路径,请求和响应的格式也照旧,SDK 就当这是官方服务器。换网关换的只是请求发到哪台机器,组装 messages 和读 usage 的代码一个字不动。
两家 SDK 对 base URL 的约定不同。OpenAI SDK 默认 https://api.openai.com/v1,/v1 算在 base 里,路径只剩 /chat/completions;Anthropic SDK 默认 https://api.anthropic.com,路径是完整的 /v1/messages。换网关时最容易照着一家的写法填另一家。对着 TopxAI 填,一个带 /v1,一个不带。下面两段各自独立,用的也不是同一把 key。
import os
from openai import OpenAI
openai_client = OpenAI(base_url="https://ai.topxea.com/v1", api_key=os.environ["TOPXAI_KEY_OPENAI"])
from anthropic import Anthropic
claude_client = Anthropic(base_url="https://ai.topxea.com", api_key=os.environ["TOPXAI_KEY_CLAUDE"])
两种风格差在请求头和字段名,Claude 两边都能调
OpenAI 风格:密钥放 Authorization: Bearer 头,打 /v1/chat/completions,body 里一个 messages 数组,system 提示也是数组里的一条。回复在 choices[0].message.content,用量叫 prompt_tokens 和 completion_tokens。/v1/responses 是同一风格的另一个端点,把 messages 换成 input,Codex CLI 默认走这个。
Anthropic 风格从请求头起就不一样:密钥走 x-api-key 头,还得带 anthropic-version: 2023-06-01,打 /v1/messages。max_tokens 必填,漏了直接报错,从 OpenAI 那边搬 body 过来最容易漏的就是它;system 是顶层字段,不进 messages;回复从 content 数组里筛选 type: "text" 的块,再读取 text;不要假设第一个块一定是文字。用量叫 input_tokens 和 output_tokens。流式两边都是 stream: true,SSE 事件的结构不同,解析代码不能互换。两边的回包都带 usage,这一次的 token 数当场就有,不用等用量日志。
模型和风格不绑死。Claude 的四个模型同时接受两种调法,一套只写过 OpenAI SDK 的代码可以直接调 claude-opus-5,不用再引 Anthropic SDK。gpt-6-astra、gpt-5.6-sol 和 grok-4.6 只走 OpenAI 风格,外加 /v1/responses。GPT Image 2.5 的两个出图模型(gpt-image-2.5-sunburst、gpt-image-2.5-flare)走 /v1/images/generations 和 /v1/images/edits。这样一来,一套 OpenAI SDK 的代码能调全部七个文本模型,换供应商时改 model 字段,key 也要换成建在那家路由上的那把。Claude Code 这类 Anthropic 风格的客户端只能调四个 Claude 模型。
curl https://ai.topxea.com/v1/chat/completions \
-H "Authorization: Bearer $TOPXAI_KEY_OPENAI" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-6.1-sol","messages":[{"role":"user","content":"Say hi"}]}'
curl https://ai.topxea.com/v1/messages \
-H "x-api-key: $TOPXAI_KEY_CLAUDE" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{"model":"claude-sonnet-5-5","max_tokens":256,"messages":[{"role":"user","content":"Say hi"}]}'
key 还没建也能先打一次。不带 key 请求任一端点,回 401,type 是 authentication_error,message 以 Invalid token 开头,后面跟一个 request id。错误体跟着端点走,下面是 2026-09-12 实测的返回,request id 换成了占位符:
{"error":{"message":"Invalid token (request id: <request-id>)","type":"authentication_error","code":"authentication_error","param":null}}
{"error":{"type":"authentication_error","message":"Invalid token (request id: <request-id>)"},"type":"error"}
上面那条是 /v1/chat/completions 和 /v1/models 回的,error 里带 code 和 param;下面那条是 /v1/messages 回的,外层多一个 type。哪条路径就按哪种风格应答。回 401 只能说明域名打对了、网关在应答,路径对不对要等建好 key 再看,404 那节有说。
建 key 先选路由,官方线要先给 support 写邮件
key 建在哪条路由上,建的时候就定死了。一把 key 不能两边跑,两条都要就开两把。路由按供应商分,文本模型每家一条官方线、一条共享池,接口里的名字是 claude-official、claude-shared 这一类,OpenAI 与 xAI 同理。GPT Image 2.5 的出图模型另有一条按张计的。给 Claude Code 的 key 要建在 Claude 那边,给 Codex 的建在 OpenAI 那边,前面两段代码里的 key 分成两个变量就是这个原因。
两条线跑的是同一个上游模型,站点原话是「每个模型都来自官方上游 API。没有蒸馏副本,也没有第三方镜像。」差在价格,也差在请求走哪条路。价格是固定比例,输入、输出和缓存读都按牌价的 90% 与 50% 折,原文在 2026-09-12 对七个文本模型逐个核过。下表保留那天的比较,Sonnet 一行已于 2026-10-02 更新为 5.5;只列输入和输出,单位是美元每百万 token:
| 模型 | 牌价 | 官方线(90%) | 共享池(50%) |
|---|---|---|---|
| claude-fable-5-1 | $10 / $50 | $9 / $45 | $5 / $25 |
| claude-fable-5 | $10 / $50 | $9 / $45 | $5 / $25 |
| claude-opus-5 | $5 / $25 | $4.5 / $22.5 | $2.5 / $12.5 |
| claude-sonnet-5-5 (2026-10-02) | $2 / $10 | $1.8 / $9 | $1 / $5 |
| gpt-6-astra | $10 / $50 | $9 / $45 | $5 / $25 |
| gpt-5.6-sol | $4 / $20 | $3.6 / $18 | $2 / $10 |
| grok-4.6 | $2 / $6 | $1.8 / $5.4 | $1 / $3 |
2026-09-12 抓取,牌价对照的是 Anthropic、OpenAI(gpt-6-astra、gpt-5.6-sol)与 xAI 公布的价,核验日 2026-09-09。当时的 gpt-image-2 按次计费为 $0.05,参考价 $0.10;该旧模型现已下架,这个数字不适用于当前 GPT Image 2.5。实时数字看 /zh/ai-api,页面直接从接口取数,改价 5 分钟内跟上。
共享池的边界在数据去向。隐私政策的说法是,看走哪条路,请求可能经过中间 API 服务商,共享池就是这样的路。内容到了那家,按那家的条款处理,TopxAI 管不到。TopxAI 这边不留内容,用量日志一次请求一行,记模型和 token 数,也记费用、延迟和实际走的分组,不记内容。自己的代码、自己的数据,这就够用。客户合同限定了数据只能到哪家的,共享池不合适。
官方线在控制台里选得到,选了不等于专线已配好,配好之前这个选项只改扣费,不改请求走的路。合规文件要写「走官方 key」的,这封邮件省不掉。多付的那四成牌价买的是这条路本身,站点没公布两条线的延迟和成功率,别为想象中的质量差付这个钱。
余额、提醒和 key 上能锁的东西
余额是预付美元,Stripe 收银行卡,NOWPayments 收 USDT / USDC,到账以 TopxAI 向支付方核验为准,收银台跳回来不等于到账。余额提醒只有 webhook:低于阈值向填好的 URL 发一次 POST,可配 secret,默认阈值 $5,没有邮件提醒。要提醒就得自己接一个 URL,哪怕只是转发到群里。
建 key 时能设四样:额度上限(美元数或不限)、过期时间、模型白名单(留空等于全部)、IP 白名单(一行一个,支持 CIDR)。没有按 key 的速率限制,速率按账户和模型算,控制台可见。自己用的 key 也别填不限。额度填小一点,白名单只放要用的那个模型,key 泄露了最多亏掉额度里那点钱。给同事或 CI 发 key 也一样。
给 Claude Code 和 Codex CLI 的环境变量
export ANTHROPIC_BASE_URL=https://ai.topxea.com
export ANTHROPIC_AUTH_TOKEN=$TOPXAI_KEY_CLAUDE
export ANTHROPIC_MODEL=claude-sonnet-5-5
claude
第三个变量可选,写上就是把默认模型固定成 Claude Sonnet 5.5(claude-sonnet-5-5)。不想每次 export,写进 ~/.claude/settings.json 的 env 字段一样生效。
export OPENAI_BASE_URL=https://ai.topxea.com/v1
export OPENAI_API_KEY=$TOPXAI_KEY_OPENAI
codex -m gpt-6.1-sol
Codex 默认打 /v1/responses,TopxAI 开了这个端点。Cursor、Cline 这些客户端站点没给配法,这篇不覆盖。
404、401 和模型不存在,各查一处
404 先查 /v1 有没有重复。给 Anthropic SDK 的 base 多写一个 /v1,路径变成 /v1/v1/messages。自己拿 requests 拼 URL,base 已经以 /v1 结尾,再接一整段 /v1/chat/completions,落到 /v1/v1/chat/completions。结果都是 404。
401 是网关没认出这把 key。不带 key 的返回上面实测过,先 echo 一下环境变量是不是空的。两种风格的请求头不一样,OpenAI 风格是 Authorization: Bearer,Anthropic 风格是 x-api-key,也顺手对一遍。
模型不存在,先查名字。TopxAI 只认当前目录里的名字,Sonnet 5.5 的 ID 是 claude-sonnet-5-5。当前可用模型看 模型与价格页,不要把本文的历史比较表当作完整目录。名字没错还是不通,再查两处:key 的模型白名单有没有放这个模型,key 建的路由和请求对不对得上(按路由名看,建在 claude-shared 上的 key 只放 Claude 模型)。不管卡在哪一处,打一次 GET /v1/models,回来的清单就是这把 key 此刻能调的全部,之后再有模型调不通,也先看这份清单。
都跑通之后,到控制台看一眼用量日志。分组那一栏写的是什么,这把 key 就走了哪条线,官方线 key 有没有回退到共享池,看的也是这一栏。一个月要花多少,缓存命中和多轮对话怎么放大账单,在算账篇里算。