Walidowanie danych wyjściowych narzędzi (Pydantic)
Przepuszczaj dane wyjściowe każdego narzędzia przez model Pydantic — nie ukrywaj błędów nieprawidłowej odpowiedzi.
Walidowanie danych wyjściowych narzędzi (Pydantic) 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.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
Zaufaj, ale sprawdzaj
Wyniki narzędzi pochodzą ze świata zewnętrznego — z interfejsów API, stron internetowych i modeli. Nieprawidłowa lub nieoczekiwana odpowiedź może doprowadzić do awarii agenta albo, co gorsza, po cichu przekazać nieprawidłowe dane do LLM.
Należy sprawdzać każdy wynik narzędzia względem schematu.
Modele Pydantic
Należy zdefiniować oczekiwane struktury:
from pydantic import BaseModel, HttpUrl
class SearchResult(BaseModel):
title: str
url: HttpUrl
snippet: str
score: float = 0.0Validate at the Boundary
from pydantic import ValidationError
def search(query):
raw = requests.post('https://api.tavily.com/search', json={'query': query}).json()
results = []
for r in raw.get('results', []):
try:
results.append(SearchResult.model_validate(r))
except ValidationError as e:
log.warning('Bad search result skipped: %s', e)
return resultsListy z walidacją modelu
Należy zwalidować całą odpowiedź:
from pydantic import BaseModel
class SearchResponse(BaseModel):
results: list[SearchResult]
response = SearchResponse.model_validate(raw)Walidatory pól
Niestandardowe kontrole wewnątrz pól:
from pydantic import field_validator
class SearchResult(BaseModel):
score: float
@field_validator('score')
@classmethod
def score_in_range(cls, v):
if not 0 <= v <= 1:
raise ValueError('score out of [0,1]')
return vTryb ścisły a pobłażliwy
Domyślnie Pydantic konwertuje typy (na przykład string -> int, jeśli jest to możliwe). W przypadku ścisłych kontroli:
from pydantic import StrictInt
class User(BaseModel):
age: StrictInt # rejects '25' (string)Default Values for Missing Fields
class Tool(BaseModel):
name: str
description: str = 'No description provided' # fallbackWalidacja ustrukturyzowanych wyników LLM
Należy wymusić zwracanie przez model JSON-a zgodnego ze schematem Pydantic — więcej informacji znajduje się w lekcji o ustrukturyzowanych wynikach. Następnie należy ponownie przeprowadzić walidację na granicy jako dodatkową warstwę ochrony.
Walidacja argumentów narzędzia
Przed wykonaniem należy zwalidować modelowe tool_call.arguments:
class SearchArgs(BaseModel):
query: str
k: int = 5
args = SearchArgs.model_validate_json(tool_call.function.arguments)
results = search(args.query, args.k)Błędy walidacji jako wyniki narzędzia
Jeśli walidacja się nie powiedzie, należy zwrócić błąd do modelu, aby mógł ponowić próbę z poprawionymi argumentami:
try:
args = SearchArgs.model_validate_json(...)
except ValidationError as e:
return {'error': f'Invalid arguments: {e}'}Wersjonowanie schematów
Gdy schemat wyników narzędzia się zmienia, należy go wersjonować:
class SearchResultV2(BaseModel):
title: str
url: HttpUrl
relevance: float # was 'score' in v1Generowanie schematu JSON z Pydantic
W przypadku definicji schematu narzędzia należy wyprowadzić go z klasy Pydantic:
schema = SearchArgs.model_json_schema()
# Use directly as the 'parameters' for an OpenAI tool definition.Cel walidacji
Dlaczego należy używać Pydantic dla każdego wyniku narzędzia?
Podsumowanie
Pydantic na każdej granicy: argumenty narzędzia przychodzące, wyniki narzędzia wychodzące i ustrukturyzowane wyniki LLM. Wyraźne awarie są lepsze niż ciche uszkodzenie danych.
Często zadawane pytania
Czy lekcja „Walidowanie danych wyjściowych narzędzi (Pydantic)” jest bezpłatna?
Tak — pełny tekst „Walidowanie danych wyjściowych narzędzi (Pydantic)” 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 „Walidowanie danych wyjściowych narzędzi (Pydantic)”?
Przepuszczaj dane wyjściowe każdego narzędzia przez model Pydantic — nie ukrywaj błędów nieprawidłowej odpowiedzi. Ć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 „Walidowanie danych wyjściowych narzędzi (Pydantic)”?
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
- Idempotentne narzędzia i efekty uboczne
- Ponowienia z wykładniczym wycofaniem
- Limity czasu i circuit breaker
- Walidowanie danych wyjściowych narzędzi (Pydantic)