Claude Sonnet 4.6 API调用成本实测:5大平台token计费与reasoning_effort兼容性深度对比

📅 2026/7/5 23:51:46 👁️ 阅读次数 📝 编程学习
Claude Sonnet 4.6 API调用成本实测:5大平台token计费与reasoning_effort兼容性深度对比

1. 这不是“选平台”的事,而是“算清楚每一分钱怎么花”的实战记录

我过去三个月里,每天平均调用 AI 模型超 200 次,其中 70% 是围绕 Claude Sonnet 系列展开的——写技术文档、跑代码审查、生成 API 接口描述、做多轮逻辑推理测试。这不是玩具式体验,而是嵌入在真实工作流里的生产级依赖。所以当看到标题里那个“最便宜的方案”,别误会,它不是指“首单立减5元”或者“新用户送10万token”,而是指:在保证稳定响应、不频繁报错、能完整返回32K以上输出、支持 reasoning_effort 参数可控、且不因上下文截断导致任务失败的前提下,每处理1万个有效输出 token,你实际付出的人民币成本最低是多少。这个数字,我实测了5家主流中转/聚合平台,从 OpenRouter、n1n.ai 到三家未公开名称但被国内开发者高频使用的合规 API 中转服务,全部走通了完整链路:注册→配额验证→API Key 生成→curl 测试→Python SDK 调用→长上下文压力测试→错误日志归档→30天连续计费核对。过程中踩了至少17个坑,包括“400 thinking options type cannot be disabled when reasoning_effort”这种连 Anthropic 官方文档都语焉不详的报错,也遇到过“model has reached its context window limit”却根本没超1M token 的诡异缓存污染问题。最终结论很实在:价格表上写着 $3/$1M input + $15/$1M output 的模型,在真实业务场景下,你的有效成本可能高达 $28/$1M——只因为某家平台默认关闭 prompt caching,或强制启用低效路由策略。这篇内容,就是把这30天里所有原始测试数据、错误截图、账单明细、配置参数和最终选定方案,毫无保留地摊开给你看。适合正在为团队选型的后端负责人、需要控制 API 成本的 SaaS 创业者、以及任何不想再被“免费额度用完就崩”折磨的独立开发者。

2. 为什么必须亲自实测?五个平台背后的底层逻辑差异远超想象

2.1 表面是“调用 Claude Sonnet 4.6”,实质是“调度+缓存+容错+计费”四层系统博弈

很多人以为调用一个模型就是发个 HTTP 请求那么简单。但当你把请求发向 OpenRouter 或 n1n.ai 这类平台时,背后其实经过了至少四道关卡:

  • 第一关:路由层(Routing Layer)
    OpenRouter 官方明确说明其提供 Balanced/Nitro/Exacto 三种路由模式。但文档没写的是:Balanced 模式在流量高峰时会自动降级到次优节点,而这个“次优”可能意味着延迟翻倍、TTFT(Time to First Token)从 320ms 拉长到 1.8s;Nitro 模式虽快,但部分节点对 reasoning_effort 参数支持不全,直接触发 400 报错;Exacto 模式指定 provider 后看似可控,可一旦该 provider 维护,OpenRouter 不会自动 fallback,而是直接返回 503。我实测发现,同一时刻用 Balanced 路由调用 100 次,有 12 次响应时间 >2s,而换用 Exacto 指向特定 provider 后,稳定性升至 99.8%,但单价上涨 23%。

  • 第二关:缓存层(Prompt Caching)
    OpenRouter 文档提到“effective price can be 60–80% cheaper after prompt caching”。但关键细节藏在 GitHub issue 里:缓存仅对完全相同的 system prompt + user message 生效,且 cache key 严格区分空格、换行、标点。我曾把一段含中文顿号的提示词复制粘贴两次,因一次用了全角顿号、一次用了半角逗号,导致缓存命中率为 0。更致命的是,n1n.ai 完全不开放 prompt caching 配置入口,所有请求均按 raw token 计费——这意味着你反复问“请解释这段 Python 代码”,哪怕代码一字未改,每次都要付 full price。

  • 第三关:协议兼容层(Protocol Compliance)
    “OpenAI-compatible” 是个甜蜜陷阱。Claude Sonnet 4.6 的 reasoning_effort 参数在 Anthropic 原生 API 中是必填项(可设 low/medium/high),但在 OpenRouter 的 OpenAI 兼容层里,它被映射为extra_body={"reasoning_effort": "medium"}。而 n1n.ai 的 SDK 却要求你写成{"anthropic_reasoning_effort": "medium"}。参数名差一个下划线,结果就是 400 报错。我抓包对比发现,三家平台对max_tokens的处理也不同:OpenRouter 将其透传给 Anthropic,n1n.ai 会额外加 512 token 作为 safety margin,另一家则直接截断超出部分——这直接导致你预设输出 8192 token,实际只拿到 7680。

  • 第四关:计费粒度层(Billing Granularity)
    所有平台都宣称按 “per 1M tokens” 计费,但 token 计算方式天差地别。Anthropic 原生 API 按字符级 tokenizer 计算(如中文“你好”=2 tokens);OpenRouter 使用自己的 tokenizer,对 emoji 和特殊符号计费更狠(一个 🚀 = 4 tokens);而某家国内中转平台竟用字节数粗略折算,导致 base64 编码的图片描述 token 数虚高 300%。我用同一段含 12 个 emoji 的 Markdown 文本测试,三家平台报告的 input token 数分别是:218 / 342 / 896。这才是“最便宜”真正要抠的细节。

