Mengklasifikasikan Mode Kegagalan Agen
Bangun taksonomi kegagalan agen: kesalahan alat, keluaran yang formatnya tidak valid, loop penalaran, kehabisan konteks, dan ketidaktersediaan layanan eksternal, lalu rancang strategi pemulihan untuk masing-masingnya.
Mengklasifikasikan Mode Kegagalan Agen adalah pelajaran AI Engineering Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Engineering Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Engineering Academy mencakup 4 pelajaran total.
Mengapa Agen Gagal dengan Cara yang Berbeda
Agen mengalami kegagalan yang berbeda dari pemanggilan LLM sederhana. Pemanggilan satu putaran akan mengembalikan jawaban atau menghasilkan error. Agen yang menjalankan tugas multi-langkah dapat gagal kapan saja — dan kegagalan tersebut mungkin tidak terlihat jelas dari keluaran akhirnya. Memahami taksonomi mode kegagalan agen adalah langkah pertama untuk membangun agen yang dapat mendeteksi, mendiagnosis, dan memulihkan diri dari kegagalannya.
Mode Kegagalan 1: Error Alat
Error alat terjadi ketika agen memanggil alat dengan argumen yang tidak valid, alat menghasilkan pengecualian, atau alat mengembalikan hasil yang kosong atau formatnya rusak. Contohnya meliputi memanggil API pencarian dengan kueri yang formatnya rusak, mengkueri basis data menggunakan SQL yang tidak valid, atau menjalankan eksekutor kode yang mengalami waktu habis. Error alat paling mudah dideteksi karena menghasilkan sinyal pengecualian yang eksplisit dan dapat ditangkap serta ditangani.
class ToolError(Exception):
def __init__(self, tool_name: str, args: dict, error: Exception):
self.tool_name = tool_name
self.args = args
self.original_error = error
super().__init__(f'Tool {tool_name} failed: {error}')
def safe_tool_call(tool_func, args: dict) -> str:
try:
result = tool_func(**args)
if not result:
return 'Tool returned empty result. Try a different approach.'
return str(result)
except Exception as e:
raise ToolError(tool_func.__name__, args, e)Mode Kegagalan 2: Keluaran dengan Format Rusak
Keluaran dengan format rusak terjadi ketika agen menghasilkan teks yang tidak sesuai dengan format yang diharapkan — misalnya, mengembalikan bahasa alami ketika langkah berikutnya mengharapkan JSON, atau memanggil alat dengan argumen dalam struktur yang salah. Hal ini sering terjadi ketika agen mencampuradukkan langkah saat ini dengan langkah sebelumnya. Validasi format setiap keluaran agen sebelum menggunakannya dan minta ulang ketika formatnya salah.
import json
def validate_agent_output(raw_output: str, expected_format: str) -> dict:
if expected_format == 'json':
try:
return json.loads(raw_output)
except json.JSONDecodeError as e:
return {
'valid': False,
'error': f'Expected JSON but got invalid JSON: {e}',
'raw': raw_output[:200]
}
return {'valid': True, 'data': raw_output}Mode Kegagalan 3: Perulangan Penalaran
Perulangan penalaran terjadi ketika agen mengulangi tindakan atau pemikiran yang sama tanpa batas dan tanpa mengalami kemajuan. Agen mungkin menjalankan kueri pencarian yang sama 10 kali berturut-turut, mendapatkan hasil kosong yang sama, dan tidak tahu apa yang harus dicoba berikutnya. Deteksi perulangan dengan melacak tindakan terbaru dan memeriksa pengulangan. Saat perulangan terdeteksi, sisipkan prompt meta yang memberi tahu agen untuk mencoba pendekatan yang berbeda.
from collections import Counter
class LoopDetector:
def __init__(self, window: int = 5, threshold: int = 3):
self.recent_actions = []
self.window = window
self.threshold = threshold
def record(self, action: str) -> bool:
self.recent_actions.append(action)
if len(self.recent_actions) > self.window:
self.recent_actions.pop(0)
counts = Counter(self.recent_actions)
most_common_count = counts.most_common(1)[0][1] if counts else 0
return most_common_count >= self.threshold # True = loop detectedMode Kegagalan 4: Kehabisan Konteks
Kehabisan konteks terjadi ketika riwayat yang terkumpul pada agen (pemanggilan alat, observasi, pemikiran) melebihi jendela konteks model. Model dapat memotong riwayat secara diam-diam (sehingga informasi penting hilang) atau menghasilkan error batas token. Cegah hal ini dengan melacak penggunaan token di setiap langkah dan memadatkan riwayat (meringkas langkah-langkah lama) sebelum mencapai batas.
import tiktoken
CONTEXT_LIMIT = 100_000 # tokens
COMPRESS_AT = 80_000 # trigger compression with headroom
enc = tiktoken.encoding_for_model('gpt-4o')
def total_tokens(messages: list) -> int:
return sum(len(enc.encode(str(m))) for m in messages)
def check_context(messages: list) -> str:
tokens = total_tokens(messages)
if tokens > COMPRESS_AT:
return 'compress'
if tokens > CONTEXT_LIMIT:
return 'critical'
return 'ok'Mode Kegagalan 5: Layanan Eksternal Tidak Tersedia
Kegagalan layanan eksternal terjadi ketika layanan yang mendasari suatu alat sedang tidak aktif, terkena pembatasan laju, atau mengembalikan error yang tidak terduga. Agen yang tidak dapat menjangkau basis data yang perlu dikuerinya akan terhenti. Berbeda dari perulangan penalaran (yang merupakan kesalahan agen), kegagalan eksternal merupakan kegagalan lingkungan. Tangani dengan percobaan ulang dan jeda eksponensial, serta sediakan alat cadangan yang dapat memperkirakan hasil menggunakan sumber data berbeda.
import asyncio
async def resilient_tool_call(tool_func, args: dict, max_retries: int = 3) -> str:
for attempt in range(max_retries):
try:
return await tool_func(**args)
except (ConnectionError, TimeoutError) as e:
if attempt == max_retries - 1:
return f'Service unavailable after {max_retries} attempts. Error: {e}'
wait = 2 ** attempt # 1s, 2s, 4s
await asyncio.sleep(wait)
return 'Unexpected error in resilient_tool_call'Mode Kegagalan 6: Kesalahpahaman Tujuan
Kesalahpahaman tujuan terjadi ketika agen salah menafsirkan tugas dan mengejar tujuan yang sedikit berbeda. Ini merupakan kegagalan yang paling sulit dideteksi karena agen mungkin berhasil menyelesaikan tugas — tetapi bukan tugas yang dimaksudkan pengguna. Kurangi risikonya dengan meminta agen menyatakan kembali tujuan menggunakan kata-katanya sendiri di awal, serta menerapkan langkah verifikasi akhir untuk memeriksa apakah hasilnya benar-benar menjawab pertanyaan awal.
async def confirm_goal_understanding(original_task: str) -> str:
resp = await client.chat.completions.create(
model='gpt-4o',
messages=[
{'role': 'system', 'content': 'Restate the task in your own words. Be specific about what the final deliverable should be.'},
{'role': 'user', 'content': f'Task: {original_task}'}
]
)
return resp.choices[0].message.content
# Use the restatement as the first step of the agent
# to catch misunderstandings before any tools are calledMembangun Sistem Klasifikasi Kegagalan
Buat pengklasifikasi kegagalan terstruktur yang memberi label tipe pada setiap pengecualian agen. Hal ini memungkinkan pengalihan otomatis ke strategi pemulihan yang sesuai. Simpan log kegagalan dengan label tipe agar Anda dapat menganalisis mode kegagalan yang paling umum dan menentukan prioritas penanganannya. Error alat dan perulangan biasanya merupakan kegagalan yang paling sering terjadi dan paling mudah diperbaiki.
from enum import Enum
from dataclasses import dataclass
class FailureType(Enum):
TOOL_ERROR = 'tool_error'
MALFORMED_OUTPUT = 'malformed_output'
REASONING_LOOP = 'reasoning_loop'
CONTEXT_EXHAUSTION = 'context_exhaustion'
EXTERNAL_SERVICE = 'external_service'
GOAL_MISUNDERSTANDING = 'goal_misunderstanding'
MAX_ITERATIONS = 'max_iterations'
UNKNOWN = 'unknown'
@dataclass
class AgentFailure:
failure_type: FailureType
step: int
tool_name: str | None
error_message: str
recoverable: boolMemetakan Kegagalan ke Tindakan Pemulihan
Setiap tipe kegagalan memiliki tindakan pemulihan yang sesuai. Error alat memerlukan percobaan ulang dengan argumen yang disesuaikan. Perulangan memerlukan prompt keberagaman yang memberi tahu agen untuk mencoba sesuatu yang baru. Kehabisan konteks memerlukan pemadatan. Kegagalan layanan eksternal memerlukan alat cadangan. Kesalahpahaman tujuan memerlukan permintaan klarifikasi. Petakan semua hal ini secara eksplisit dalam pengarah pemulihan yang dipanggil oleh waktu proses agen ketika kegagalan terjadi.
RECOVERY_ACTIONS = {
FailureType.TOOL_ERROR: 'retry_with_corrected_args',
FailureType.MALFORMED_OUTPUT: 'reformat_output',
FailureType.REASONING_LOOP: 'inject_diversity_prompt',
FailureType.CONTEXT_EXHAUSTION: 'compress_history',
FailureType.EXTERNAL_SERVICE: 'use_fallback_tool',
FailureType.GOAL_MISUNDERSTANDING:'request_clarification',
FailureType.MAX_ITERATIONS: 'escalate_to_human',
FailureType.UNKNOWN: 'escalate_to_human'
}Menetapkan Batas Iterasi Maksimum
Setiap agen harus memiliki batas iterasi maksimum sebagai batas keselamatan yang tegas. Tanpanya, agen yang mengalami perulangan akan berjalan tanpa batas dan menghabiskan token serta biaya. Tetapkan batas berdasarkan kompleksitas tugas yang diharapkan: agen tanya jawab sederhana mungkin dibatasi hingga 5 langkah, sedangkan agen riset yang kompleks mungkin diizinkan melakukan 20 langkah. Ketika batas tercapai, catat kegagalan, simpan hasil sebagian, lalu eskalasikan kepada manusia atau kembalikan jawaban sebagian.
MAX_ITERATIONS = 15
async def run_agent(task: str) -> str:
messages = [{'role': 'user', 'content': task}]
loop_detector = LoopDetector()
for iteration in range(MAX_ITERATIONS):
response = await get_agent_action(messages)
if response.is_final:
return response.answer
action_key = f'{response.tool}:{response.args}'
if loop_detector.record(action_key):
messages.append({'role': 'system', 'content': 'You are repeating yourself. Try a completely different approach.'})
continue
result = await execute_tool(response.tool, response.args)
messages.append({'role': 'tool', 'content': result})
return 'Task exceeded maximum iterations. Partial results: ' + get_partial_result(messages)Mencatat Kegagalan untuk Analisis Setelah Kejadian
Catat setiap kegagalan agen dengan konteks yang memadai untuk mendiagnosisnya setelah kejadian: deskripsi tugas lengkap, seluruh riwayat tindakan hingga titik kegagalan, tipe kegagalan dan pesan error, jumlah iterasi, serta penggunaan token. Simpan informasi ini dalam tabel kegagalan dengan indeks pada failure_type dan task_id. Tinjau log kegagalan secara berkala untuk mengidentifikasi tipe tugas yang paling rentan terhadap mode kegagalan tertentu dan menentukan prioritas perbaikan yang sesuai.
import json
from dataclasses import asdict
async def log_agent_failure(task_id: str, failure: AgentFailure, history: list, pool):
async with pool.acquire() as conn:
await conn.execute('''
INSERT INTO agent_failures
(task_id, failure_type, step, tool_name, error_message,
recoverable, action_history, failed_at)
VALUES ($1, $2, $3, $4, $5, $6, $7, NOW())
''',
task_id,
failure.failure_type.value,
failure.step,
failure.tool_name,
failure.error_message,
failure.recoverable,
json.dumps(history)
)Pemeriksaan Singkat
Uji pemahaman Anda tentang klasifikasi mode kegagalan agen.
Rangkuman Pelajaran
Dalam pelajaran ini, Anda mempelajari bahwa enam mode kegagalan utama agen mencakup error alat, keluaran dengan format rusak, perulangan penalaran, kehabisan konteks, kegagalan layanan eksternal, dan kesalahpahaman tujuan; deteksi perulangan melalui riwayat tindakan menangkap pola berulang sebelum menghabiskan anggaran iterasi; serta pemetaan tipe kegagalan ke tindakan pemulihan memungkinkan pemulihan mandiri otomatis. Selanjutnya, kita akan menerapkan koreksi mandiri dan prompting reflektif.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengklasifikasikan Mode Kegagalan Agen” gratis?
Ya — teks lengkap “Mengklasifikasikan Mode Kegagalan Agen” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Engineering Academy, upgrade ke CoddyKit PRO. Kursus AI Engineering Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mengklasifikasikan Mode Kegagalan Agen”?
Bangun taksonomi kegagalan agen: kesalahan alat, keluaran yang formatnya tidak valid, loop penalaran, kehabisan konteks, dan ketidaktersediaan layanan eksternal, lalu rancang strategi pemulihan untuk… Kamu berlatih AI Engineering Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Engineering Academy?
Tidak diperlukan pengalaman sebelumnya. AI Engineering Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Mengklasifikasikan Mode Kegagalan Agen” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Engineering Academy ini?
Ya. Setiap pelajaran AI Engineering Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengklasifikasikan Mode Kegagalan Agen
- Koreksi Mandiri dan Pemberian Prompt Reflektif
- Pembuatan Titik Pemeriksaan dan Melanjutkan Tugas
- Eskalasi dengan Keterlibatan Manusia