Ab den Claude 4-Modellen geben Streaming-Antworten der Claude-API stop_reason: "refusal" zurück, wenn Streaming-Klassifikatoren eingreifen, um potenzielle Richtlinienverstöße zu behandeln. Diese Sicherheitsfunktion hilft dabei, die Einhaltung von Inhaltsrichtlinien während des Echtzeit-Streamings zu gewährleisten.
Diese Seite behandelt, wie Ablehnungen in Streaming-Antworten erscheinen. Für jeden stop_reason-Wert und dessen Behandlung siehe Stop-Reasons und Fallback. Um abgelehnte Anfragen mit einem anderen Claude-Modell zu wiederholen, siehe Ablehnungen und Fallback.
Wenn Streaming-Klassifikatoren Inhalte erkennen, die gegen die Richtlinien von Anthropic verstoßen, gibt die API diese Antwort zurück:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Hello.."
}
],
"stop_reason": "refusal"
}Es wird keine zusätzliche Ablehnungsnachricht mitgeliefert. Du musst die Antwort selbst behandeln und geeignete benutzerseitige Nachrichten bereitstellen.
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. Ein Versuch, ohne Zurücksetzen fortzufahren, führt zu weiteren Ablehnungen.
Nutzungsmetriken werden weiterhin in der Antwort bereitgestellt, auch wenn die Antwort abgelehnt wird.
Wenn eine Ablehnung eintrifft, bevor Claude eine Ausgabe generiert, wird dir die Anfrage über die Claude-API nicht in Rechnung gestellt, und die Nutzungszahlen in dieser Antwort dienen nur zur Information. Wenn Claude vor der Ablehnung eine Ausgabe generiert, wird dir diese Anfrage in Rechnung gestellt.
Das Zurücksetzen des Kontexts ist nicht die einzige Möglichkeit zur Wiederherstellung. Du kannst die abgelehnte Anfrage auch mit einem anderen Claude-Modell wiederholen, und die Seite Ablehnungen und Fallback zeigt, wie du das mit serverseitigem Fallback, der SDK-Middleware oder einem manuellen Retry einrichtest.
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-4-8",
) as stream:
for event in stream:
# Prüfe auf Ablehnung 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 es 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 |
| Vom Modell generierte Ablehnungen | Standard-Textantworten | Wenn das Modell selbst entscheidet, abzulehnen |
Zukünftige API-Versionen werden das stop_reason: refusal-Muster erweitern, um die Ablehnungsbehandlung über alle Typen hinweg zu vereinheitlichen.
stop_reason: refusal in deine FehlerbehandlungWenn du die Ablehnungsbehandlung implementiert hast, als diese Funktion erstmals ausgeliefert wurde, oder wenn du sie zu einer bestehenden Integration hinzufügst, überprüfe Folgendes:
stop_reason: "refusal" an, sodass ein Monitoring, das nur auf Fehlerraten basiert, 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 rund um stop_reason: "refusal", verzweige also anhand des Stop-Reasons und nicht anhand modellspezifischen Verhaltens.Wiederhole abgelehnte Anfragen mit 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 Nutzer in verschiedenen Sprachen mit Claudes sprachübergreifenden Fähigkeiten.
Was this page helpful?