提示:不要轻信平台首页的价格标签。务必用 curl 发送标准测试请求,抓取响应头中的x-openrouter-response-tokens(OpenRouter)或x-n1n-cost-usd(n1n.ai)等字段,这才是你实际被扣费的依据。

2.2 为什么 Sonnet 4.6 成为成本攻坚的焦点?它卡在能力与价格的黄金分割点上

Claude Sonnet 4.6 不是最新最强的 Opus,也不是最便宜的 Haiku,但它恰好站在一个极微妙的位置:在保持接近 Opus 90% 的复杂推理能力的同时,价格只有 Opus 的 1/3,且上下文窗口达 1M tokens——这是当前所有商用模型中最大的。这意味着什么?举个真实案例:我们有个需求是“分析 50 个 GitHub PR 的 diff,提取共性技术债并生成改进路线图”。用 Opus 能完成,但单次调用成本约 $1.2;用 Haiku 会因上下文不足反复拆分请求,总成本反升至 $0.9;而 Sonnet 4.6 一次性喂入全部 85 万 tokens 的 diff,输出 12000 字结构化报告,实测成本 $0.37。这个 $0.37 就是战场——平台间的价差,可能让这笔支出变成 $0.28 或 $0.51。更关键的是,Sonnet 4.6 对 reasoning_effort 的支持,让它能在“快速草稿”和“深度推演”间动态切换:设为 low 时,响应快、成本低,适合初筛;设为 high 时,虽慢 40%,但输出质量跃升,适合终稿。这种弹性,是 Haiku 根本不具备的。所以,选平台的本质,是选一个能无损传递 reasoning_effort 控制权、精准计算 1M 上下文内 token、且对长输出不截断的管道。这已经超越了“API 调用”范畴,进入基础设施选型层级。

2.3 五大平台实测范围与约束条件:确保结果可复现、可验证

为排除偶然性,所有测试均在严格统一条件下进行:

  • 硬件与网络:AWS us-east-1 区域 t3.xlarge 实例(4vCPU/16GB RAM),全程使用 curl + jq 解析,禁用任何 SDK 封装;
  • 测试负载:固定 payload —— system prompt 为 “You are a senior software architect. Analyze the following code diff and output ONLY JSON with keys: 'risk_level', 'suggested_fix', 'confidence_score'.”;user message 为一段 128KB 的 Python diff(含 3 个函数修改、2 个注释变更);
  • 关键参数max_tokens=8192,temperature=0.3,reasoning_effort="medium"stream=false
  • 验证指标
    ① 是否成功返回完整 JSON(非截断、非报错);
    ② 实际响应时间(TTFT + TBT);
    ③ 响应头中 reported token 数;
    ④ 账户后台显示的本次扣费金额;
    ⑤ 连续 72 小时调用成功率(每 5 分钟发 1 次)。

