博客

Claude API 中转站怎么选:价格、缓存和工具调用怎么核对

Claude API 中转站是第三方提供的 API 地址和 Key。多数中转站的用法和 Anthropic 官方 API 一样,在 Claude Code 或 SDK 里把 Base URL 换成中转站的地址就能用。不同中转站在价格、缓存和工具支持上差别很大,下面这几项花半小时就能自己核对完。

RoamAI 团队发布于 2026年10月30日

中转站是什么

中转站给你一个 API 地址和一个 Key。你的请求发给它,由它转给模型,用量从你在它那里的余额里扣。国内用户用中转站,多半是因为 Anthropic 的服务地区不包括中国大陆,官方 API 的注册和付款都不方便。

价格:倍率要和充值比例一起算

中转站的价格一般写成「倍率」,也就是按 Anthropic 官方价乘一个系数扣额度。只看倍率会算错,还要看充多少钱能拿到 $1 额度。实际单价是:

人民币单价 = 官方美元价 × 倍率 × 每 $1 额度的人民币价格

举个例子,两家中转站是虚构的,模型的官方输入价是每百万 token $2:

  • A 站倍率 0.5,充 ¥1 得 $1 额度:2 × 0.5 × 1 = 每百万 token ¥1。
  • B 站倍率 1,按汇率充值,¥7.2 得 $1 额度:2 × 1 × 7.2 = 每百万 token ¥14.4。

B 站的倍率只是 A 站的两倍,实际单价却是 A 站的 14 倍多。比较的时候,把每家都折成每百万 token 多少人民币再比。

缓存:有没有生效、怎么计价

Claude Code 的一次对话里,大部分输入是每一轮都要重新发送的历史内容,省钱靠的是提示缓存。官方缓存读的价格大约是输入价的十分之一,部分新模型更低。中转站不支持缓存,或者把缓存读按输入价收,用 Claude Code 的花费会差出好几倍。

自己测一下:同一段长前缀连发两次,看每次返回的 usage。

from anthropic import Anthropic

client = Anthropic(base_url="https://中转站地址", api_key="你的key")

# 一段长文本,比如上万字的 README
doc = open("README.md", encoding="utf-8").read()

for i in range(2):
    message = client.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=1024,
        system=[{"type": "text", "text": doc, "cache_control": {"type": "ephemeral"}}],
        messages=[{"role": "user", "content": "用一句话总结这份文档。"}],
    )
    u = message.usage
    print(i + 1, "写入", u.cache_creation_input_tokens, "读取", u.cache_read_input_tokens, "未缓存", u.input_tokens)
  • 第一次 cache_creation_input_tokens 大于 0(写进缓存),第二次 cache_read_input_tokens 大于 0(从缓存读),缓存就是生效的。
  • 两次都是 0,要么这家不支持缓存,要么前缀太短。前缀不到最小长度不会缓存,最小长度按模型从几百到几千 token 不等,用上万字的文本测就不会碰到。
  • 两次请求要在 5 分钟内发出,缓存默认 5 分钟过期。

再到中转站的用量明细里找这两条请求:命中缓存的部分应该按缓存读的单价扣,而不是按输入价。

工具调用和流式输出

Claude Code 读文件、改代码、跑命令都靠工具调用,回答是流式返回的。有的中转站会把请求转成别的格式再转回来,这时最容易坏的就是工具调用和流式输出。测工具调用:

message = client.messages.create(
    model="claude-sonnet-5-5",
    max_tokens=1024,
    tools=[{
        "name": "get_weather",
        "description": "查询一个城市现在的天气",
        "input_schema": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    }],
    messages=[{"role": "user", "content": "上海现在天气怎么样?"}],
)
print(message.stop_reason)
for block in message.content:
    if block.type == "tool_use":
        print(block.name, block.input)

stop_reason 是 tool_use,并且打印出 get_weather {'city': '上海'} 这样一行,工具调用就是通的。

流式输出用《用 Anthropic 或 OpenAI SDK 调用 Claude API》里 client.messages.stream 的例子跑一次。文字一段一段地出来,而不是等很久一次性出来,就是正常的。

用 Claude Code 实际跑一次

上面几项都过了,再让 Claude Code 做一件真实的任务。按《用 API Key 接入 Claude Code》设好地址和 Key,在一个项目目录里让它读几个文件、改一处代码、跑一次测试。

  • 整个过程没有报错,也没有中途断开。
  • 多聊几轮之后看用量明细,后面几轮的输入大部分应该是缓存读。
  • 扣的费用和你按价格表算出来的对得上。

模型对不对

先看 /v1/models 列了哪些模型,再看每次返回的 model 字段、用量明细里记的模型,和你请求的是不是同一个。这两样都是中转站自己报的,只能说明它声称给了什么。更可靠的办法是拿同一个任务在官方或别的渠道各跑一次,比较结果。做不到的话,至少确认上面的缓存、工具调用和 Claude Code 实测都正常。

账单和条款

  • 每条请求能不能查到模型、token 数和费用。查不到明细,就没法核对扣费。
  • 余额会不会过期,充值后能不能退。
  • 能不能开票,开的是什么票。
  • 团队用的话,能不能每人一个 Key,单个 Key 能不能限制并发和可用的模型。

数据和稳定性

  • 请求内容会经过中转站。看它的隐私条款写了保存哪些内容、保存多久,密钥和敏感数据不要发给不放心的中转站。
  • 在晚上的高峰时段多试几次,看响应速度和报错多不多。
  • 出错时返回的信息要看得懂:余额不足、Key 无效、被限流,应该分得清。

每人一个 Key,接上 Claude Code

RoamAI 是给团队用的 Claude API:在控制台创建 API Key,填到 Claude Code、Claude Desktop 或 SDK 里就能用。开通 VIP 用量更便宜,另有专属服务器和专人对接。

开始使用

← 全部文章