省钱实战 · 阅读约 4 分钟

月花 $200 调 Claude 的我,改了一行代码后账单直接砍到 $60

月花 $200 调 Claude 的我,改了一行代码后账单直接砍到 $60

结论先说:把 base_url 换成中转,再把非必要请求从 Sonnet 降到 Haiku,三个月账单降了 70%。


痛点

之前直连 Anthropic,写了个代码审查 bot,跑 CI pipeline 的时候每个 PR 都会打一遍 Claude Sonnet。

月底对账,$180+。

仔细看了一下 token 用量,发现几个问题:

1. context 没做截断,每次都把完整文件塞进去,实际有用的就最后几百行

2. 所有请求都走 Sonnet,包括那些"格式化提交信息"这种根本不需要强模型的任务

3. 国内访问偶尔超时,retry 逻辑没写好,有些请求发了两三遍

改法其实很简单。


操作

第一步:换 base_url

原来:


import anthropic



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

改成兼容 OpenAI 格式的中转:


from openai import OpenAI



client = OpenAI(

    api_key="你的中转 key",

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

)

模型名直接用 claude-sonnet-4-5 或 claude-haiku-4-5,接口格式完全一样,基本零改动。

第二步:任务分级,能用 Haiku 就不用 Sonnet


def get_model_for_task(task_type: str) -> str:

    """按任务复杂度选模型"""

    heavy_tasks = {"code_review", "architecture_analysis", "debug_complex"}

    light_tasks = {"format_commit", "summarize_diff", "lint_comment"}

    

    if task_type in heavy_tasks:

        return "claude-sonnet-4-5"

    elif task_type in light_tasks:

        return "claude-haiku-4-5"  # 比 Sonnet 便宜 ~80%

    else:

        return "claude-haiku-4-5"  # 默认走便宜的



def review_code(diff: str, task_type: str = "code_review"):

    model = get_model_for_task(task_type)

    response = client.chat.completions.create(

        model=model,

        messages=[

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

        ],

        max_tokens=1024

    )

    return response.choices[0].message.content

第三步:截断 context


def truncate_for_review(file_content: str, max_chars: int = 8000) -> str:

    """只保留最后 N 个字符,减少无效 token"""

    if len(file_content) > max_chars:

        return "...[truncated]\n" + file_content[-max_chars:]

    return file_content

这三个改动加起来,效果:

| 项目 | 改前 | 改后 |

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

| 月均费用 | ~$180 | ~$55 |

| 平均延迟 | 偶尔 5s+ | 稳定 1-2s |

| 超时重试次数 | 每天十几次 | 基本没有 |


验证一下中转能不能用

快速 curl 测一下:


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": "say hi"}],

    "max_tokens": 10

  }'

返回正常的话就可以直接上。


小结

没什么黑魔法,就是两件事:别无脑用最贵的模型,别无脑传最长的 context。大部分日常任务 Haiku 完全够用,省下来的钱可以多跑几个真正需要 Sonnet 的场景。

我用的中转是 api2everything.xyz,支持 Claude / GPT / Gemini / DeepSeek 300+ 模型,国内直连,注册送 ¥1 够试很久。价格比官方便宜 60% 左右,余额永久不过期,开发测试用挺合适的。