先对齐三个值
Claude Code 发的是 Anthropic Messages 请求,站点在 https://ai.idcidiot.com/v1/messages 上提供这个端点,所以 ANTHROPIC_BASE_URL 填站点根地址 https://ai.idcidiot.com,末尾不带 /v1,Claude Code 会自己拼出 /v1/messages。很多人第一次配错就错在这里:把 OpenAI 兼容地址 https://ai.idcidiot.com/v1 原样贴进去,请求变成 /v1/v1/messages,返回 404。
另外两个值是 Key 和模型 ID。Key 形如 sk-...,在站点控制台创建;模型 ID 必须和站点完全一致,大小写、点号、连字符都不能改,比如 claude-opus-5,它的上下文是 1,000,000 token,最大输出 128,000 token。所有可用的模型 ID 都能在 /model/ 里逐个核对,页面上同时标了每个模型在哪些分组可用。
站点同时开了 OpenAI 兼容的 /v1/chat/completions 和 Anthropic 的 /v1/messages,Claude Code 只认后者。两条路径共用同一份额度和同一批模型 ID,所以同一个 Key 既能在 Claude Code 里用,也能在 OpenAI SDK 里调,不用分别申请。
先用环境变量跑通
临时验证不用改配置文件,开一个终端:
export ANTHROPIC_BASE_URL="https://ai.idcidiot.com"
export ANTHROPIC_AUTH_TOKEN="sk-你的密钥"
export ANTHROPIC_MODEL="claude-opus-5"
export ANTHROPIC_SMALL_FAST_MODEL="claude-sonnet-5"
claudeANTHROPIC_AUTH_TOKEN 让请求带 Authorization: Bearer,ANTHROPIC_API_KEY 则走 x-api-key 头。两个都设会让同一个请求带两份凭证,网关可能取到空的那个,只留一个最稳。会话标题、文件摘要这类后台小请求走 ANTHROPIC_SMALL_FAST_MODEL,选同分组里便宜的一档:claude-sonnet-5 在 Claude Max 分组 0.85 倍下输入 $2.55/百万 token,比 opus 便宜四成。不同版本对后台模型的变量名不一样,ANTHROPIC_DEFAULT_HAIKU_MODEL 也认,两个都写不冲突。
写进 settings.json
想长期生效,把同样的值放进 ~/.claude/settings.json;只对某个项目生效就放项目里的 .claude/settings.json:
{
"env": {
"ANTHROPIC_BASE_URL": "https://ai.idcidiot.com",
"ANTHROPIC_AUTH_TOKEN": "sk-你的密钥",
"ANTHROPIC_MODEL": "claude-opus-5",
"ANTHROPIC_SMALL_FAST_MODEL": "claude-sonnet-5",
"API_TIMEOUT_MS": "600000",
"CLAUDE_CODE_MAX_OUTPUT_TOKENS": "32000"
}
}API_TIMEOUT_MS 的单位是毫秒,600000 即 10 分钟。Claude Code 一次请求要等模型读完系统提示、工具定义和文件片段才开始出字,默认超时对长任务偏紧,改成 10 分钟能少很多半路断流。CLAUDE_CODE_MAX_OUTPUT_TOKENS 不要超过模型的 max_output_tokens,claude-opus-5 的上限是 128,000,设成 32000 是保守值,够日常改代码用。项目级配置会跟着仓库走,Key 别写进要提交的那个文件。
settings.json 里的 env 会在 Claude Code 启动时注入进程环境,和 shell 里的变量是两套来源。调试阶段两边都配反而难判断是谁在生效,先清空 shell 变量、只留文件,确认通了再决定长期放哪边。
报错对照
401:Key 前后多了空格或引号,或者ANTHROPIC_API_KEY与ANTHROPIC_AUTH_TOKEN同时存在。404,请求路径是/v1/v1/messages:base 多写了一层/v1。400 model not found:模型 ID 拼错,或当前 Key 所属分组调不到这个模型;模型页会列出可用分组。413或context length exceeded:单次请求超过 1,000,000 token,先执行/compact压缩历史再继续。- 工具调用报错:中转只是原样转发
tool_use和tool_result,格式错误通常来自客户端版本过旧,升级 Claude Code 再试。 429:Key 所在分组的并发或额度到顶,等一会儿或换分组,和客户端配置无关。- 输出到一半停住:先调大
API_TIMEOUT_MS,再确认本机代理没有缓冲 SSE。
一次会话花多少钱
claude-opus-5 的 model_ratio 是 2.5,Claude Max 分组 0.85 倍,输入价 = 2.5 × 2 × 0.85 = $4.25/百万 token;输出按 completion_ratio 5 折算为 $21.25/百万 token。跑 20 轮重构,每轮 3,000 输入、800 输出,合计 6 万输入、1.6 万输出:0.06 × 4.25 ≈ $0.26,0.016 × 21.25 ≈ $0.34,加起来约 $0.60。这还没算缓存:命中缓存的输入按 cache_ratio 0.1 计,只收 $0.425/百万 token,重复读同一批文件时费用会明显低一些。
输入里最大的一块通常是工具定义和读进来的文件内容,同一份文件反复读会重复计费,能命中缓存就让它命中。
会话越长越贵,因为每一轮都要把之前的历史重新发一遍。觉得上下文太满就用 /compact,切到新任务用 /clear,比硬撑着省钱。完整倍率表在 价格页,想知道同价位还有哪些模型可以翻 /blog/ 里的对比文章。
把上面四行 export 追加到 ~/.zshrc,重开终端执行 claude,/status 里显示 claude-opus-5 就说明接好了。