PydanticAI: AI-агенты с Pydantic-строгостью
PydanticAI — фреймворк от команды Pydantic (авторов самой популярной Python-библиотеки валидации данных, 100M+ скачиваний/месяц). Главная идея: применить строгость и предсказуемость Pydantic к AI-агентам — ошибки типов на этапе разработки, не в продакшне.
→ GitHub репозиторий PydanticAI
Почему разработчики выбирают PydanticAI
- Типизированные ответы: агент всегда возвращает TypedDict или Pydantic-модель — никаких
dict["key"]без проверки - Валидация инструментов: параметры инструментов автоматически валидируются через Pydantic
- Dependency injection: зависимости типизированы и тестируемы через mock
- Streamed structured output: стриминг результата с валидацией по ходу
- Совместимость с mypy/pyright: полная поддержка статического анализа
Установка и быстрый старт с PlusVibe
pip install pydantic-ai
from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenAIModel
from pydantic import BaseModel
class WeatherReport(BaseModel):
city: str
temperature: float
description: str
wind_speed_kmh: float
model = OpenAIModel(
"gpt-5.5-turbo",
base_url="https://plusvibeapi.ru/v1",
api_key="sk-pv-ваш_ключ"
)
agent = Agent(model, result_type=WeatherReport)
result = agent.run_sync("Погода в Москве сейчас?")
print(result.data) # WeatherReport(city='Москва', temperature=18.5, ...)
# IDE знает тип: result.data.temperature — float, не Any
Агент с инструментами и dependency injection
from pydantic_ai import Agent, RunContext
from dataclasses import dataclass
@dataclass
class DbConnection:
host: str
db_name: str
agent = Agent(model, deps_type=DbConnection)
@agent.tool
async def get_user(ctx: RunContext[DbConnection], user_id: int) -> dict:
# ctx.deps — типизированный DbConnection
return await fetch_from_db(ctx.deps, user_id)
result = await agent.run(
"Найди пользователя 42",
deps=DbConnection(host="localhost", db_name="users")
)
Тестирование без реальных API-вызовов
from pydantic_ai import models
from pydantic_ai.models.test import TestModel
with models.override(TestModel()):
result = agent.run_sync("тест") # мок, не тратит токены
# TestModel возвращает предсказуемые данные для unit-тестов
PydanticAI vs LangChain vs CrewAI
| Критерий | PydanticAI | LangChain | CrewAI |
|---|---|---|---|
| Типизация | Строгая (Pydantic) | Слабая (Any) | Слабая |
| Тестируемость | Высокая | Средняя | Средняя |
| Мультиагентность | Базовая | LangGraph | Основная фича |
| Размер библиотеки | Маленький | Огромный | Средний |
| Для production | Отлично | Хорошо | Хорошо |
PydanticAI + PlusVibe = строгие агенты из России
OpenAI-совместимый, рублёвые цены, без VPN.
Получить ключ →
