省钱实战 · 阅读约 3 分钟

月花 200 刀调 Claude 的我,改了一行代码后现在只花 70

月花 200 刀调 Claude 的我,改了一行代码后现在只花 70

结论先说:把 base_url 换掉,账单直接砍掉 60%+。


背景

我司内部有个代码审查 bot,跑在 Claude Sonnet 上,每天大概处理 300-500 次 PR diff 分析。上个月账单出来:$187。不算离谱,但也不便宜——尤其是其中有大量请求其实只是在做"这段代码有没有明显 bug"这种简单判断,完全不需要 Sonnet 级别的模型。

问题有两个:

1. 模型选贵了。所有请求统一走 Sonnet,但 70% 的任务 Haiku 完全够用。

2. 直连 Anthropic 要梯子,公司服务器在国内,稳定性一直是个隐患,偶尔超时重试也在烧钱。


具体怎么改的

第一步:换 base_url

原来的代码大概长这样:


import anthropic



client = anthropic.Anthropic(api_key="sk-ant-xxx")

改成中转服务只需要加一行:


client = anthropic.Anthropic(

    api_key="你的中转 key",

    base_url="https://api.api2everything.xyz",

)

SDK 完全兼容,其他代码零改动。用 OpenAI SDK 的同理:


from openai import OpenAI



client = OpenAI(

    api_key="你的中转 key",

    base_url="https://api.api2everything.xyz/v1",

)

curl 验证一下是否通:


curl https://api.api2everything.xyz/v1/chat/completions \

  -H "Authorization: Bearer 你的key" \

  -H "Content-Type: application/json" \

  -d '{

    "model": "claude-haiku-4-5",

    "messages": [{"role": "user", "content": "hello"}],

    "max_tokens": 50

  }'

第二步:按任务复杂度路由模型

这才是省钱的核心。我把请求分了两类:


def get_model_for_task(task_type: str) -> str:

    # 简单判断类:语法检查、命名规范、明显 bug

    if task_type in ("lint", "naming", "simple_bug"):

        return "claude-haiku-4-5"

    # 复杂分析:架构问题、安全漏洞、性能优化

    return "claude-sonnet-4-5"



def review_code(diff: str, task_type: str):

    model = get_model_for_task(task_type)

    response = client.messages.create(

        model=model,

        max_tokens=1024,

        messages=[{"role": "user", "content": diff}]

    )

    return response.content[0].text

Haiku 比 Sonnet 便宜大约 20 倍,把 70% 的请求切过去之后,账单数学就很好算了。

第三步:加个 max_tokens 上限

之前没设,模型有时候会输出一大段废话。代码审查场景其实 512-1024 token 完全够,加个硬限制:


"max_tokens": 768  # 够用就行,别让它写小作文


改完之后

这个月账单折合下来大概 ¥500 出头(之前接近 ¥1400)。主要省在两块:

  • 模型降级省了约 55%
  • 中转价格本身比官方便宜,再省一截
  • 国内直连,超时重试少了,间接也省了一些

稳定性反而比之前好,不用再维护梯子了。


我用的中转是 api2everything.xyz,支持 Claude / GPT / Gemini / DeepSeek 300+ 模型,OpenAI 格式兼容,注册送 ¥1 够试很久。SVIP 的话折扣力度更大,量大的可以算一下。