Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
從 Claude 4 模型開始,Claude API 的串流回應會在串流分類器介入處理潛在政策違規時返回 stop_reason: "refusal"。這項新的安全功能有助於在即時串流期間維持內容合規性。
若要深入了解由 Claude Sonnet 4.5 API 安全篩選器觸發的拒絕,請參閱了解 Sonnet 4.5 的 API 安全篩選器。
當串流分類器偵測到違反 Anthropic 政策的內容時,API 會返回此回應:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Hello.."
}
],
"stop_reason": "refusal"
}不包含額外的拒絕訊息。您必須處理回應並提供適當的使用者面向訊息。
當您收到 stop_reason: refusal 時,您必須通過移除或更新被拒絕的輪次來重設對話上下文,然後才能繼續。嘗試在不重設的情況下繼續將導致持續拒絕。
即使回應被拒絕,回應中仍會提供使用量指標以供計費之用。
您將被計費至拒絕為止的輸出令牌。
如果在使用 Claude Sonnet 4.5 或 Opus 4.1 時頻繁遇到 refusal 停止原因,您可以嘗試更新 API 呼叫以使用 Haiku 4.5 (claude-haiku-4-5-20251001),它具有不同的使用限制。深入了解了解 Sonnet 4.5 的 API 安全篩選器。
以下是如何在您的應用程式中偵測和處理串流拒絕的方法:
API 目前以三種不同的方式處理拒絕:
| 拒絕類型 | 回應格式 | 發生時機 |
|---|---|---|
| 串流分類器拒絕 | stop_reason: refusal | 在串流期間當內容違反政策時 |
| API 輸入和著作權驗證 | 400 錯誤代碼 | 當輸入未通過驗證檢查時 |
| 模型生成的拒絕 | 標準文字回應 | 當模型本身決定拒絕時 |
未來的 API 版本將擴展 stop_reason: refusal 模式以統一所有類型的拒絕處理。
stop_reason: refusal 檢查Was this page helpful?
client = anthropic.Anthropic()
messages = []
def reset_conversation():
"""拒絕後重設對話上下文"""
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-sonnet-4-6",
) as stream:
for event in stream:
# 檢查訊息 delta 中的拒絕
if hasattr(event, "type") and event.type == "message_delta":
if event.delta.stop_reason == "refusal":
reset_conversation()
break
except Exception as e:
print(f"Error: {e}")