Ab den Claude 4 Modellen geben Streaming-Antworten von Claudes API stop_reason: "refusal" zurück, wenn Streaming-Klassifikatoren eingreifen, um potenzielle Richtlinienverstöße zu behandeln. Diese Sicherheitsfunktion hilft dabei, die Inhaltskonformität während des Echtzeit-Streamings aufrechtzuerhalten.
Wenn Streaming-Klassifikatoren Inhalte erkennen, die gegen Anthropics Richtlinien verstoßen, gibt die API diese Antwort zurück:
{
"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."
}
}Im Event-Stream kommt stop_details im message_delta-Event zusammen mit stop_reason an.
Wenn du stop_reason: refusal erhältst, musst du den Gesprächskontext zurücksetzen, bevor du fortfährst. Du kannst den Turn, der die Ablehnung ausgelöst hat, entfernen oder umformulieren oder den Gesprächsverlauf vollständig löschen. Der Versuch, ohne Zurücksetzen fortzufahren, führt zu weiteren Ablehnungen.
So erkennst und behandelst du Streaming-Ablehnungen in deiner Anwendung:
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:
# Prüfe auf Verweigerung im Message-Delta
if event.type == "message_delta":
if event.delta.stop_reason == "refusal":
reset_conversation()
break
except Exception as e:
print(f"Error: {e}")Die API behandelt Ablehnungen derzeit auf drei verschiedene Arten:
| Ablehnungstyp | Antwortformat | Wann sie auftritt |
|---|---|---|
| Ablehnungen durch Streaming-Klassifikatoren | stop_reason: refusal | Während des Streamings, wenn Inhalte gegen Richtlinien verstoßen |
| API-Eingabe- und Urheberrechtsvalidierung | 400-Fehlercodes | Wenn die Eingabe die Validierungsprüfungen nicht besteht |
| Modellgenerierte Ablehnungen | Standard-Textantworten | Wenn das Modell selbst ablehnt |
stop_reason: refusal in deine Fehlerbehandlung aufWenn du die Ablehnungsbehandlung gebaut hast, als diese Funktion zum ersten Mal ausgeliefert wurde, oder sie zu einer bestehenden Integration hinzufügst, prüfe Folgendes:
stop_reason: "refusal" an, sodass ein Monitoring, das nur auf Fehlerraten aufbaut, sie nicht erfasst. Verfolge Ablehnungen als eigenes Signal.stop_details-Objekt, das die Richtlinienkategorie hinter der Ablehnung identifiziert. Siehe Ablehnungen und Fallback für die vollständige Antwortstruktur.stop_reason: "refusal" zurückgegeben, nicht als fehlerhaftes Ergebnis.stop_reason zentralisieren. Die API konsolidiert die Ablehnungsbehandlung weiterhin um stop_reason: "refusal", verzweige also anhand des Stop-Grunds und nicht anhand modellspezifischen Verhaltens.Wiederhole abgelehnte Anfragen auf einem anderen Claude-Modell, serverseitig oder in deinem Client.
Jeder stop_reason-Wert und wie du ihn behandelst.
Streame Antworten und lies stop_reason aus message_delta-Events, sobald sie eintreffen.
Bediene Benutzer über Sprachen hinweg mit Claudes sprachübergreifenden Fähigkeiten.
Was this page helpful?