ChatGPT и Pydantic AI: типизированные агенты без хаоса в JSON
Разработчикам, которые строят LLM-агентов, Pydantic AI предлагает более аккуратный способ работы с ответами и инструментами. Идея простая: меньше ручной обвязки, меньше поломок формата и больше опоры на типы и валидацию.
Почему обычный LLM-проект быстро обрастает костылями
Сначала агент на базе большой языковой модели выглядит очень просто: промпт, запрос к API и разбор ответа через JSON. Но через время модель начинает отвечать не только данными, а ещё и лишними фразами, иногда пропускает обязательные поля или присылает массив не в том формате.
Тогда в коде появляются регулярные выражения, дополнительные проверки и повторные запросы. В итоге вместо компактного решения получается большой слой связующего кода, который сложно поддерживать и страшно менять.
Что предлагает Pydantic AI
Pydantic AI пытается решить проблему на стыке между ответом модели и приложением. Фреймворк использует типы и схемы Pydantic: агент описывается функцией с аннотациями, а структурированный результат — отдельной pydantic-моделью.
Проект делает команда Pydantic, той самой библиотеки, на которой держится валидация во многих Python-проектах, включая FastAPI и OpenAI SDK. В статье показан и простой путь запуска: поставить пакет через uv add pydantic-ai или pip install pydantic-ai, а дальше собрать агента и вызвать его синхронно или асинхронно.
Отдельный плюс — гибкость с моделями. В примере используется OpenAI-совместимый шлюз, а переход на локальную или другую модель сводится к небольшой правке в настройках. Для тех, кто работает с разными поставщиками LLM, это экономит время и упрощает эксперименты.
Инструменты агента, зависимости и повторные попытки
Вместо ручного описания JSON-схемы Pydantic AI собирает инструмент из обычной функции. Декоратор, сигнатура и docstring превращаются в описание для модели автоматически, а это значит, что код и схема не расходятся друг с другом.
Есть два варианта инструментов: с контекстом и без него. Через контекст агент может получать зависимости, например HTTP-клиент или базовый адрес API, и это удобно для тестов и для работы без глобальных переменных. Такой подход особенно понятен тем, кто уже использовал аннотации и валидацию в FastAPI.
Если модель передала неверные аргументы или инструмент сам вернул ошибку, можно не падать сразу, а дать системе шанс исправиться. Для этого есть ModelRetry: сообщение об ошибке уходит обратно модели, и она может попробовать ещё раз. В статье также упоминается, что лимит повторов можно настраивать на уровне агента или отдельного инструмента.
Чем это может быть полезно в работе
Pydantic AI особенно полезен там, где LLM должна не просто болтать, а выдавать предсказуемый результат: для поддержки клиентов, автоматизации заказов, внутренних ассистентов и других рабочих сценариев. Чем строже формат ответа, тем меньше ручной обработки потом нужно писать в приложении.
Для разработчика это шанс быстрее собрать прототип и не утонуть в нестабильном JSON. Для бизнеса — меньше поломок, проще тестирование и понятнее сопровождение кода. А если нужно быстро проверить идею с агентом или подключить несколько моделей, такой подход помогает не начинать всё с нуля.