Kegagalan Umum dalam Putaran Agen
Putaran tak berujung, pemanggilan alat yang sama berulang kali, dan kegagalan mencapai jawaban akhir.
Kegagalan Umum dalam Putaran Agen adalah pelajaran AI Agents 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 Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.
Perulangan Agen dan Mode Kegagalannya
Perulangan agen dijalankan berulang kali: menalar → memanggil alat → mengamati hasil → menalar lagi. Perulangan ini kuat, tetapi rapuh. Beberapa mode kegagalan yang sudah dikenal dapat menjebak agen, membuang token, dan tidak menghasilkan keluaran yang berguna.
Memahami kegagalan ini adalah langkah pertama untuk mencegahnya.
Kegagalan 1: Perulangan Tak Berujung
Perulangan tak berujung terjadi ketika agen memanggil alat yang sama berulang kali dengan argumen yang sama tanpa mengalami kemajuan. Hal ini dapat terjadi ketika alat mengembalikan hasil yang tidak membantu dan agen tidak dapat menemukan jalan keluar melalui penalaran.
# Example of an agent in an infinite loop:
# Step 1: reasoning='Need to search for Python docs'
# tool='search_web', args={'query': 'Python documentation'}
# Step 2: reasoning='Search result was unhelpful, try again'
# tool='search_web', args={'query': 'Python documentation'}
# Step 3: reasoning='Search result was unhelpful, try again'
# tool='search_web', args={'query': 'Python documentation'}
# ... repeats until max_iterations or token budget is exhausted
print('Symptom: same tool + same arguments appearing repeatedly in steps')
print('Fix: detect repeated (tool, args) pairs and break the loop')Kegagalan 2: Keadaan Macet
Keadaan macet adalah versi perulangan tak berujung yang lebih tersamar. Agen terus menalar dan memanggil alat yang berbeda, tetapi tidak dapat mencapai jawaban akhir. Agen berpindah-pindah antara berbagai pendekatan tanpa mengalami kemajuan.
# Example of a stuck agent:
# Step 1: tool='search_web', args={'query': 'topic A'}
# Step 2: tool='search_web', args={'query': 'topic B'} # different args
# Step 3: tool='search_web', args={'query': 'topic A'} # back to first
# Step 4: tool='read_document', args={'url': '...'}
# Step 5: tool='search_web', args={'query': 'topic A'}
# ... no FINAL_ANSWER ever produced
print('Symptom: agent takes many steps but never calls FINAL_ANSWER')
print('Fix: max_iterations guard + force final answer if limit is near')Kegagalan 3: Tidak Ada Jawaban Akhir
Beberapa agen terus berulang tanpa pernah memutuskan bahwa tugas telah selesai. Mereka mengumpulkan informasi, tetapi tidak pernah berhenti untuk menyatukan dan mengembalikannya. Hal ini membuang token dan waktu.
# An agent that never concludes:
def run_agent_bad(query: str, max_steps: int = 20) -> str:
for step in range(max_steps):
action = llm_decide_action(query, history)
if action['type'] == 'tool':
result = execute_tool(action)
history.append(result)
# BUG: No check for 'final_answer' type!
# The agent loops until max_steps, returning None
return None # never actually returns an answer
# Fix: explicitly check for final_answer signal
def run_agent_good(query: str, max_steps: int = 20) -> str:
for step in range(max_steps):
action = llm_decide_action(query, history)
if action['type'] == 'final_answer':
return action['answer'] # exit cleanly
execute_tool(action)
return 'Reached step limit without a conclusion.'Kegagalan 4: Kesalahan Penguraian Pemanggilan Alat
Ketika LLM menghasilkan JSON yang tidak valid untuk pemanggilan fungsi, pelaksana alat gagal menguraikannya. Agen yang ditulis dengan buruk akan berhenti dengan kesalahan atau melewati langkah tersebut secara diam-diam. Agen yang tangguh menangkap kesalahan penguraian dan mengirimkan kembali kesalahan tersebut ke LLM.
import json
def safe_parse_tool_call(arguments_str: str) -> dict:
try:
return json.loads(arguments_str)
except json.JSONDecodeError as e:
print(f'Failed to parse tool arguments: {e}')
print(f'Raw: {arguments_str}')
return None
def execute_step(tool_call) -> str:
args = safe_parse_tool_call(tool_call.function.arguments)
if args is None:
# Feed the error back to the LLM in the next step
return f'ERROR: Could not parse tool arguments. Raw: {tool_call.function.arguments}'
return run_tool(tool_call.function.name, args)Kegagalan 5: Alat Tidak Mengembalikan Data Berguna
Sebuah alat mungkin berhasil secara teknis (tanpa pengecualian), tetapi mengembalikan data yang kosong atau tidak berguna. Agen harus menangani kasus ini dan tidak menganggap setiap pemanggilan alat akan mengembalikan informasi yang dapat ditindaklanjuti.
def run_agent_with_empty_result_handling(query: str) -> str:
for step in range(20):
action = decide_next_action(query, history)
if action['type'] == 'final_answer':
return action['answer']
result = execute_tool(action['tool'], action['args'])
# Detect empty results and provide context
if not result or result.strip() == '':
observation = f'Tool {action["tool"]} returned no data. Try a different approach or different arguments.'
elif 'error' in result.lower():
observation = f'Tool error: {result}. Consider a different tool or query.'
else:
observation = result
history.append({'tool': action['tool'], 'result': observation})
return 'Could not complete task within step limit.'Kegagalan 6: Nama Alat Hasil Halusinasi
LLM terkadang menghasilkan nama alat yang tidak ada. Selalu validasikan nama alat terhadap alat yang telah didaftarkan sebelum mencoba memanggilnya. Jika hal ini terjadi, kembalikan kesalahan yang informatif kepada agen.
REGISTERED_TOOLS = {
'search_web': search_web_function,
'get_weather': get_weather_function,
'calculate': calculate_function
}
def dispatch_tool(tool_name: str, args: dict) -> str:
if tool_name not in REGISTERED_TOOLS:
available = ', '.join(REGISTERED_TOOLS.keys())
return (
f'ERROR: Unknown tool "{tool_name}". '
f'Available tools: {available}. '
f'Please use one of the available tools.'
)
tool_fn = REGISTERED_TOOLS[tool_name]
return tool_fn(**args)Kegagalan 7: Anggaran Token Habis
Agen yang berjalan lama dan menyimpan seluruh hasil alat dalam konteksnya dapat mencapai batas jendela konteks LLM. Ringkas atau potong hasil alat yang besar sebelum menambahkannya ke riwayat.
def truncate_tool_result(result: str, max_chars: int = 2000) -> str:
if len(result) <= max_chars:
return result
truncated = result[:max_chars]
return f'{truncated}\n... [result truncated to {max_chars} chars]'
def add_observation_to_history(history: list, tool_name: str, result: str):
safe_result = truncate_tool_result(result, max_chars=2000)
history.append({
'role': 'tool',
'content': safe_result,
'tool_name': tool_name
})
print(f'[Step] Tool={tool_name}, Result length={len(result)} (stored {len(safe_result)})')
if __name__ == '__main__':
demo_history = []
add_observation_to_history(demo_history, 'search_web', 'x' * 3000)
Mendeteksi Mode Kegagalan Secara Terprogram
Tulislah fungsi diagnostik yang menganalisis riwayat langkah agen untuk mengidentifikasi mode kegagalan yang terjadi. Hal ini sangat berharga saat melakukan penelusuran kesalahan.
def diagnose_agent_failure(steps: list) -> str:
if not steps:
return 'No steps recorded'
# Check for infinite loop: same (tool, args) repeated
seen = {}
for s in steps:
key = (s.get('tool'), str(s.get('args')))
seen[key] = seen.get(key, 0) + 1
repeated = {k: v for k, v in seen.items() if v > 2}
if repeated:
return f'INFINITE_LOOP: repeated actions: {repeated}'
# Check for missing final answer
has_answer = any(s.get('type') == 'final_answer' for s in steps)
if not has_answer and len(steps) >= 15:
return 'STUCK_STATE: many steps taken but no final answer'
# Check for parse errors
errors = [s for s in steps if 'ERROR' in str(s.get('result', ''))]
if len(errors) > 2:
return f'TOOL_ERROR: {len(errors)} tool errors in pipeline'
return 'OK'
if __name__ == '__main__':
demo_steps = [{'tool': 'search_web', 'args': {'q': 'weather'}} for _ in range(3)]
print('Diagnosis:', diagnose_agent_failure(demo_steps))
Menerapkan Batas Langkah Sederhana
Setiap perulangan agen produksi harus memiliki batas langkah yang tegas. Inilah mekanisme keselamatan yang paling penting—batas ini menjamin perulangan berakhir, terlepas dari keputusan LLM.
def run_agent_with_budget(query: str, max_steps: int = 15) -> dict:
history = []
for step in range(1, max_steps + 1):
print(f'[Step {step}/{max_steps}]')
action = decide_next_action(query, history)
if action['type'] == 'final_answer':
return {
'status': 'success',
'answer': action['answer'],
'steps_taken': step
}
result = execute_tool(action['tool'], action['args'])
history.append({'step': step, 'tool': action['tool'], 'result': result})
if step == max_steps - 1:
# Warn the agent it must conclude
history.append({'role': 'system',
'content': 'You must provide a FINAL_ANSWER on the next step.'})
return {'status': 'timeout', 'answer': None, 'steps_taken': max_steps}Referensi Singkat: Mode Kegagalan dan Perbaikannya
Ringkasan enam mode kegagalan perulangan agen dan perbaikannya:
- Perulangan tak berujung: deteksi pasangan (alat, argumen) yang berulang; hentikan dengan umpan balik kesalahan
- Keadaan macet: gunakan pengaman jumlah iterasi maksimum; paksa jawaban akhir mendekati batas
- Tidak ada jawaban akhir: periksa secara eksplisit sinyal jawaban akhir dalam tindakan
- Kesalahan penguraian: bungkus penguraian JSON dalam try/except; kirimkan kembali kesalahan ke LLM
- Hasil alat kosong: deteksi string kosong; berikan umpan balik 'tidak ada data'
- Nama alat hasil halusinasi: validasikan terhadap alat yang telah didaftarkan; kembalikan pesan kesalahan
Uji Pemahaman: Kegagalan Perulangan Agen
Uji pemahaman Anda tentang mode kegagalan umum pada perulangan agen.
Ringkasan: Kegagalan Umum Perulangan Agen
Sekarang Anda dapat mengidentifikasi dan mencegah mode kegagalan utama pada perulangan agen:
- Perulangan tak berujung, keadaan macet, dan tidak adanya jawaban akhir semuanya memerlukan pengaman jumlah iterasi maksimum
- Kesalahan penguraian pemanggilan alat memerlukan try/except di sekitar penguraian JSON
- Hasil alat yang kosong memerlukan deteksi dan umpan balik yang informatif kepada LLM
- Nama alat hasil halusinasi memerlukan validasi terhadap daftar alat yang telah didaftarkan
- Habisnya anggaran token memerlukan pemotongan hasil
Perulangan agen yang tangguh mengantisipasi semua mode kegagalan ini dan menanganinya dengan baik.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Kegagalan Umum dalam Putaran Agen” gratis?
Ya — teks lengkap “Kegagalan Umum dalam Putaran Agen” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Kegagalan Umum dalam Putaran Agen”?
Putaran tak berujung, pemanggilan alat yang sama berulang kali, dan kegagalan mencapai jawaban akhir. Kamu berlatih AI Agents 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 Agents?
Tidak diperlukan pengalaman sebelumnya. AI Agents 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 “Kegagalan Umum dalam Putaran 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 Agents ini?
Ya. Setiap pelajaran AI Agents 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
- Kegagalan Umum dalam Putaran Agen
- Pencatatan Jejak untuk Langkah Agen
- Mendeteksi dan Memutus Putaran Tak Berujung
- Teknik Debugging Langkah demi Langkah