0.1.4 · блок 0
FastAPI и Pydantic
FastAPI и Pydantic
Зачем это нужно
Модель принимает массивы и числа, а клиент отправляет HTTP и JSON. FastAPI и Pydantic создают явный, проверяемый контракт между ними: сервис либо получает корректные данные, либо возвращает понятную ошибку до вызова модели.
Основные идеи
FastAPI связывает URL и Python-функции, формирует OpenAPI-описание и документацию. Это удобный тонкий слой для inference API.
Pydantic-модели описывают вход и выход. Они валидируют типы, обязательные поля и ограничения, а также становятся частью документации API.
Контракт inference включает:
- имя и версию модели;
- схему признаков и допустимые диапазоны;
- формат prediction и его смысл;
- ошибки и их status code.
Не позволяйте клиенту передавать «произвольный словарь» прямо в model.predict: schema должна отсеять неверные данные и предотвратить train/serve skew.
Как это выглядит на практике
from fastapi import FastAPI
from pydantic import BaseModel, Field
app = FastAPI()
class PredictRequest(BaseModel):
age: int = Field(ge=18, le=120)
income: float = Field(ge=0)
class PredictResponse(BaseModel):
probability: float = Field(ge=0, le=1)
model_version: str
@app.post("/predict", response_model=PredictResponse)
def predict(request: PredictRequest) -> PredictResponse:
return PredictResponse(probability=0.42, model_version="baseline-1")
Запрос с отрицательным доходом вернёт 422, а не попадёт в модель. Документация будет доступна в /docs.
Что сделать после занятия
- [ ] Опишите
PredictRequestиPredictResponseдля учебной модели. - [ ] Добавьте ограничения хотя бы для двух признаков.
- [ ] Проверьте схему и примеры запросов в
/docs.