Menangani Kegagalan dan Perulangan Agen
Tambahkan batas waktu, batas maksimum iterasi, dan perintah pemulihan galat untuk mencegah agen berulang tanpa batas atau terus-menerus memanggil alat yang rusak.
Menangani Kegagalan dan Perulangan Agen adalah pelajaran AI Engineering Academy gratis di CoddyKit. Ini adalah pelajaran 4 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 dan Berulang
Agen dapat terjebak dalam perulangan kegagalan karena beberapa alasan: alat yang rusak mengembalikan kesalahan yang tidak diketahui cara mengatasinya oleh agen, model berulang kali menghasilkan sintaks tindakan yang salah, tugas tidak mungkin diselesaikan dengan alat yang tersedia, atau agen terus memanggil alat yang sama dengan sedikit variasi dengan harapan memperoleh hasil berbeda. Tanpa pengamanan, hal ini menghabiskan anggaran API dan tidak pernah terselesaikan.
Batas Iterasi Maksimum
Perlindungan paling sederhana adalah menetapkan batas keras pada jumlah siklus Pemikiran/Tindakan/Observasi. AgentExecutor milik LangChain menerima parameter max_iterations. Ketika batas tercapai, eksekutor menghentikan perulangan dan mengembalikan pesan yang menunjukkan bahwa agen tidak dapat menyelesaikan tugas.
from langchain.agents import AgentExecutor
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
max_iterations=10, # Hard stop after 10 steps
max_execution_time=30.0, # Also stop after 30 wall-clock seconds
early_stopping_method='generate', # Ask the model for a partial answer at the limit
verbose=True
)Penghentian Dini: Memaksa Jawaban Akhir
Ketika agen mencapai batas iterasinya, early_stopping_method='generate' meminta model sekali lagi dengan instruksi: 'Anda telah mencapai batas langkah. Berdasarkan hal-hal yang sejauh ini Anda ketahui, berikan jawaban akhir terbaik Anda.' Ini lebih baik daripada mengembalikan respons kosong atau mengalami kerusakan, karena pengguna tetap memperoleh sesuatu yang berguna.
# The 'generate' early_stopping_method adds this system instruction
# when max_iterations is reached:
#
# 'You have {N} steps remaining but the task is not complete.
# Give your best final answer based on the information gathered so far.'
#
# Contrast with 'force' which abruptly terminates without generating an answer.
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
max_iterations=7,
early_stopping_method='generate'
)Menangani Kesalahan Penguraian dengan Baik
Ketika model menghasilkan output yang tidak sesuai dengan format Pemikiran/Tindakan — tidak mencantumkan kata kunci tindakan, menggunakan nama alat yang salah, atau menghasilkan teks bebas — agen memunculkan OutputParserException. Tetapkan handle_parsing_errors=True untuk mengirimkan kembali kesalahan tersebut sebagai observasi agar model dapat memperbaiki dirinya sendiri.
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
handle_parsing_errors=True,
# Custom error message fed back to the model:
# handle_parsing_errors='Please format your response as Thought/Action/Action Input.'
)
# When a parse error occurs, the executor automatically adds:
# Observation: Could not parse LLM output. Please follow the format:
# Thought: ...
# Action: tool_name
# Action Input: ...Mendeteksi dan Memutus Perulangan Berulang
Pola perulangan yang umum: agen memanggil search('same query') tiga kali berturut-turut dan setiap kali mendapatkan hasil tidak berguna yang sama. Terapkan deteksi perulangan dengan melacak pasangan (alat, input) terbaru. Jika kombinasi yang sama berulang lebih dari dua kali, sisipkan observasi yang menyarankan pendekatan berbeda.
from collections import Counter
class LoopDetector:
def __init__(self, max_repeats: int = 2):
self.max_repeats = max_repeats
self.call_counts = Counter()
def check(self, tool_name: str, tool_input: str) -> bool:
key = f'{tool_name}:{tool_input}'
self.call_counts[key] += 1
if self.call_counts[key] > self.max_repeats:
return True # Loop detected
return False
def get_warning(self) -> str:
return ('You have called this tool with the same input multiple times. '
'Try a different approach, different search terms, or a different tool.')Penanganan Kesalahan Tingkat Alat
Agen yang tangguh memerlukan alat yang tangguh. Setiap alat harus menangkap eksepsinya sendiri dan mengembalikan pesan kesalahan terstruktur, bukan memunculkan eksepsi Python. Sertakan jenis kesalahan dan saran untuk agen agar agen mengetahui apakah harus mencoba lagi, mengubah pendekatan, atau meneruskan masalah.
from langchain_core.tools import tool
import requests
@tool
def get_company_data(company_name: str) -> str:
'''Retrieve company information from the business database.
Input: company name as a string.
'''
try:
resp = requests.get(
f'https://api.example.com/companies/{company_name}',
timeout=5
)
if resp.status_code == 404:
return f'No company found with name "{company_name}". Try the exact legal name or ticker symbol.'
if resp.status_code == 429:
return 'Rate limit exceeded. Wait 60 seconds before trying again.'
resp.raise_for_status()
return resp.json().get('summary', 'No summary available.')
except requests.Timeout:
return 'The database is not responding. Try searching the web instead.'Penundaan Eksponensial saat API Gagal
Ketika alat memanggil API eksternal, kegagalan sementara sering terjadi. Tambahkan logika percobaan ulang dengan penundaan eksponensial di dalam fungsi alat — coba lagi hingga 3 kali dengan jeda yang semakin lama di antara percobaan. Cara ini menangani batas laju dan gangguan singkat secara transparan tanpa agen perlu mengetahui adanya percobaan ulang.
import time
import requests
from langchain_core.tools import tool
@tool
def reliable_search(query: str) -> str:
'''Search with automatic retry on failure. Input: search query string.'''
max_retries = 3
for attempt in range(max_retries):
try:
resp = requests.get(
'https://api.duckduckgo.com/',
params={'q': query, 'format': 'json'},
timeout=10
)
resp.raise_for_status()
data = resp.json()
return data.get('AbstractText', 'No results found.')
except requests.RequestException as e:
if attempt < max_retries - 1:
wait = 2 ** attempt # 1s, 2s, 4s
time.sleep(wait)
else:
return f'Search failed after {max_retries} attempts: {str(e)}'Anggaran Waktu Habis di Tingkat Agen
Percobaan ulang setiap alat memang bermanfaat, tetapi Anda juga memerlukan batas waktu total untuk seluruh proses agen. Jika tugas berlangsung lebih lama daripada yang diizinkan SLA Anda (misalnya 30 detik), hentikan perulangan dan kembalikan respons penurunan layanan yang baik. Parameter max_execution_time milik LangChain menangani hal ini di tingkat eksekutor.
import asyncio
async def run_with_timeout(user_input: str, timeout_seconds: float = 30.0) -> str:
try:
result = await asyncio.wait_for(
agent_executor.ainvoke({'input': user_input}),
timeout=timeout_seconds
)
return result['output']
except asyncio.TimeoutError:
return ('I am taking longer than expected to answer this question. '
'Please try again with a simpler question, or check back later.')Mencatat Kegagalan untuk Analisis
Setiap kegagalan agen merupakan data. Catat seluruh jejak — input pengguna, semua langkah antara, alasan kegagalan, dan jumlah iterasi yang digunakan — ke basis data atau platform observabilitas. Menganalisis pola kegagalan mengungkap alat mana yang tidak andal, jenis pertanyaan mana yang tidak dapat ditangani agen, dan perulangan mana yang paling sering terjadi.
import logging
import json
logger = logging.getLogger('agent')
def run_and_log(user_input: str) -> str:
try:
result = agent_executor.invoke(
{'input': user_input},
return_intermediate_steps=True
)
if not result.get('output'):
logger.warning('Agent returned empty output', extra={
'input': user_input,
'steps': len(result.get('intermediate_steps', []))
})
return result['output']
except Exception as e:
logger.error('Agent failed with exception', extra={
'input': user_input,
'error': str(e),
'error_type': type(e).__name__
})
return 'I encountered an error. Please try rephrasing your question.'Menyisipkan Petunjuk Pemulihan ke dalam Prompt
Ketika mendeteksi pola kegagalan, Anda dapat menyisipkan instruksi pemulihan secara dinamis ke dalam prompt agen berikutnya. Misalnya, jika alat pencarian terus gagal, tambahkan petunjuk seperti: 'Alat pencarian web sedang tidak andal. Utamakan alat basis pengetahuan untuk kueri ini.' Hal ini mengarahkan agen ke solusi yang berfungsi tanpa logika pengganti yang ditulis secara khusus.
Menguji Skenario Kegagalan
Buat rangkaian pengujian khusus untuk skenario kegagalan. Uji apa yang terjadi ketika: semua alat mengembalikan kesalahan, model mencapai max_iterations, input tidak berisi pertanyaan yang dapat dijawab, dan model memanggil alat yang tidak ada. Agen Anda harus selalu mengembalikan pesan yang masuk akal dan tidak pernah menyebabkan aplikasi mengalami kerusakan, seberapa pun adversarial situasinya.
Pemeriksaan Singkat
Uji pemahaman Anda tentang menangani kegagalan agen dan mencegah perulangan.
Ringkasan Pelajaran
Dalam pelajaran ini Anda mempelajari bahwa: max_iterations dan max_execution_time menetapkan batas keras pada waktu berjalan agen, handle_parsing_errors mengirimkan kembali kesalahan format kepada model agar dapat memperbaiki dirinya sendiri, dan alat harus menangkap eksepsi serta mengembalikan string kesalahan yang deskriptif, bukan memunculkan eksepsi. Selanjutnya, kita akan menjelajahi fitur pemanggilan fungsi asli OpenAI untuk integrasi alat terstruktur.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menangani Kegagalan dan Perulangan Agen” gratis?
Ya — teks lengkap “Menangani Kegagalan dan Perulangan 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 “Menangani Kegagalan dan Perulangan Agen”?
Tambahkan batas waktu, batas maksimum iterasi, dan perintah pemulihan galat untuk mencegah agen berulang tanpa batas atau terus-menerus memanggil alat yang rusak. 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 4 dari 4.
Berapa lama pelajaran “Menangani Kegagalan dan Perulangan 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
- Kerangka ReAct: Berpikir, Bertindak, Mengamati
- Mendefinisikan Alat untuk Agent Anda
- Membangun Agent ReAct dengan LangChain
- Menangani Kegagalan dan Perulangan Agen