Mulai dari model Claude 4, respons streaming dari API Claude mengembalikan stop_reason: "refusal" ketika pengklasifikasi streaming melakukan intervensi untuk menangani potensi pelanggaran kebijakan. Fitur keamanan ini membantu menjaga kepatuhan konten selama streaming real-time.
Halaman ini membahas bagaimana penolakan muncul dalam respons streaming. Untuk setiap nilai stop_reason dan cara menanganinya, lihat Stop reason dan fallback. Untuk mencoba ulang permintaan yang ditolak pada model Claude lain, lihat Penolakan dan fallback.
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 tersebut dan menyediakan pesan yang sesuai untuk ditampilkan kepada pengguna.
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 seluruh riwayat percakapan. Mencoba melanjutkan tanpa mereset akan menghasilkan penolakan yang berkelanjutan.
Metrik penggunaan tetap disediakan dalam respons, bahkan ketika respons ditolak.
Ketika penolakan tiba sebelum Claude menghasilkan output apa pun, Anda tidak ditagih untuk permintaan tersebut pada API Claude, dan jumlah penggunaan dalam respons tersebut hanya bersifat informasional. Ketika Claude menghasilkan output sebelum penolakan, Anda ditagih untuk permintaan tersebut.
Mereset konteks bukan satu-satunya cara untuk memulihkan. Anda juga dapat mencoba ulang permintaan yang ditolak pada model Claude yang berbeda, dan halaman Penolakan dan fallback menunjukkan cara menyiapkannya dengan fallback sisi server, middleware SDK, atau percobaan ulang manual.
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-4-8",
) 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 pengklasifikasi 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 memutuskan untuk menolak |
Versi API mendatang akan memperluas pola stop_reason: refusal untuk menyatukan penanganan penolakan di semua jenis.
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 lengkapnya.stop_reason: "refusal", bukan sebagai hasil yang error.stop_reason. API terus mengonsolidasikan penanganan penolakan di sekitar stop_reason: "refusal", jadi lakukan percabangan berdasarkan stop reason daripada berdasarkan 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.
Stream respons dan baca stop_reason dari event message_delta saat tiba.
Layani pengguna di berbagai bahasa dengan kemampuan lintas bahasa Claude.
Was this page helpful?