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 neue Sicherheitsfunktion hilft dabei, die Einhaltung von Inhaltsrichtlinien während des Echtzeit-Streamings zu gewährleisten.
Um mehr über Ablehnungen zu erfahren, die durch API-Sicherheitsfilter für Claude Sonnet 4.5 ausgelöst werden, siehe Understanding Sonnet 4.5's API Safety Filters.
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 verarbeiten und eine geeignete benutzerseitige Nachricht bereitstellen.
Wenn du stop_reason: refusal erhältst, musst du den Konversationskontext zurücksetzen, bevor du fortfährst. Du kannst den Turn, der die Ablehnung ausgelöst hat, entfernen oder umformulieren, oder den Konversationsverlauf vollständig löschen. Wenn du versuchst, ohne Zurücksetzen fortzufahren, führt dies 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.
Wenn du bei der Verwendung von Claude Sonnet 4.5 oder Opus 4.1 (veraltet) häufig auf refusal-Stop-Reasons stößt, kannst du versuchen, deine API-Aufrufe auf Haiku 4.5 (claude-haiku-4-5-20251001) umzustellen, das andere Nutzungsbeschränkungen hat. Erfahre mehr über die API-Sicherheitsfilter von Sonnet 4.5.
So erkennst und behandelst du Streaming-Ablehnungen in deiner Anwendung:
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 Behandlung von Ablehnungen über alle Typen hinweg zu vereinheitlichen.
stop_reason: refusal in deine Fehlerbehandlung einWas this page helpful?
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}")