Перейти к основному содержимому
Базовый6–10 часов

Устойчивый клиент AI API

Создайте production-ready клиент LLM API со structured output, валидацией, retries, timeout, идемпотентностью, tracing и тестами.

типизация Pythonasync IOPydanticretriesobservabilitytesting

Сценарий

Задача

Внутренний сервис должен вызывать LLM для классификации обращений. Ответы должны быть структурированными, повторные запросы — безопасными, а ошибки — измеримыми и воспроизводимыми.

Пошаговое выполнение

1. Определите контракт

Результат: Запрос и ответ имеют стабильную типизированную форму.

Задачи

  • Опишите input model
  • Создайте output schema
  • Определите validation errors
  • Добавьте correlation ID

Проверки

  • Невалидный ответ не проходит незаметно
  • Schema имеет unit tests

2. Реализуйте transport layer

Результат: Клиент явно контролирует сетевое поведение.

Задачи

  • Добавьте async request
  • Установите connect/read timeout
  • Обработайте 429 и 5xx
  • Добавьте exponential backoff с jitter

Проверки

  • Retries имеют предел
  • Retry policy не повторяет non-retryable errors

3. Добавьте observability

Результат: Каждый вызов можно объяснить после выполнения.

Задачи

  • Логируйте request ID
  • Измеряйте latency
  • Записывайте token usage и retry count
  • Не логируйте secrets и PII

Проверки

  • Один request отслеживается end-to-end
  • Sensitive data не попадает в logs

4. Постройте tests и failure simulation

Результат: Известные failure modes воспроизводятся локально.

Задачи

  • Замокайте timeout
  • Замокайте 429
  • Верните malformed JSON
  • Проверьте duplicate request

Проверки

  • Все failure paths имеют assertions
  • Повторный idempotent request не создаёт дубль

Критерии приёмки

  • Типы проходят проверку
  • Все тесты зелёные
  • Retry имеет предел
  • Invalid structured output возвращает явную ошибку
  • Есть latency/retry/cost report

Рубрика оценки

Как оценивается результат

Проходной балл: 70/100 · Отличие: 90/100

Контракты и валидация

Запросы, ответы и ошибки имеют явную типизированную форму.

25 баллов

Недостаточно

Схема неполная или ошибки замалчиваются.

Компетентно

Основные контракты типизированы и тестируются.

Сильно

Контракты версионируются, а failure modes имеют отдельные типы и тесты.

Необходимые доказательства

  • ✓ Ссылка на код или артефакт
  • ✓ Короткий README с решениями
  • ✓ Вывод тестов или runtime evidence
  • ✓ Примеры валидного и невалидного ответа

Надёжность transport layer

Timeout, retry, backoff, rate limits и idempotency реализованы с безопасными границами.

30 баллов

Недостаточно

Есть неограниченные повторы или смешаны retryable/non-retryable errors.

Компетентно

Политики retries и timeout имеют границы и тесты.

Сильно

Добавлены jitter, circuit breaker или multi-model fallback с доказательствами.

Необходимые доказательства

  • ✓ Ссылка на код или артефакт
  • ✓ Короткий README с решениями
  • ✓ Вывод тестов или runtime evidence
  • ✓ Failure simulation для timeout, 429 и 5xx

Observability

Каждый вызов объясняется через request ID, latency, retries, usage и безопасные logs.

20 баллов

Недостаточно

Нет сквозной корреляции или в logs есть sensitive data.

Компетентно

Есть request ID, latency, usage и redaction.

Сильно

Есть distributed traces, dashboards или alert thresholds.

Необходимые доказательства

  • ✓ Ссылка на код или артефакт
  • ✓ Короткий README с решениями
  • ✓ Вывод тестов или runtime evidence
  • ✓ Пример trace или structured log

Тестирование и воспроизводимость

Success и failure paths воспроизводятся автоматически.

25 баллов

Недостаточно

Проверен только happy path.

Компетентно

Есть unit/integration tests для основных failure modes.

Сильно

Есть concurrency/load tests и стабильные regression fixtures.

Необходимые доказательства

  • ✓ Ссылка на код или артефакт
  • ✓ Короткий README с решениями
  • ✓ Вывод тестов или runtime evidence
  • ✓ Test matrix для ключевых сценариев