Збої AI API у продакшені

Повідомлення про помилки рідко розповідають усю історію, коли ваша AI-функція ламається о 2 годині ночі. Я рік працював з інтеграціями OpenAI та Anthropic. Я навчився групувати збої за тим, що вони означають для налагодження.

Обробка лімітів запитів (Rate Limits)

Помилки 429 у OpenAI мають різні причини. Ви повинні перевіряти код помилки, щоб знати, як реагувати.

  • Ліміти запитів за хвилину (RPM) відновлюються за лічені секунди.
  • Ліміти токенів за хвилину (TPM) відновлюються за 60 секунд.
  • Вичерпання місячної квоти залишається проблемою, доки ви не поповните баланс або не настане новий розрахунковий цикл.

Не використовуйте експоненціальну затримку (exponential backoff) для проблем із квотами. Це лише змарнує ваш час.

Помилки 529 у Anthropic означають, що провайдер перевантажений. Ставтеся до цього як до помилки 503. Проблема на їхньому боці. Зробіть паузу та попередьте свою команду.

Обробка помилок 400

Ці збої зазвичай стаються з вашої вини. Звертайте увагу на ці три сценарії:

  • Невідповідність версій моделей. Ви оновили назву в одному місці, але не в обробнику повторних спроб (retry handler).
  • Переповнення контекстного вікна. Історія розмови стала занадто великою. Це часто трапляється через некоректну логіку урізання (truncation logic).
  • Помилки валідації схеми. Ваша структура JSON містить непідтримувані типи або рекурсивні посилання.

Щоб виправити це, логуйте повний payload запиту для помилок 400. Спочатку анонімізуйте дані користувачів. Тіло відповіді точно вкаже, яке саме поле спричинило помилку.

Обробка таймаутів

Таймаути важко відстежувати, тому що провайдер не бачить нічого неладного.

  • Connect timeout. Handshake не відбувся. Це трапляється під час перебоїв (brownouts) у роботі провайдера або проблем із DNS. Перевірте свою вихідну мережу.
  • Read timeout. Модель почала роботу, але не завершила її. Ваш додаток має вміти обробляти часткові результати стрімінгу (streaming outputs).
  • Gateway timeout (504). Ваш проксі-сервер відхилив запит за таймаутом першим. Запит може все ще виконуватися на стороні провайдера. Використовуйте дедуплікацію перед повторною спробою.

Для налагодження розділяйте таймаут підключення (connect timeout) та таймаут читання (read timeout). Логуйте час до першого токена (time-to-first-token), щоб зрозуміти, де саме виникає затримка (latency).

Обробка проблем провайдера

  • Помилка 500 часто вирішується однією повторною спробою через дві секунди.
  • Помилка 503 означає, що робота сервісу погіршилася. Якщо на сторінці статусу провайдера вказано про інцидент, використовуйте механізм circuit breaker.
  • Завжди записуйте, яка саме версія моделі видала помилку. Різні моделі мають різний рівень надійності.

Припиніть стрибати від логів до Slack. Спочатку перевірте сторінку статусу провайдера. Це позбавить вас 20 хвилин паніки.

Джерело: https://dev.to/void_stitch/production-ai-api-failures-by-category-what-429s-529s-and-timeouts-are-actually-telling-you-5bo1

Додаткова спільнота для навчання: https://t.me/GyaanSetuAi