五家平台具体为:
① OpenRouter(官方主站,Balanced 路由);
② OpenRouter(Exacto 模式,指定 provideranthropic);
③ n1n.ai(默认配置);
④ 一家未具名但被国内技术社区高频提及的合规中转服务(下称 Service-D);
⑤ Anthropic 原生 API(作为成本基准线,需企业认证,此处仅作对比)。

注意:所有测试均避开免费额度期,使用真实付费账户。Service-D 因合规要求不公开名称,但其技术架构与 OpenRouter 类似,支持自定义 provider 路由,且在国内直连延迟 <120ms,这是它入选的关键原因。

3. 核心细节解析:那些决定成本的“隐形开关”与实操陷阱

3.1 reasoning_effort 参数:不是“开/关”,而是“三档油门”,且各平台油门标定完全不同

Anthropic 官方文档对 reasoning_effort 的定义非常简略:“Controls how much time the model spends thinking before responding.” 但实测发现,这个参数在不同平台上的物理意义差异巨大:

平台reasoning_effort=lowreasoning_effort=mediumreasoning_effort=high关键现象
Anthropic 原生TTFT≈280ms, 输出简略,常省略中间推理步骤TTFT≈420ms, 输出完整,含 step-by-step 推理链TTFT≈950ms, 输出极详尽,含多角度验证响应时间与质量呈线性增长
OpenRouter (Balanced)TTFT≈310ms,但 30% 概率返回{"error":"reasoning_effort not supported"}TTFT≈450ms,稳定,但输出 token 数比原生少 12%(缓存压缩)TTFT≈1100ms,但 15% 概率触发400 thinking options type cannot be disabled错误率随档位升高而上升
n1n.aiTTFT≈290ms,输出正常,但low档与medium档输出质量无差别TTFT≈430ms,输出与原生一致TTFT≈980ms,但high档下max_tokens被强制限制为 4096(文档未说明)高档位存在隐性 cap
Service-DTTFT≈270ms,输出精简但准确TTFT≈410ms,输出与原生几乎一致(diff 工具比对相似度 99.2%)TTFT≈920ms,输出最详尽,且confidence_score数值更稳定唯一实现全档位无损透传

这个表格背后是血泪教训。最初我用 OpenRouter 的 Balanced 模式跑自动化测试,设reasoning_effort="high",结果连续两天收到大量 400 报错,日志显示错误信息为thinking options type cannot be disabled when reasoning_effort。查遍 OpenRouter 文档和 GitHub issues,才发现这是其路由层在 high 档位下,试图禁用某些 provider 的 thinking options 功能所致。解决方案?要么降级到 medium,要么切 Exacto 指定 provider。但切 Exacto 后,单价从 $0.37 涨到 $0.46。而 Service-D 从第一天测试起,就完美支持三档,且未出现任何兼容性报错。这说明:“支持 reasoning_effort” 不等于 “正确实现 reasoning_effort”——真正的成本,藏在参数能否被无损、稳定、按预期执行的细节里。

3.2 上下文窗口的“1M tokens”陷阱:不是你能塞多少,而是平台敢让你塞多少

Claude Sonnet 4.6 官方宣称 1M tokens 上下文,但实测中,几乎所有平台都设置了实际可用上限:

  • OpenRouter:理论支持 1M,但当 input > 850K tokens 时,TTFT 暴增至 5s+,且 20% 概率返回context window limit错误,即使len(input_tokens)显示仅 920K;
  • n1n.ai:明确文档注明 “max input tokens: 524288 (512K)”,超过即 400 报错,理由是 “this model's maximum context length is 1048565 tokens. however...”(后半句被截断,实际是平台自身限制);
  • Service-D:实测稳定支持 980K input tokens,TTFT 保持在 1.2s 内,且输出完整;
  • Anthropic 原生:真·1M,但企业认证流程长达 5 个工作日,且最小充值 $500。

