📝 LLM и AI

Pydantic v2: валидация данных в Python

P
Автор
Pyland
📅
Опубликовано
30.06.2026
⏱️
Время чтения
1 мин
👁️
Просмотров
88
🌿
Уровень
Средний
🐦 💼 ✈️

Pydantic — библиотека для валидации данных через аннотации типов. Версия 2 переписана на Rust и работает в 5–50 раз быстрее первой. Стандарт де-факто в FastAPI, LangChain и LLM-приложениях.

Установка

uv add pydantic

BaseModel — базовая модель

from pydantic import BaseModel

class TextAnalysis(BaseModel):
    sentiment: str
    score: float
    keywords: list[str]
    language: str

# Создание из словаря
data = {"sentiment": "positive", "score": 0.9, "keywords": ["python"], "language": "ru"}
result = TextAnalysis.model_validate(data)

print(result.sentiment)   # positive
print(result.score)       # 0.9
print(result.keywords)    # ['python']

model_validate() — парсинг из dict

import json

raw_json = '{"sentiment": "negative", "score": 0.2, "keywords": [], "language": "en"}'
data = json.loads(raw_json)
result = TextAnalysis.model_validate(data)

ValidationError — невалидные данные

from pydantic import ValidationError

try:
    bad = TextAnalysis.model_validate({"sentiment": "ok"})  # нет score и keywords
except ValidationError as e:
    print(e.error_count())   # 3
    for err in e.errors():
        print(err["loc"], err["msg"])

Вложенные модели

class SentimentResult(BaseModel):
    label: str       # positive / negative / neutral
    confidence: float

class TextAnalysis(BaseModel):
    sentiment: SentimentResult
    keywords: list[str]
    language: str
    word_count: int

data = {
    "sentiment": {"label": "positive", "confidence": 0.87},
    "keywords": ["python", "api"],
    "language": "ru",
    "word_count": 150
}
result = TextAnalysis.model_validate(data)
print(result.sentiment.label)       # positive
print(result.sentiment.confidence)  # 0.87

Field() — ограничения и описания

from pydantic import BaseModel, Field

class TextAnalysis(BaseModel):
    sentiment: str = Field(description="positive / negative / neutral")
    score: float = Field(ge=0.0, le=1.0, description="Уверенность от 0 до 1")
    keywords: list[str] = Field(max_length=10, description="Ключевые слова")
    language: str = Field(pattern=r"^[a-z]{2}$", description="ISO 639-1 код языка")

model_dump() — обратно в dict

result = TextAnalysis.model_validate(data)
d = result.model_dump()        # dict
j = result.model_dump_json()   # JSON-строка

Зачем Pydantic в LLM-приложениях

Claude возвращает текст. Чтобы получить структурированные данные — просим вернуть JSON и валидируем через Pydantic:

raw = response.content[0].text.strip()
data = json.loads(raw)
result = TextAnalysis.model_validate(data)
# Теперь result — типизированный объект с проверенными полями

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

Что такое ORM

ORM (Object-Relational Mapping) — технология, позволяющая работать с базой данных через объекты Python вместо SQL.

📅 30.06.2026 👁️ 131
📝

httpx: современный HTTP-клиент для Python

httpx — HTTP-клиент нового поколения. Интерфейс похож на requests, но с поддержкой async/await из коробки.

📅 30.06.2026 👁️ 108
📝

AI-агенты: ReAct loop и автономные действия

Чат-бот отвечает на вопросы. Агент — действует: вызывает инструменты, получает реальные данные и использует их...

📅 30.06.2026 👁️ 103

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!