Зачем это нужно
Модель принимает массивы и числа, а клиент отправляет 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.