Проверка вывода инструментов (Pydantic)
Пропускайте каждый вывод инструмента через модель Pydantic — немедленно сообщайте об ошибке при некорректном ответе.
«Проверка вывода инструментов (Pydantic)» — бесплатный урок AI Agents на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Доверяйте, но проверяйте
Результаты работы инструментов поступают из внешнего мира — из API, веб-страниц и моделей. Неправильно сформированный или неожиданный ответ может привести к сбою агента или, что ещё хуже, незаметно передать в LLM неверные данные.
Проверяйте каждый результат работы инструмента по схеме.
Модели Pydantic
Определите ожидаемые структуры:
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 resultsСписки с проверкой модели
Проверяйте весь ответ:
from pydantic import BaseModel
class SearchResponse(BaseModel):
results: list[SearchResult]
response = SearchResponse.model_validate(raw)Проверяющие поля
Пользовательские проверки внутри полей:
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 vСтрогая и мягкая проверка
По умолчанию Pydantic приводит типы (строку -> целое число, если это возможно). Для строгих проверок:
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' # fallbackПроверяйте структурированный вывод LLM
Заставьте модель возвращать JSON, соответствующий схеме Pydantic — см. урок «Структурированный вывод». Для эшелонированной защиты повторно выполняйте проверку на границе.
Проверяйте аргументы инструментов
Проверяйте 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)Ошибки проверки как результаты работы инструмента
Если проверка завершается с ошибкой, верните ошибку модели, чтобы она могла повторить попытку с исправленными аргументами:
try:
args = SearchArgs.model_validate_json(...)
except ValidationError as e:
return {'error': f'Invalid arguments: {e}'}Версионирование схем
При изменении схемы результата инструмента версионируйте её:
class SearchResultV2(BaseModel):
title: str
url: HttpUrl
relevance: float # was 'score' in v1Создавайте схему JSON из Pydantic
Для определения схемы инструмента создавайте её на основе класса Pydantic:
schema = SearchArgs.model_json_schema()
# Use directly as the 'parameters' for an OpenAI tool definition.Цель проверки
Зачем использовать Pydantic для каждого результата работы инструмента?
Итоги
Pydantic на каждой границе: аргументы инструментов на входе, результаты работы инструментов на выходе и структурированные результаты LLM. Явные сбои лучше незаметного повреждения данных.
Часто задаваемые вопросы
Урок «Проверка вывода инструментов (Pydantic)» бесплатный?
Да — полный текст урока «Проверка вывода инструментов (Pydantic)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Проверка вывода инструментов (Pydantic)»?
Пропускайте каждый вывод инструмента через модель Pydantic — немедленно сообщайте об ошибке при некорректном ответе. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Проверка вывода инструментов (Pydantic)»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Идемпотентные инструменты и побочные эффекты
- Повторные попытки с экспоненциальной задержкой
- Тайм-ауты и автоматические выключатели
- Проверка вывода инструментов (Pydantic)