Mulai dari model Claude 4, respons streaming dari API Claude mengembalikan stop_reason: "refusal" ketika classifier streaming melakukan intervensi untuk menangani potensi pelanggaran kebijakan. Fitur keamanan ini membantu menjaga kepatuhan konten selama streaming real-time.
Ketika classifier streaming mendeteksi konten yang melanggar kebijakan Anthropic, API mengembalikan respons ini:
{
"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."
}
}Dalam event stream, stop_details tiba pada event message_delta bersama dengan stop_reason.
Ketika Anda menerima stop_reason: refusal, Anda harus mereset konteks percakapan sebelum melanjutkan. Anda dapat menghapus atau menyusun ulang giliran yang memicu penolakan, atau menghapus riwayat percakapan sepenuhnya. Mencoba melanjutkan tanpa mereset akan mengakibatkan penolakan yang berkelanjutan.
Berikut cara mendeteksi dan menangani penolakan streaming dalam aplikasi Anda:
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:
# Periksa penolakan dalam delta pesan
if event.type == "message_delta":
if event.delta.stop_reason == "refusal":
reset_conversation()
break
except Exception as e:
print(f"Error: {e}")API saat ini menangani penolakan dengan tiga cara berbeda:
| Jenis penolakan | Format respons | Kapan terjadi |
|---|---|---|
| Penolakan classifier streaming | stop_reason: refusal | Selama streaming ketika konten melanggar kebijakan |
| Validasi input API dan hak cipta | Kode error 400 | Ketika input gagal dalam pemeriksaan validasi |
| Penolakan yang dihasilkan model | Respons teks standar | Ketika model itu sendiri menolak |
stop_reason: refusal dalam penanganan error AndaJika Anda membangun penanganan penolakan ketika fitur ini pertama kali dirilis, atau Anda menambahkannya ke integrasi yang sudah ada, periksa hal-hal berikut:
stop_reason: "refusal", sehingga pemantauan yang hanya dibangun berdasarkan tingkat error tidak akan menampilkannya. Lacak penolakan sebagai sinyal tersendiri.stop_details yang mengidentifikasi kategori kebijakan di balik penolakan tersebut. Lihat Penolakan dan fallback untuk bentuk respons lengkap.stop_reason: "refusal", bukan sebagai hasil yang error.stop_reason. API terus mengonsolidasikan penanganan penolakan di sekitar stop_reason: "refusal", jadi lakukan percabangan pada stop reason alih-alih pada perilaku spesifik model.Coba ulang permintaan yang ditolak pada model Claude lain, di sisi server atau di klien Anda.
Setiap nilai stop_reason dan cara menanganinya.
Lakukan streaming respons dan baca stop_reason dari event message_delta saat tiba.
Layani pengguna lintas bahasa dengan kemampuan lintas bahasa Claude.
Was this page helpful?