Was this page helpful?
從 Claude 4 模型開始,當串流分類器介入處理潛在的政策違規時,Claude API 的串流回應會回傳 stop_reason: "refusal"。此安全功能有助於在即時串流期間維持內容合規性。
當串流分類器偵測到違反 Anthropic 政策的內容時,API 會回傳以下回應:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Hello.."
}
],
"stop_reason": "refusal"
}回應中不會包含額外的拒絕訊息。您必須自行處理回應並提供適當的使用者介面訊息。
當您收到 stop_reason: refusal 時,必須先重設對話上下文才能繼續。您可以移除或改寫觸發拒絕的那一輪對話,或完全清除對話歷史記錄。若未重設就嘗試繼續,將會持續收到拒絕。
即使回應被拒絕,回應中仍會提供用量指標。
當拒絕在 Claude 產生任何輸出之前就發生時,您在 Claude API 上不會被收取該請求的費用,且該回應中的用量計數僅供參考。當 Claude 在拒絕之前已產生輸出時,您將被收取該請求的費用。
重設上下文並非唯一的復原方式。您也可以在不同的 Claude 模型上重試被拒絕的請求,拒絕與備援頁面說明了如何透過伺服器端備援、SDK 中介軟體或手動重試來進行設定。
以下說明如何在您的應用程式中偵測並處理串流拒絕:
API 目前以三種不同方式處理拒絕:
| 拒絕類型 | 回應格式 | 發生時機 |
|---|---|---|
| 串流分類器拒絕 | stop_reason: refusal | 串流期間內容違反政策時 |
| API 輸入與著作權驗證 | 400 錯誤碼 | 輸入未通過驗證檢查時 |
| 模型產生的拒絕 | 標準文字回應 | 模型本身決定拒絕時 |
未來的 API 版本將擴展 stop_reason: refusal 模式,以統一所有類型的拒絕處理方式。
stop_reason: refusal 檢查如果您在此功能首次推出時就建置了拒絕處理機制,或正在將其加入現有的整合中,請檢查以下事項:
stop_reason: "refusal",因此僅基於錯誤率建立的監控機制無法偵測到它。請將拒絕作為獨立的訊號進行追蹤。stop_details 物件,用於識別拒絕背後的政策類別。完整的回應結構請參閱拒絕與備援。stop_reason: "refusal" 的成功結果回傳,而非錯誤結果。stop_reason 為中心進行處理。 API 持續將拒絕處理整合至 stop_reason: "refusal",因此請根據停止原因進行分支處理,而非依據特定模型的行為。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-4-8",
) 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}")