从 Claude 4 模型开始,当流式传输分类器介入处理潜在的政策违规时,Claude API 的流式传输响应会返回 stop_reason: "refusal"。此安全功能有助于在实时流式传输期间保持内容合规性。
当流式传输分类器检测到违反 Anthropic 政策的内容时,API 会返回以下响应:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Hello.."
}
],
"stop_reason": "refusal",
"stop_details": {
"type": "refusal",
"category": "cyber",
"explanation": "This request was declined because it could enable cyber harm."
}
}在事件流中,stop_details 会与 stop_reason 一起出现在 message_delta 事件上。
来自流式传输分类器的 refusal 响应包含一个 stop_details 对象,其中包含 category 和可供您向用户展示的人类可读的 explanation。请参阅拒绝和回退了解完整的响应结构和可用的类别。
在拒绝时,stop_details 对象始终存在,但其 category 和 explanation 字段可能为 null,例如当拒绝不对应任何命名类别时。请根据 stop_reason 或 stop_details.type 进行分支处理,而不要假设 category 和 explanation 已填充,并在它们为 null 时提供您自己的面向用户的消息。
当您收到 stop_reason: refusal 时,必须在继续之前重置对话上下文。您可以移除或改写触发拒绝的轮次,或完全清除对话历史。如果不重置就尝试继续,将导致持续的拒绝。
即使响应被拒绝,响应中仍会提供使用量指标。
当拒绝在 Claude 生成任何输出之前到达时,您不会因该请求在 Claude API 上被计费,并且该响应中的使用量计数仅供参考。当 Claude 在拒绝之前生成了输出时,您将为该请求付费。
重置上下文并不是唯一的恢复方式。您还可以在不同的 Claude 模型上重试被拒绝的请求,拒绝和回退页面展示了如何通过服务器端回退、SDK 中间件或手动重试来进行设置。
以下是在您的应用程序中检测和处理流式传输拒绝的方法:
client = anthropic.Anthropic()
messages = []
def reset_conversation():
"""Reset conversation context after refusal"""
global messages
messages = []
print("Conversation reset due to refusal")
try:
with client.messages.stream(
max_tokens=1024,
messages=messages + [{"role": "user", "content": "Hello"}],
model="claude-opus-5",
) as stream:
for event in stream:
# 检查消息增量中的拒绝情况
if event.type == "message_delta":
if event.delta.stop_reason == "refusal":
reset_conversation()
break
except Exception as e:
print(f"Error: {e}")API 目前以三种不同的方式处理拒绝:
| 拒绝类型 | 响应格式 | 发生时机 |
|---|---|---|
| 流式传输分类器拒绝 | stop_reason: refusal | 流式传输期间内容违反政策时 |
| API 输入和版权验证 | 400 错误代码 | 输入未通过验证检查时 |
| 模型生成的拒绝 | 标准文本响应 | 模型自身拒绝时 |
stop_reason: refusal 检查如果您在此功能首次发布时构建了拒绝处理,或者您正在将其添加到现有集成中,请检查以下内容:
stop_reason: "refusal",因此仅基于错误率构建的监控无法发现它。请将拒绝作为独立的信号进行跟踪。stop_details 对象,用于标识拒绝背后的政策类别。请参阅拒绝和回退了解完整的响应结构。stop_reason: "refusal" 的成功结果返回,而不是作为错误结果。stop_reason 上。 API 将继续围绕 stop_reason: "refusal" 整合拒绝处理,因此请根据停止原因而不是特定于模型的行为进行分支处理。在服务器端或您的客户端中,在另一个 Claude 模型上重试被拒绝的请求。
每个 stop_reason 值及其处理方法。
流式传输响应并在 message_delta 事件到达时从中读取 stop_reason。
利用 Claude 的跨语言能力为不同语言的用户提供服务。
Was this page helpful?