月花 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 的话折扣力度更大,量大的可以算一下。