0Pricing
AI Agents · Lekcja

Wykrywanie błędów narzędzi i odzyskiwanie po nich

Gdy narzędzie zwróci błąd 500, przekaż go modelowi, aby mógł spróbować innego podejścia zamiast zakończyć działanie błędem.

Wykrywanie błędów narzędzi i odzyskiwanie po nich to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.

Narzędzia zawodzą — należy to zaplanować

Każde rzeczywiste narzędzie czasami zawodzi:

  • Limity czasu sieci
  • Limity częstotliwości
  • Nieprawidłowe argumenty wygenerowane przez model
  • Przestoje zewnętrznych usług
  • Nieprawidłowe uwierzytelnianie

Agenty produkcyjne muszą radzić sobie z tymi sytuacjami w kontrolowany sposób.

Zawsze zwracać, nigdy nie zgłaszać

W pętli agenta należy przechwytywać wszystkie błędy narzędzi i zwracać je jako treść. Wyjątek nie może nigdy przerwać pętli:

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}'}

Ustrukturyzowany format błędów

Należy używać jednolitego formatu, aby model rozpoznawał błędy:

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

Rozróżnianie błędów możliwych do ponowienia i trwałych

Niektóre błędy uzasadniają ponowienie próby (timeout), a inne nie (404). Należy poinformować 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)}

Automatyczne ponawianie prób po błędach przejściowych

W przypadku wywołań sieciowych należy ponawiać próby z wykładniczym opóźnieniem:

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()

Walidacja argumentów

Przed wywołaniem narzędzia należy zweryfikować argumenty za pomocą modelu 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}'}

Pokazywanie błędu modelowi

Należy dołączyć błąd jako wynik narzędzia i ponownie wywołać model. Model często sam się koryguje:

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...'

Unikanie nieskończonych pętli błędów

Niektóre modele po wyświetleniu błędu ponawiają to samo nieprawidłowe wywołanie. Należy ograniczyć liczbę iteracji pętli i wykrywać powtórzenia:

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)

Odzyskiwanie po błędach specyficznych dla narzędzia

W przypadku narzędzi, o których wiadomo, że bywają zawodne, logikę ponawiania prób należy umieścić WEWNĄTRZ narzędzia, a nie w pętli:

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

Limit czasu dla każdego wywołania

Każde wywołanie zewnętrzne wymaga limitu czasu. W przeciwnym razie jedna wolno działająca usługa zamrozi całego agenta:

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

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

Mechanizmy circuit breaker

Gdy narzędzie wielokrotnie zawodzi, należy „otworzyć” obwód i przez pewien czas je pomijać:

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)

Logowanie błędów z kontekstem

Należy rejestrować wystarczająco dużo informacji, aby później można było zdiagnozować problem: nazwę narzędzia, argumenty, typ błędu, ślad stosu, identyfikator żądania, identyfikator użytkownika i identyfikator śledzenia. Dane należy wysyłać do narzędzia do obserwowalności.

Kontrolowane ograniczenie funkcjonalności

Gdy krytyczne narzędzie jest niedostępne, należy uczciwie poinformować użytkownika, zamiast udawać, że agent zakończył działanie pomyślnie:

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

Wzorzec obsługi błędów narzędzi

Jaki jest najbezpieczniejszy sposób obsługi wyjątków narzędzi wewnątrz pętli agenta?

Podsumowanie

Narzędzia zawodzą. Należy przechwytywać i klasyfikować błędy, przekazywać je jako ustrukturyzowaną treść oraz pozwalać agentowi na odzyskanie sprawności. W środowisku produkcyjnym należy dodać limity czasu, ponawianie prób i mechanizmy circuit breaker.

Często zadawane pytania

Czy lekcja „Wykrywanie błędów narzędzi i odzyskiwanie po nich” jest bezpłatna?

Tak — pełny tekst „Wykrywanie błędów narzędzi i odzyskiwanie po nich” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.

Co nauczysz się w „Wykrywanie błędów narzędzi i odzyskiwanie po nich”?

Gdy narzędzie zwróci błąd 500, przekaż go modelowi, aby mógł spróbować innego podejścia zamiast zakończyć działanie błędem. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć AI Agents?

Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Wykrywanie błędów narzędzi i odzyskiwanie po nich”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?

Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. ReAct: wzorzec rozumowanie + działanie
  2. Implementacja ReAct od podstaw
  3. Typowe zestawy narzędzi (sieć, kalkulator, RAG)
  4. Wykrywanie błędów narzędzi i odzyskiwanie po nich
← Powrót do AI Agents