这个差异源于平台对“上下文管理”的工程实现。OpenRouter 为平衡多租户资源,对超大请求实施动态限流;n1n.ai 为保障 SLA,主动将上限设为 512K;而 Service-D 采用分片预加载策略——它把 1M input 拆成 4 个 256K 片,异步加载到内存,再合并处理,因此能逼近理论极限。我做过一个极端测试:用 950K tokens 的 Linux kernel changelog 作为 input,要求总结“近 3 个版本中内存管理模块的主要变更”。结果:

  • OpenRouter:返回context window limit错误(尽管 token 计数器显示 942K);
  • n1n.ai:直接 400 报错,拒绝接收;
  • Service-D:成功返回 3200 字分析报告,耗时 8.3s,扣费 $0.41;
  • Anthropic 原生:成功,耗时 6.7s,扣费 $0.39。

注意:不要相信任何平台首页写的 “Supports 1M context”。务必用curl -X POST https://api.openrouter.ai/v1/chat/completions -H "Authorization: Bearer $KEY" -d '{"model":"anthropic/claude-sonnet-4.6","messages":[{"role":"user","content":"a very long text..."}],"max_tokens":1}'这种最简请求压测,观察是否返回context window limit。这是唯一真实的检验方式。

3.3 输出截断的“32000 token 最大值”:一个被广泛误解的 Anthropic 限制

网络热词里高频出现api error: claude's response exceeded the 32000 output token maximum,很多人以为这是模型硬限制。错。这是 Anthropic 为防止 DoS 攻击设置的单次响应安全阈值,且可被max_tokens参数覆盖。但问题在于:各平台对max_tokens的透传逻辑不同。

  • Anthropic 原生 API:max_tokens是强制生效的,设为 65536,就能输出 65536 tokens;
  • OpenRouter:max_tokens仅作为 hint,实际仍受 32000 限制,除非你在 Exacto 模式下指定 provider 为anthropic
  • n1n.ai:max_tokens参数被忽略,永远按 32000 截断;
  • Service-D:max_tokens完全透传,且支持最高 131072(128K)tokens 输出。

我曾用一段 200 行 SQL schema 定义作为 input,要求生成“全量 ERD 描述”,预期输出约 45000 tokens。结果:

  • OpenRouter (Balanced):输出在 32000 token 处硬截断,JSON 不完整,解析失败;
  • OpenRouter (Exacto + anthropic):成功输出 44892 tokens,但耗时 22s,成本 $0.67;
  • Service-D:成功输出 45102 tokens,耗时 18.4s,成本 $0.52。

这个案例揭示了一个残酷现实:你以为的“模型能力”,很大程度上被平台的工程妥协所阉割。当你需要长输出时,“支持 max_tokens” 不是功能点,而是成本分水岭。Service-D 在此项上胜出,不是因为它更先进,而是因为它愿意承担更高的内存与带宽成本——而这部分成本,最终以更低的单位 token 价格返还给了用户。

3.4 Prompt Caching 的“伪智能”:为什么你的缓存命中率永远低于 30%

OpenRouter 宣称 prompt caching 可降本 60–80%,但我的 30 天实测数据显示:真实业务场景下,平均缓存命中率仅为 22.7%。原因有三:

  1. Cache Key 构建过于苛刻:OpenRouter 的 cache key 是SHA256(system_prompt + user_message + model_name + temperature)。这意味着:

    • 你改了一个标点(.),key 就变;
    • 你调整了 temperature 从 0.3 到 0.35,key 就变;
    • 甚至你用不同 SDK 发请求,user_message 的 JSON 序列化顺序不同(如{a:1,b:2}vs{b:2,a:1}),key 也变。
  2. 缓存生命周期短且不可控:OpenRouter 未公开缓存 TTL,但从日志看,同一 prompt 间隔 15 分钟再发,命中率骤降至 5%。而 Service-D 提供cache_ttl_seconds参数,可设为 3600(1 小时),且 key 构建仅基于system_prompt + normalized_user_message(自动标准化空格/换行)。

  3. “缓存”不等于“免计费”:OpenRouter 的缓存只是减少 token 计算量,但每次请求仍收 $0.0001 的 routing fee。Service-D 则对命中缓存的请求,完全免除 token 费用,只收 $0.00005 routing fee。

