Claude 从 9 月 24 日起,被拦下的请求也计费:三类先开始
9 月 24 日,Anthropic 恢复了对一类请求的收费:模型在你拿到任何输出之前就被安全分类器拦下的那部分。范围只有三类。
| 类别 | 含义 | 输出前被拦是否计费 |
|---|---|---|
bio | 可能造成生物危害 | 计费 |
frontier_llm | 可能协助开发竞品模型 | 计费 |
reasoning_extraction | 要求复现内部推理过程 | 计费 |
cyber | 恶意软件、漏洞利用 | 免费 |
general_harms | 其余使用政策类别 | 免费 |
| 无类别(null) | — | 免费 |
计费单价就是那次请求所用模型的标准 per-token 费率。中途输出后被拦的早就计费,这次没变。
要紧的不是单价,是那条默认假设没了
很多人手里的自动化流水线建立在一个前提上:被拦下来不花钱,所以多试几次没关系。评测跑批、预算护栏、批量重试,全都默认拒答是零成本的。
现在它有价格了。官方给的两个数字要分开读:误报率低于 0.1% 说的是率;99.7% 的 Claude Code / Claude.ai / Cowork 账号没触发过,说的是面。两个数字都不能保证某一次具体拦截是对的,而公告里没有说误拦怎么退钱。
拒答在技术上不是报错:它是 HTTP 200,stop_reason 是 refusal,content 为空,stop_details 里带类别。你的代码如果把”有响应”当成”成功”,这类请求会静默地变成账单。
今天就改的三处
- 把
stop_reason == "refusal"单独记进日志和成本看板。现在它是可计费事件,不是噪声。按类别分桶,看bio/frontier_llm/reasoning_extraction各占多少。 - 重试前先看类别。这三类被拦,重试同样的措辞大概率再被拦一次,而且再收一次钱。改措辞或者走人,别无脑重试 3 次。
- 检查 prompt 里有没有主动触发
reasoning_extraction的写法。“把你的思考过程完整输出""一步一步展示你的推理链”这类指令,正是这个分类器要抓的。需要结构化推理的,用官方推荐的 adaptive thinking,不要让模型把内部推理写进回答。
这笔钱到底多大
可以自己算。假设每月 100 万次请求,命中率按 0.3% 算就是 3000 次;每次输入 2000 token、用输入价 4 美元每百万 token 的档位,约 24 美元一个月。量级不大。
但两类场景会放大:一是输入本身就很长(长上下文 agent 每次带几十万 token),二是你的流水线在被拦后自动重试。前者把单次价格放大上百倍,后者把次数放大若干倍——成本风险不在误报率,在重试策略。
被误拦了可以在 Claude Code 里用 /feedback 反馈,官方说会据此继续调分类器。注意官方同时声明这个类别清单会随误报率测量继续调整,今天免费的三类不等于明天免费。
泼冷水
把”拦截”和”收费”绑在一起,逻辑上是成立的:护栏如果可以被无限次免费试探,那它就不是护栏。攻击者用被盗账号或试用账号批量试词,现在每试一次都要付钱。
但代价落在持钥匙的人身上,攻击者用的是别人的钥匙。0.3% 的误报率听起来很小,可这 0.3% 的账单是发给正常付费用户的。改一条计费规则却不给冲正路径,这不是定价问题,是争议处理机制缺位——所以在你自己这侧把拒答记清楚、留证据,是眼下唯一能做的事。
原文:https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback