Pydantic AI · курс Глоссарий
Справочник

Шпаргалка по коду Pydantic AI

Все ключевые конструкции курса на одной странице. Удобно держать под рукой при чтении кода и постановке задач.

Установка

pip install pydantic-ai

Минимальный агент

from pydantic_ai import Agent

agent = Agent('anthropic:claude-sonnet-4-6', instructions='Отвечай кратко.')
result = agent.run_sync('Вопрос')
print(result.output)

Выбор модели

Agent('openai:gpt-5.2')               # строка «провайдер:модель»
Agent('google:gemini-3-flash-preview')
Agent('test')                          # TestModel: без API и затрат

Свой OpenAI-совместимый провайдер (MyRouter, OpenRouter, прокси)

from pydantic_ai.models.openai import OpenAIChatModel

model = OpenAIChatModel('myrouter/auto',
    base_url='https://api.gildiya-razvitiya.com/v1', api_key='myr_sk_...')
agent = Agent(model)

Резервные модели

from pydantic_ai.models.fallback import FallbackModel

agent = Agent(FallbackModel('openai:gpt-5.2', 'anthropic:claude-sonnet-4-5'))

Структурированный вывод

from pydantic import BaseModel, Field

class Lead(BaseModel):
    name: str
    phone: str
    score: int = Field(ge=1, le=10)   # с ограничением

class Failed(BaseModel):
    """Не удалось обработать."""

agent = Agent('openai:gpt-5.2', output_type=[Lead, Failed])  # «или-или»

Своя проверка результата

from pydantic_ai import ModelRetry

@agent.output_validator
async def check(ctx, output):
    if not is_ok(output):
        raise ModelRetry('Исправь: ...')   # модель попробует снова
    return output

Инструменты

@agent.tool_plain                          # без контекста
def roll_dice() -> str:
    """Бросить кубик."""
    ...

@agent.tool                                # с контекстом и deps
async def find_order(ctx: RunContext[MyDeps], order_id: int) -> str:
    """Найти заказ в базе."""
    return await ctx.deps.db.get(order_id)

Зависимости

from dataclasses import dataclass

@dataclass
class MyDeps:
    api_key: str
    db: Database

agent = Agent('openai:gpt-5.2', deps_type=MyDeps)
result = await agent.run('...', deps=MyDeps(key, db))

# подмена в тестах:
with agent.override(deps=test_deps):
    ...

Диалог с историей

r1 = agent.run_sync('Первый вопрос')
r2 = agent.run_sync('Уточнение', message_history=r1.new_messages())

Стриминг

async with agent.run_stream('Вопрос') as response:
    async for text in response.stream_text():
        print(text)

Лимиты расходов

from pydantic_ai import UsageLimits

result = agent.run_sync('...',
    usage_limits=UsageLimits(request_limit=5, total_tokens_limit=500))

Делегирование агенту

@main_agent.tool
async def sub_task(ctx: RunContext, n: int) -> list[str]:
    r = await helper_agent.run(f'Сделай {n} вариантов', usage=ctx.usage)
    return r.output

MCP и способности

from pydantic_ai.capabilities import MCP, WebSearch, Thinking

agent = Agent('openai:gpt-5.2',
    capabilities=[Thinking(), WebSearch(), MCP(url='https://...')])

Наблюдаемость (Logfire)

import logfire
logfire.configure()
logfire.instrument_pydantic_ai()
💬 Не помнишь, из какого урока конструкция? Спроси агента в Claude Code — он покажет урок и объяснит контекст. Полная документация: pydantic.dev/docs/ai
← Оглавление Глоссарий →