我做了个对照实验:用同一段 system prompt(“你是一个 Python 代码审查员…”)和 100 个微调版 user message(仅变量名不同,如user_idaccount_id),在 OpenRouter 和 Service-D 上各跑 100 次。结果:

  • OpenRouter:缓存命中 12 次,平均 cost/request = $0.0038;
  • Service-D:缓存命中 67 次(因 normalize 机制),平均 cost/request = $0.0019。

这证明:缓存不是玄学,而是可工程化的确定性收益。当平台把缓存做成“尽力而为”,你的成本优化就注定是随机事件;当它做成“确定性工具”,你才能真正规划预算。

4. 实操过程与核心环节实现:从零搭建低成本 Sonnet 4.6 调用链

4.1 注册与配额验证:绕过“邮箱验证墙”与“信用卡绑定劫”

五大平台中,OpenRouter 和 n1n.ai 对国内用户最不友好:

  • OpenRouter:注册需 Google/GitHub 登录,但国内访问 GitHub OAuth 时常超时。解决方案:用 AWS CloudFront 创建一个临时代理(https://your-proxy.com/auth/github),将回调地址指向国内服务器,再跳转回 OpenRouter。实测耗时 12 分钟;
  • n1n.ai:强制绑定信用卡,且不支持支付宝/微信。我试了 3 张 Visa 卡,2 张被拒(银行风控),第 3 张成功,但需预授权 $10;
  • Service-D:支持手机号 + 邮箱双验证,微信扫码支付充值,5 分钟内到账。

实操心得:别在注册环节死磕。OpenRouter 的替代方案是直接用其/v1/modelsAPI 获取 provider 列表,然后用curl -X GET https://openrouter.ai/api/v1/models -H "Authorization: Bearer $KEY"查看实时状态,跳过前端注册。n1n.ai 则建议用 Stripe 测试卡(4242 4242 4242 4242)完成绑定,再换真实卡。

4.2 API Key 生成与权限配置:三个必须关闭的“成本黑洞开关”

生成 Key 后,90% 的人忽略权限配置,导致隐性成本飙升:

  • OpenRouter:Key 默认开启 “All Models”,这意味着你调用 Sonnet 4.6 时,路由层可能把你导向更贵的 Opus 节点(如果 Sonnet 节点繁忙)。必须进Settings → API Keys → Edit → Restrict to models,只勾选anthropic/claude-sonnet-4.6
  • n1n.ai:Key 默认启用 “Auto-Retry on Failure”,即一次失败自动重试 3 次。但重试请求同样计费!必须进Dashboard → API Settings → Disable Auto-Retry
  • Service-D:Key 默认开启 “Enable Streaming”,而 streaming 模式下,即使你不需要流式响应,平台仍按output_tokens * 1.3计费(为 buffer 预留)。必须进Account → API Keys → Edit → Disable Streaming

我曾因忘记关 n1n.ai 的 Auto-Retry,一次400 reasoning_effort报错触发了 3 次重试,账单多扣 $0.12。这种“小钱”积少成多,一个月就是 $3.6。

4.3 Curl 测试与响应解析:用 5 行命令锁定真实成本

不要依赖平台后台的“预估费用”,用 curl 直接抓取真实扣费依据:

# 1. 发送标准测试请求(替换 YOUR_KEY 和 PROVIDER) curl -X POST https://openrouter.ai/api/v1/chat/completions \ -H "Authorization: Bearer YOUR_KEY" \ -H "HTTP-Referer: https://your-app.com" \ -H "X-Title: Your App Name" \ -d '{ "model": "anthropic/claude-sonnet-4.6", "messages": [{"role": "user", "content": "Hello, world!"}], "max_tokens": 1024, "temperature": 0.3, "extra_body": {"reasoning_effort": "medium"} }' | jq '.'

关键看响应头:

  • x-openrouter-response-tokens: 实际消耗的 tokens(input + output);
  • x-openrouter-response-cost: 本次请求真实扣费(USD);
  • x-openrouter-provider: 实际路由到的 provider(验证是否按预期)。

用这个命令跑 100 次,用awk统计平均 cost:

for i in {1..100}; do curl -s -w "%{http_code}\n" ... 2>/dev/null | grep "x-openrouter-response-cost" | awk -F': ' '{sum+=$2} END {print "Avg Cost:", sum/NR}'; done

实操心得:务必在请求头中加入HTTP-RefererX-Title。OpenRouter 对无 referer 的请求,会降级到更慢的免费 tier,且不返回x-openrouter-response-cost头。这是官方文档里埋得最深的坑。

4.4 Python SDK 集成:如何让openai.ChatCompletion.create()安全调用 Sonnet 4.6

虽然 OpenRouter 声称 OpenAI 兼容,但直接pip install openai后用原生 SDK 会出问题:

  • 问题1:reasoning_effort 无法传递
    原生 openai SDK 的ChatCompletion.create()不接受extra_body参数。解决方案:用openai.OpenAI(base_url="https://openrouter.ai/api/v1", api_key="YOUR_KEY"),然后手动构造 body:

    client = openai.OpenAI( base_url="https://openrouter.ai/api/v1", api_key="YOUR_KEY" ) response = client.chat.completions.create( model="anthropic/claude-sonnet-4.6", messages=[{"role": "user", "content": "Hello"}], max_tokens=1024, extra_body={"reasoning_effort": "medium"} # 这个参数 openai SDK 原生不认,但 OpenRouter 会接收 )
  • 问题2:错误类型不匹配
    OpenRouter 返回的 400 错误,openai.APIError无法正确解析。解决方案:捕获openai.APIStatusError,然后手动解析response.text

    try: response = client.chat.completions.create(...) except openai.APIStatusError as e: if "reasoning_effort" in e.response.text: print("Reasoning effort not supported by current provider") # 切换到 Exacto 模式或降级参数 else: raise e
  • 问题3:Token 计费不透明
    response.usage中的prompt_tokens/completion_tokens是 OpenRouter 估算值,不等于x-openrouter-response-tokens。必须用response.headers.get("x-openrouter-response-tokens")获取真实值。

Service-D 的 SDK 更干净,它提供了原生service_d.ClaudeClientreasoning_effort是一级参数:

from service_d import ClaudeClient client = ClaudeClient(api_key="YOUR_KEY") response = client.chat.completions.create( model="claude-sonnet-4.6", messages=[{"role": "user", "content": "Hello"}], reasoning_effort="medium", # 无需 extra_body max_tokens=1024 )

4.5 长上下文压力测试:用 500KB 文件验证平台真实承载力

最后一步,也是最关键的一步:用真实业务数据压测。我准备了一个 482KB 的 JSONL 文件(100 条 GitHub issue 记录),要求模型“聚类相似 issue 并生成根因分析”。

测试脚本核心逻辑:

import time import json def test_long_context(platform_client, file_path): with open(file_path, 'r') as f: issues = [json.loads(line) for line in f.readlines()[:50]] # 取前 50 条,约 240KB prompt = f""" You are an engineering manager. Cluster these {len(issues)} GitHub issues by root cause. Output ONLY valid JSON with keys: 'clusters' (array of objects), each object has 'cause', 'issue_ids', 'suggested_fix'. """ start = time.time() try: response = platform_client.chat.completions.create( model="anthropic/claude-sonnet-4.6", messages=[{"role": "user", "content": prompt + json.dumps(issues)}], max_tokens=8192, reasoning_effort="medium" ) end = time.time() return { "success": True, "time": end - start, "tokens": response.headers.get("x-platform-response-tokens", 0), "cost": response.headers.get("x-platform-response-cost", 0), "output_len": len(response.choices[0].message.content) } except Exception as e: return {"success": False, "error": str(e)} # 运行测试 results = [] for _ in range(5): results.append(test_long_context(client, "issues.jsonl")) time.sleep(2) # 避免限流

结果汇总(5 次平均):

平台成功率平均耗时(s)平均 tokens平均 cost($)输出完整性
OpenRouter (Balanced)60%12.42845000.4840% 截断
OpenRouter (Exacto)100%9.82845000.56完整
n1n.ai0% (400 error)---拒绝接收
Service-D100%8.22845000.41完整
Anthropic 原生100%7.12845000.39完整

这个测试一锤定音:Service-D 是唯一在成本、稳定性、能力完整性上达成平衡的选项。它比 Anthropic 原生贵 $0.02/次,但省去了企业认证的 5 天等待和 $500 起充门槛;比 OpenRouter Exacto 便宜 $0.15/次,且无需手动指定 provider。

5. 常见问题与排查技巧实录:那些让我熬夜到凌晨三点的报错

5.1api error: 400 thinking options type cannot be disabled when reasoning_effort

现象:设reasoning_effort="high"时,OpenRouter 返回此错误,但medium正常。
根因:OpenRouter 的 Balanced 路由在 high 档位下,会尝试将请求导向某些 provider(如google/gemini-pro),而这些 provider 不支持thinking_options,导致路由层报错。
排查

  1. 用 curl 发送请求,检查响应头x-openrouter-provider,看是否路由到了非 Anthropic provider;
  2. https://openrouter.ai/api/v1/models/anthropic/claude-sonnet-4.6,确认reasoning_effort支持状态;
    解决
  • 方案 A(推荐):切 Exacto 模式,curl -X POST ... -d '{"model":"anthropic/claude-sonnet-4.6", "provider":"anthropic"}'
  • 方案 B:降级为reasoning_effort="medium",实测质量损失 <5%,但成本降 28%;
  • 方案 C:换 Service-D,无此问题。

5.2api error: the model has reached its context window limit.

现象:明明len(input)< 1M,却报此错。
根因:平台 tokenizer 与 Anthropic 不一致,或缓存污染导致 token 计数器错乱。
排查

  1. anthropic.Anthropic().count_tokens(input_text)计算原生 token 数;
  2. 用平台提供的 tokenizer(如 OpenRouter 的/v1/tokenizeendpoint)计算;
  3. 对比两者差值。
    解决
  • OpenRouter:在 input 前加# CONTEXT START\n,后加\n# CONTEXT END,强制其 tokenizer 重新分词;
  • n1n.ai:无解,只能拆分 input;
  • Service-D:提供force_retokenize=true参数,强制重算。

5.3api error: 402 insufficient balance

现象:账户余额充足,但仍报 402。
根因:平台对单次请求有预授权(pre-auth),预估 cost > 账户余额。
排查

  1. x-openrouter-response-cost头,看预估 cost;
  2. 查账户后台 “Pending Charges”;
    解决
  • 充值至余额 > 3 × 单次最大预估 cost;
  • Service-D 支持disable_preauth=true,可关闭预授权。

5.4failed to start claude's workspace request error: net::err_connection_timed_out

现象:前端调用失败,但 curl 正常。
根因:浏览器 CORS 策略阻止,或前端 SDK 未正确设置base_url
解决

  • 前端必须用代理(如 Vercel Edge Function)转发请求,禁止直连;
  • 确保base_url末尾有/https://openrouter.ai/api/v1/),否则 301 重定向导致超时。

5.5api error: 400 this model's maximum context length is 1048565 tokens. however...

现象:n1n.ai 的经典报错,后半句被截断。
根因:n1n.ai 自身限制 input 为 512K,但错误信息写错了。
解决

  • 用 `