Was this page helpful?
Mulai dari model Claude 4, respons streaming dari API Claude mengembalikan stop_reason: "refusal" ketika pengklasifikasi streaming campur tangan untuk menangani potensi pelanggaran kebijakan. Fitur keamanan baru ini membantu mempertahankan kepatuhan konten selama streaming real-time.
Untuk mempelajari lebih lanjut tentang penolakan yang dipicu oleh filter keamanan API untuk Claude Sonnet 4.5, lihat Understanding Sonnet 4.5's API Safety Filters.
Ketika pengklasifikasi streaming mendeteksi konten yang melanggar kebijakan Anthropic, API mengembalikan respons ini:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Hello.."
}
],
"stop_reason": "refusal"
}Tidak ada pesan penolakan tambahan yang disertakan. Anda harus menangani respons dan memberikan pesan yang sesuai untuk pengguna.
Ketika Anda menerima stop_reason: refusal, Anda harus mengatur ulang konteks percakapan dengan menghapus atau memperbarui giliran yang ditolak sebelum melanjutkan. Mencoba melanjutkan tanpa mengatur ulang akan menghasilkan penolakan berkelanjutan.
Metrik penggunaan masih disediakan dalam respons untuk tujuan penagihan, bahkan ketika respons ditolak.
Anda akan ditagih untuk token output hingga penolakan.
Jika Anda sering mengalami stop reason refusal saat menggunakan Claude Sonnet 4.5 atau Opus 4.1, Anda dapat mencoba memperbarui panggilan API Anda untuk menggunakan Haiku 4.5 (claude-haiku-4-5-20251001), yang memiliki batasan penggunaan yang berbeda. Pelajari lebih lanjut tentang understanding Sonnet 4.5's API safety filters.
Berikut cara mendeteksi dan menangani streaming refusals di aplikasi Anda:
API saat ini menangani penolakan dengan tiga cara berbeda:
| Jenis Penolakan | Format Respons | Kapan Terjadi |
|---|---|---|
| Streaming classifier refusals | stop_reason: refusal | Selama streaming ketika konten melanggar kebijakan |
| Validasi input API dan hak cipta | Kode error 400 | Ketika input gagal pemeriksaan validasi |
| Penolakan yang dihasilkan model | Respons teks standar | Ketika model itu sendiri memutuskan untuk menolak |
Versi API masa depan akan memperluas pola stop_reason: refusal untuk menyatukan penanganan penolakan di semua jenis.
stop_reason: refusal dalam penanganan kesalahan Andaclient = 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-sonnet-4-6",
) as stream:
for event in stream:
# Check for refusal in message delta
if hasattr(event, "type") and event.type == "message_delta":
if event.delta.stop_reason == "refusal":
reset_conversation()
break
except Exception as e:
print(f"Error: {e}")