省钱实战 · 阅读约 3 分钟

月账单从 $200 砍到 $60,就改了一个 base_url

月账单从 $200 砍到 $60,就改了一个 base_url

结论先说:把 Claude API 请求转到国内中转,配合模型降级策略,账单直接打三折。


痛点

我有个每天跑的代码审查 bot,用的 claude-3-5-sonnet,上个月账单 $214。

拆开看:

  • 70% 的请求是"这段代码有没有明显 bug"这种简单判断
  • 20% 是稍微复杂的重构建议
  • 只有 10% 真的需要 Sonnet 级别的推理

但因为懒,全部打到同一个模型。钱就这么烧掉了。

另外一个问题:国内直连 Anthropic 不稳,隔三差五超时,bot 报错我还得半夜爬起来看日志。


怎么改的

第一步:换 base_url,解决连通性

找了个支持 OpenAI 格式的中转,改一行:


import anthropic



client = anthropic.Anthropic(

    api_key="你的中转 key",

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

)

或者如果你用 openai 库直接调 Claude:


from openai import OpenAI



client = OpenAI(

    api_key="你的中转 key",

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

)



response = client.chat.completions.create(

    model="claude-3-5-sonnet-20241022",

    messages=[{"role": "user", "content": "review this code: ..."}],

)

格式完全兼容,原来怎么写现在还怎么写。

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

简单判断走 claude-3-haiku,复杂任务才上 Sonnet。Haiku 比 Sonnet 便宜大概 20 倍,速度还更快。


def get_model(task_type: str) -> str:

    routing = {

        "simple_check": "claude-3-haiku-20240307",

        "refactor":     "claude-3-5-sonnet-20241022",

        "architecture": "claude-3-5-sonnet-20241022",

    }

    return routing.get(task_type, "claude-3-haiku-20240307")



def review_code(code: str, task_type: str = "simple_check"):

    response = client.chat.completions.create(

        model=get_model(task_type),

        messages=[

            {"role": "system", "content": "You are a code reviewer."},

            {"role": "user", "content": f"Review:\n{code}"},

        ],

        max_tokens=512,

    )

    return response.choices[0].message.content

第三步:控 max_tokens

之前没设 max_tokens,模型有时候回一大段废话。加个上限,简单任务 256 够了,账单又砍一刀。


改完之后

| | 改之前 | 改之后 |

|---|---|---|

| 月账单 | ~$214 | ~$58 |

| 超时率 | 偶发 | 基本没有 |

| 代码改动 | — | 3 行 |

70% 的请求现在走 Haiku,剩下的才上 Sonnet。效果没有明显差异,毕竟"这里有个空指针"不需要 Sonnet 来发现。


用的中转

我用的是 无量 API(api2everything.xyz),支持 Claude / GPT / Gemini / DeepSeek 300+ 模型,国内直连,OpenAI 格式兼容。注册送 ¥1,够试很久,余额永久不过期。

有类似账单问题的可以试试,改动成本几乎为零。