月花 $200 调 Claude 的我,改了一行代码现在只花 $60
月花 $200 调 Claude 的我,改了一行代码现在只花 $60
结论先说:把 base_url 指向国内中转,再把 Sonnet 换成 Haiku 处理初筛,账单直接掉到三分之一。
背景
我在做一个文档处理工具,流程大概是:上传 PDF → 分段 → 每段跑一次 Claude 提取结构化数据 → 汇总。
初版图省事,全程 claude-3-5-sonnet,每段 ~800 token,一个文档 40 段,一天跑几十份文档。
上个月账单出来:$214。
不是说用不起,但这个项目还在测试阶段,纯烧钱没收入,有点难绷。
排查在哪花的钱
用 tiktoken 粗估了一下,发现问题很明显:
- 初筛阶段(判断这段是不是有效内容):用了 Sonnet,但这个任务根本不需要,Haiku 完全够
- 没开 prompt caching:系统 prompt 每次都重新发,白白浪费
- 没做批处理:每段独立请求,overhead 叠了很多次
具体怎么改的
第一步:换 base_url
官方 API 在国内延迟高、偶尔丢包,我之前还挂着代理跑。现在直接换到国内中转,延迟稳很多,而且价格是官方的 35% 起。
改动就一行:
import anthropic
client = anthropic.Anthropic(
api_key="你的中转 key",
base_url="https://api2everything.xyz/v1",
)
OpenAI SDK 同理:
from openai import OpenAI
client = OpenAI(
api_key="你的中转 key",
base_url="https://api2everything.xyz/v1",
)
其他代码一字不改。
第二步:两段式流程,初筛用 Haiku
def process_chunk(chunk: str) -> dict | None:
# 第一步:Haiku 判断是否有效内容,便宜 10 倍
screen = client.messages.create(
model="claude-haiku-4-5", # 或 claude-3-haiku-20240307
max_tokens=10,
messages=[{
"role": "user",
"content": f"下面这段文字是否包含有效业务数据?只回答 yes 或 no。\n\n{chunk}"
}]
)
if screen.content[0].text.strip().lower() == "no":
return None # 直接跳过,省掉后续费用
# 第二步:只有有效段落才走 Sonnet
result = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
system="你是一个结构化数据提取助手...", # 固定 system prompt 可以开 caching
messages=[{
"role": "user",
"content": chunk
}]
)
return parse_response(result.content[0].text)
实测我的文档里大概 40% 是无效段落(页眉页脚、空白段之类),直接被 Haiku 筛掉,Sonnet 调用量少了将近一半。
第三步:curl 快速验证连通性
换完 base_url 先跑一下确认没问题:
curl https://api2everything.xyz/v1/chat/completions \
-H "Authorization: Bearer 你的key" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-haiku-4-5",
"messages": [{"role": "user", "content": "hi"}],
"max_tokens": 10
}'
改完之后
本月到今天:$61,还没跑完。同样的数据量,大概能落在 $65 左右。
主要节省来自:
- 中转价格本身便宜了约 65%
- 初筛用 Haiku 代替 Sonnet,单价差 ~10x
- 无效段落直接跳过
我用的中转是 api2everything.xyz,支持 Claude / GPT / Gemini / DeepSeek 等 300+ 模型,OpenAI 格式兼容,注册送 ¥1 够先试几次看连通性再充值。