Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
從 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 事件上。
當您收到 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-5",
) as stream:
for event in stream:
# 檢查訊息 delta 中是否有拒絕
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?