0Pricing
AI Agents · Pelajaran

Mendeteksi dan Memulihkan dari Galat Alat

Saat alat menghasilkan galat 500, kembalikan galat tersebut kepada model agar dapat mencoba pendekatan lain, bukan berhenti karena galat.

Mendeteksi dan Memulihkan dari Galat Alat adalah pelajaran AI Agents 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 Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.

Alat Bisa Gagal. Siapkan Penanganannya.

Setiap alat nyata terkadang gagal:

  • Batas waktu jaringan
  • Batas laju
  • Argumen yang salah dari model
  • Layanan eksternal tidak aktif
  • Autentikasi tidak valid

Agen produksi harus dapat memulihkan diri dengan baik.

Selalu Kembalikan, Jangan Pernah Melemparkan Kesalahan

Di dalam perulangan agen, tangkap semua kesalahan alat dan kembalikan sebagai konten. Jangan pernah membiarkan pengecualian menghentikan perulangan:

def safe_dispatch(tool_call):
    try:
        args = json.loads(tool_call.function.arguments)
        return TOOLS[tool_call.function.name](**args)
    except json.JSONDecodeError:
        return {'error': 'Arguments are not valid JSON.'}
    except KeyError:
        return {'error': f'Unknown tool: {tool_call.function.name}'}
    except Exception as e:
        return {'error': f'{type(e).__name__}: {e}'}

Format Kesalahan Terstruktur

Gunakan bentuk yang konsisten agar model mengenali kesalahan:

error = {'ok': False, 'error_type': 'TimeoutError', 'error_message': 'Tavily timed out after 10s', 'retryable': True}
print(error)

Bedakan Kesalahan yang Dapat Diulangi dan Permanen

Beberapa kesalahan layak dicoba lagi (batas waktu); kesalahan lainnya tidak (404). Beri tahu model:

if isinstance(e, requests.Timeout):
    return {'ok': False, 'retryable': True, 'error': str(e)}
if isinstance(e, ValueError):
    return {'ok': False, 'retryable': False, 'error': str(e)}

Coba Ulang Otomatis Kesalahan Sementara

Untuk pemanggilan jaringan, lakukan percobaan ulang dengan penundaan eksponensial:

from tenacity import retry, wait_exponential, stop_after_attempt, retry_if_exception_type

@retry(
    wait=wait_exponential(multiplier=1, max=10),
    stop=stop_after_attempt(3),
    retry=retry_if_exception_type((requests.Timeout, requests.ConnectionError))
)
def web_search(query):
    return requests.get('https://api.tavily.com/search', ...).json()

Validasi Argumen

Sebelum memanggil alat, validasikan argumen dengan model Pydantic:

from pydantic import BaseModel, ValidationError

class SearchArgs(BaseModel):
    query: str
    k: int = 5

try:
    args = SearchArgs.model_validate_json(tool_call.function.arguments)
except ValidationError as e:
    return {'error': f'Bad arguments: {e}'}

Tampilkan Kesalahan kepada Model

Tambahkan kesalahan sebagai hasil alat dan panggil model lagi. Model sering kali dapat memperbaiki dirinya sendiri:

messages.append({
    'role': 'tool',
    'tool_call_id': tc.id,
    'content': json.dumps({'error': 'Argument k must be an integer'})
})
# Next model call: 'Sorry, let me retry with k=5...'

Hindari Perulangan Kesalahan Tanpa Akhir

Beberapa model, ketika diperlihatkan sebuah kesalahan, mencoba lagi pemanggilan yang sama dan rusak. Batasi perulangan dan deteksi pengulangan:

recent_calls = []
for tc in msg.tool_calls:
    key = (tc.function.name, tc.function.arguments)
    if recent_calls.count(key) >= 3:
        return 'Agent stuck in retry loop, aborting.'
    recent_calls.append(key)

Pemulihan Khusus Alat

Untuk alat yang diketahui sering mengalami kegagalan sementara, bangun logika percobaan ulang DI DALAM alat, bukan di dalam perulangan:

def search_with_fallback(query):
    try:
        return tavily_search(query)
    except Exception:
        return bing_search(query)   # secondary provider

Beri Batas Waktu pada Setiap Panggilan

Setiap panggilan eksternal memerlukan batas waktu. Jika tidak, satu layanan yang lambat dapat membekukan seluruh agen Anda:

import requests
response = requests.get(url, timeout=10)  # 10s

# For LLM calls:
from openai import OpenAI
client = OpenAI(timeout=30.0)

Pemutus Sirkuit

Ketika sebuah alat gagal berulang kali, "buka" sirkuitnya dan lewati alat tersebut selama beberapa waktu:

import time

class CircuitOpen(Exception):
    pass

def circuit(failure_threshold=5, recovery_timeout=60):
    def decorator(func):
        state = {'failures': 0, 'open_until': 0}
        def wrapper(*args, **kwargs):
            if time.time() < state['open_until']:
                raise CircuitOpen('circuit is open')
            try:
                result = func(*args, **kwargs)
                state['failures'] = 0
                return result
            except Exception:
                state['failures'] += 1
                if state['failures'] >= failure_threshold:
                    state['open_until'] = time.time() + recovery_timeout
                raise
        return wrapper
    return decorator

@circuit(failure_threshold=3, recovery_timeout=1)
def fragile_tool(x):
    if x < 0:
        raise ValueError('bad input')
    return x * 2

for x in [1, -1, -1, -1, -1]:
    try:
        print('ok', fragile_tool(x))
    except CircuitOpen as e:
        print('blocked:', e)
    except ValueError as e:
        print('failed:', e)

Mencatat Error dengan Konteks

Catat informasi yang cukup untuk melakukan debug setelah kejadian: nama alat, argumen, jenis error, jejak tumpukan, id permintaan, id pengguna, dan id pelacakan. Kirimkan ke alat observabilitas Anda.

Degradasi yang Anggun

Ketika alat penting tidak tersedia, beri tahu pengguna dengan jujur, alih-alih berpura-pura bahwa agen berhasil:

if all_search_tools_failed:
    return 'I was unable to search the web right now. Please try again in a few minutes.'

Pola Error Alat

Apa cara paling aman untuk menangani pengecualian alat di dalam perulangan agen?

Ringkasan

Alat dapat gagal. Tangkap, klasifikasikan, susun sebagai konten, lalu biarkan agen pulih. Tambahkan batas waktu, percobaan ulang, dan pemutus sirkuit untuk keandalan di lingkungan produksi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mendeteksi dan Memulihkan dari Galat Alat” gratis?

Ya — teks lengkap “Mendeteksi dan Memulihkan dari Galat Alat” 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 “Mendeteksi dan Memulihkan dari Galat Alat”?

Saat alat menghasilkan galat 500, kembalikan galat tersebut kepada model agar dapat mencoba pendekatan lain, bukan berhenti karena galat. 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 4 dari 4.

Berapa lama pelajaran “Mendeteksi dan Memulihkan dari Galat Alat” 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

  1. ReAct: Pola Bernalar + Bertindak
  2. Menerapkan ReAct dari Awal
  3. Kumpulan Alat Umum (Web, Kalkulator, RAG)
  4. Mendeteksi dan Memulihkan dari Galat Alat
← Kembali ke AI Agents