Error Handling
Sesi 9.6 · ~5 menit baca
Agent Gagal. Rencanakan Itu.
Agent berhalusinasi. Mereka mengabaikan instruksi. Mereka menghasilkan output dalam format yang salah. Mereka melampaui token limit. Mereka mengembalikan respons kosong. Mereka mengarang fakta yang kedengaran masuk akal. Ini bukan edge case. Ini kondisi operasional normal buat sistem AI manapun.
Pipeline kamu butuh error handling: pengecekan otomatis di antara setiap agent yang menangkap kegagalan sebelum menyebar ke downstream. Research brief yang buruk yang sampai ke Agent Penulis menghasilkan draft yang buruk. Draft yang buruk yang sampai ke Agent Editor menghasilkan skor review yang ga bermakna. Error berkompon. Tangkap lebih awal.
Tiga Lapisan Pengecekan
Cek Format"} B -- Lolos --> C{"Lapisan 2:
Cek Konten"} B -- Gagal --> D["Retry dengan
pesan error format"] C -- Lolos --> E{"Lapisan 3:
Cek Kualitas"} C -- Gagal --> F["Retry dengan
pesan error konten"] E -- Lolos --> G["Teruskan ke
Agent Berikutnya"] E -- Gagal --> H["Hentikan untuk
Review Manusia"] D -- "Max retry" --> H F -- "Max retry" --> H style A fill:#222221,stroke:#c8a882,color:#ede9e3 style B fill:#222221,stroke:#6b8f71,color:#ede9e3 style C fill:#222221,stroke:#8a8478,color:#ede9e3 style D fill:#222221,stroke:#c47a5a,color:#ede9e3 style E fill:#222221,stroke:#c8a882,color:#ede9e3 style F fill:#222221,stroke:#c47a5a,color:#ede9e3 style G fill:#222221,stroke:#6b8f71,color:#ede9e3 style H fill:#222221,stroke:#c47a5a,color:#ede9e3
Lapisan 1: Cek Format
Apakah output-nya cocok dengan format yang diharapkan? Buat output JSON: apakah bisa di-parse? Apakah berisi key yang dibutuhkan? Apakah tipe datanya benar? Buat output Markdown: apakah berisi heading yang diharapkan? Apakah dalam range word count?
Cek format sepenuhnya bisa diotomatisasi. Script Python dengan json.loads() memvalidasi JSON dalam milidetik. Regex menghitung heading. Fungsi word count ngecek panjang. Ga butuh AI.
| Agent | Cek Format | Implementasi |
|---|---|---|
| Agent Riset | JSON valid, semua key wajib ada, array sources ga kosong | Python: json.loads() + cek keberadaan key |
| Agent Penulis | Markdown dengan H2 heading yang diharapkan, word count 800-1200 | Python: regex hitung heading + word count |
| Agent Editor | Semua 5 dimensi diskor (0-10), verdict ada (PASS/REWORK/FAIL) | Python: parse skor + cek field verdict |
Lapisan 2: Cek Konten
Apakah output-nya berisi konten yang benar? Buat Agent Riset: apakah sumber-sumbernya beneran ada? (Cek URL dengan HEAD request.) Apakah "key findings" beneran soal topik yang diminta? Buat Agent Penulis: apakah dia merujuk data point dari research brief? Apakah dia mengikuti urutan section dari outline?
Cek konten butuh logika lebih tapi masih bisa diotomatisasi. Validasi URL itu HTTP request sederhana. Ngecek apakah data point spesifik dari research brief muncul di draft itu string search.
Lapisan 3: Cek Kualitas
Apakah output-nya memenuhi threshold kualitas? Buat Agent Penulis: berapa banyak AI artifact marker yang ada? (Scan 15 marker dari Module 1.) Berapa persen kalimat yang dimulai dengan kata yang sama? (Tanda overuse parallel structure.) Apakah reading level sesuai buat target audiens?
Cek kualitas bisa diotomatisasi sebagian dengan heuristic. Deteksi artifact pake keyword dan pattern matching. Reading level pake formula yang udah established (Flesch-Kincaid). Beberapa cek kualitas butuh panggilan AI terpisah, yang nambah biaya tapi nangkep masalah yang ga ketangkep pattern matching.
Strategi Retry
Waktu pengecekan gagal, respons default-nya adalah retry agent dengan prompt yang dimodifikasi. Modifikasinya harus menyertakan error spesifik yang ditemukan.
| Tipe Kegagalan | Pendekatan Retry | Max Retry |
|---|---|---|
| JSON ga valid | Tambahkan: "Output sebelumnya kamu bukan JSON valid. Output HANYA JSON valid." | 2 |
| Field wajib hilang | Tambahkan: "Output kamu ga punya key [field]. Sertakan semua field wajib." | 2 |
| Word count di luar range | Tambahkan: "Output [N] kata. Target 900-1100. Sesuaikan panjangnya." | 1 |
| Artifact count tinggi | Tambahkan: "Ditemukan [N] AI artifact. Hapus frasa hedging dan tricolon." | 1 |
| Outline ga diikuti | Regenerate dari awal dengan penekanan pada kepatuhan outline | 1 |
Set maximum retry count per agent (biasanya 2). Kalo agent gagal setelah maximum retry, chain berhenti buat intervensi manusia. Jangan retry tanpa batas. Agent yang gagal 3 kali pada input yang sama punya masalah prompt, bukan masalah keberuntungan.
Error Logging
Setiap kegagalan dan retry harus dicatat: nama agent, input (atau hash-nya), tipe error, percobaan retry, dan apakah retry-nya berhasil. Seiring waktu, log ini mengungkap pola. Kalo Agent Riset gagal pada kepatuhan schema 30% dari waktu, instruksi schema kamu butuh penguatan. Kalo Agent Penulis gagal pada word count dengan outline yang panjang, content spec kamu butuh penyesuaian buat panjang outline.
Error handling bukan jaring pengaman. Ini mekanisme feedback. Error memberitahu kamu di mana instruksi agent kamu lemah. Perbaiki instruksinya, dan error rate-nya turun. Pipeline dengan zero error bukan pipeline yang sehat. Itu pipeline yang ga logging dengan benar.
Bacaan Lanjutan
- Mastering Async for LLM Processing, Instructor
- Asynchronous LLM API Calls in Python, Unite.AI
- Multi-Agent Workflows: Practical Guide, Kanerika (Medium)
Tugas
Tambahkan satu pengecekan otomatis di antara setiap agent di chain kamu:
- Antara Agent Riset dan Agent Penulis: definisikan pengecekannya, apa yang dianggap lolos/gagal, dan strategi retry.
- Antara Agent Penulis dan Agent Editor: definisikan pengecekannya, kriteria lolos/gagal, dan strategi retry.
- Implementasikan minimal satu pengecekan sebagai kode (atau minta AI coding assistant kamu menulisnya).
Jalankan chain kamu 5 kali. Berapa kali pengecekan menangkap error? Berapa retry yang dibutuhkan? Apakah ada chain yang berhenti buat intervensi manusia? Dokumentasikan hasilnya dan update system prompt agent kamu berdasarkan pola error yang kamu amati.