Этап 2 из 18 · ≈ 12 ч

FastAPI и Pydantic

Основа с Junior

Веб-сервис вокруг модели — эндпоинты, валидация, потоковые ответы, зависимости.

LLM-функциональность почти всегда живёт за API: чат, поиск по документам, обработка заявок. FastAPI — стандарт для таких сервисов: асинхронный, с автоматической документацией и валидацией через Pydantic.

class Ask(BaseModel):
    question: str = Field(min_length=3, max_length=2000)

@app.post("/ask")
async def ask(body: Ask, user: User = Depends(current_user)):
    return StreamingResponse(stream_answer(body.question, user), media_type="text/event-stream")

Что важно знать

  • Pydantic описывает и проверяет данные: входные запросы, ответы модели в структурированном виде, настройки сервиса.
  • Потоковая выдача через Server-Sent Events — пользователь видит ответ по мере генерации.
  • Зависимости (Depends) — авторизация, клиенты БД и моделей.
  • Фоновые задачи и очереди для долгих операций (индексация документов).
  • Таймауты, повторы, лимиты на размер запроса — защита бюджета.

Критерии освоения

Junior ≈ 12 ч

  • Создаёт FastAPI-сервис с эндпоинтом, валидацией входа через Pydantic и документацией OpenAPI
  • Передаёт ключи и настройки через переменные окружения, не храня их в коде

Практика. Сделать сервис «вопрос — ответ модели» на FastAPI с валидацией, обработкой ошибок провайдера и тестом эндпоинта.

Middle ≈ 10 ч

  • Отдаёт потоковый ответ модели через Server-Sent Events
  • Использует зависимости FastAPI для авторизации и клиентов внешних сервисов
  • Ограничивает размер запроса и частоту вызовов на пользователя

Практика. Добавить потоковую выдачу, авторизацию по токену, лимит запросов на пользователя и учёт израсходованных токенов в базе.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Как устроено внедрение зависимостей в FastAPI?Middle

Depends(func) — FastAPI вызывает func перед обработчиком и передаёт результат в параметр. Зависимости образуют граф, результат кэшируется в пределах запроса, зависимость с yield выполняет очистку после ответа (сессия БД, транзакция). В тестах их подменяют…

Полный разбор
Чем dataclass отличается от namedtuple и Pydantic-модели?Middle

@dataclass генерирует __init__, __repr__, __eq__ (опционально порядок, хеш, слоты) по аннотированным полям — обычный изменяемый класс без проверки типов. namedtuple — неизменяемый кортеж с именами полей, индексируется и распаковывается. Pydantic — валидация и…

Полный разбор
Как реализовать потоковую выдачу ответа LLM пользователю?Middle

Модель генерирует ответ токен за токеном, и его можно показывать по мере генерации: воспринимаемая задержка падает с десятков секунд до времени первого токена. Провайдеры отдают поток через Server-Sent Events; бэкенд проксирует его клиенту (SSE или…

Полный разбор
Как написать простой HTTP API на FastAPI?Junior

Создать приложение app = FastAPI(), объявить обработчики декораторами @app.get, @app.post и др. Параметр из пути (/items/{item_id}) становится аргументом функции, остальные простые аргументы — query-параметрами, а аргумент-модель Pydantic — телом запроса…

Полный разбор
Как правильно делать HTTP-запросы из Python — requests и httpx?Junior

requests — синхронная библиотека, httpx — похожий интерфейс плюс асинхронный клиент и HTTP/2. Обязательные привычки: всегда задавать timeout (по умолчанию requests ждёт бесконечно), проверять статус (raise_for_status), использовать сессию или клиент для…

Полный разбор
Как проверять входные данные с помощью Pydantic?Junior

Pydantic проверяет и преобразует данные во время выполнения по аннотациям класса-наследника BaseModel: строку «42» превратит в int, а «abc» для int отклонит с понятной ошибкой ValidationError, где указано поле и причина. Ограничения задают через Field…

Полный разбор
Как работать с JSON в Python и что делать с датами и своими объектами?Junior

json.dumps(obj) превращает объект в строку, json.loads(s) — строку в объект; dump/load — то же для файлов. Поддерживаются только dict, list, str, int, float, bool, None; кортеж станет списком, ключи словаря — строками. datetime, Decimal, UUID, свои классы…

Полный разбор
Чем WSGI отличается от ASGI?Middle

WSGI — синхронный интерфейс между веб-сервером и приложением: один запрос занимает один поток или процесс до ответа (Flask, Django). ASGI — асинхронный: приложение — корутина, один процесс обслуживает тысячи соединений через event loop, поддерживаются…

Полный разбор

Документация

← Вся карта «ИИ-инженер»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования