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)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!