Anthropic 529 overloaded_error: что это означает и как обработать его

API Claude возвращает 529 с типом ошибки overloaded_error при временной перегрузке API. Согласно Anthropic, это может произойти, когда API испытывает высокую нагрузку у всех пользователей. Ваш запрос в порядке. API занят, поэтому он отклонил запрос. Когда ваша организация превышает собственные лимиты запросов, вместо этого вы получаете 429. Тело ответа имеет ту же структуру, что и любая другая ошибка API Claude: верхнеуровневый type из error, объект error с type и message, а также request_id, который можно передать в службу поддержки Anthropic. Дополнительные сведения см. в разделе об ошибках API Claude.

529, 429 или лимит расходов: как их различать

API Claude использует похожие на вид сообщения об ошибках для очень разных проблем. Иногда это проходит, если подождать. Один из них не исчезнет до следующего месяца.

Response error.type retry-after Что это означает Что делать
529 overloaded_error Используйте его, если он там API перегружен у всех пользователей Подождите и повторите попытку несколько раз
429 rate_limit_error Yes Ваша организация превысила лимит запросов, входных токенов или выходных токенов в минуту, или слишком быстро нарастила нагрузку и достигла предела ускорения. Подождите, пока retry-after не скажет
429 rate_limit_error, с error.details.error_code, установленным в значение enforced_spend_limit_reached No Ваша организация достигла месячного лимита расходов своего уровня использования Не пытайтесь снова. Использование приостанавливается до 00:00 UTC в первый день следующего месяца или до перехода на более высокий уровень.
400 invalid_request_error No Использование достигло ограничения расходов, установленного в вашей организации или рабочей области Повысить лимит или удалить его

Ограничение расходов 429 имеет тот же тип ошибки, что и ограничение скорости, поэтому код, который повторяет попытку каждые rate_limit_error, всё равно не удаётся. Anthropic отмечает, что повторные попытки не удаются до возобновления доступа, включая автоматические повторные попытки пакета SDK. Дополнительные сведения см. в разделе Достижение лимита расходов.

Как обработать 529

  1. Перед повторной попыткой проверьте код состояния. A 529 и 429 требуют разных ожиданий, и 429 без retry-after вообще не требует повтора.
  2. Сбавьте темп с 529. Повторите попытку с экспоненциальной задержкой и случайным разбросом и остановитесь после нескольких попыток. Если ответ содержит заголовок retry-after, подождите столько времени.
  3. Пусть пакет SDK сначала выполняет повторные попытки. Официальные SDK Anthropic по умолчанию дважды повторяют попытку при ошибках подключения, ограничении скорости и ошибках 5xx с экспоненциальной задержкой и учитывают retry-after, если он присутствует. Число можно изменить с помощью max_retries (maxRetries в TypeScript). Когда пакет SDK исчерпывает все попытки, код получает ошибку.
  4. Прекратить повторные попытки при достижении лимита расходов. Если у ответа 429 нет заголовка retry-after, сообщите пользователю и предупредите себя.
  5. Держите пользователя в курсе. Поставьте задачу в очередь и повторите попытку позже или покажите понятное сообщение "занято, повторите попытку через минуту" вместо универсальной ошибки.

В пакете SDK для Python код 429 вызывает исключение anthropic.RateLimitError, а любой статус 500 и выше, включая 529, вызывает исключение anthropic.InternalServerError:

import anthropic

client = anthropic.Anthropic(max_retries=4)


def summarize(text: str) -> str | None:
    try:
        message = client.messages.create(
            model="claude-sonnet-5",
            max_tokens=1024,
            messages=[{"role": "user", "content": f"Summarize:\n\n{text}"}],
        )
    except anthropic.RateLimitError as e:
        if "retry-after" not in e.response.headers:
            # Spend cap: every retry fails until access resumes
            alert_admin(e)
            return None
        raise
    except anthropic.InternalServerError as e:
        if e.status_code == 529:
            # Overloaded after all SDK retries: queue the job for later
            queue_for_later(text)
            return None
        raise
    return next(block.text for block in message.content if block.type == "text")

Как проверить, что приложение обрабатывает ошибку 529

Вы редко сталкиваетесь с ошибкой 529 во время разработки. Он зависит от нагрузки от каждого пользователя API Claude, поэтому его нельзя активировать. Способ тестирования определяет, находите ли вы ошибки раньше, чем ваши пользователи.

Approach Что вы найдете То, что вы пропустили
Ожидание продакшена Реальные перегрузки Всё, пока пользователь не нажмёт на это
Мокируйте API в тестах или позвольте агенту по написанию кода написать мок Выполняется ли ветка обработки ошибок Реальные коды состояния и тела ошибок Anthropic, а также политика повторных попыток вашего SDK. Приложению также требуется переключатель только для тестирования для доступа к mock-сервису.
Вызывайте реальный API до тех пор, пока он не завершится ошибкой Реальное поведение Вы не можете активировать 529 по запросу, и вы не можете безопасно активировать ограничение расходов вообще
Перехватывайте реальный трафик приложения и возвращайте 529s и 429s по требованию Реальные URL-адреса, ваш реальный SDK и политика повторных попыток, а также собственный формат ошибок Anthropic Ничего в приложении не изменяется, поэтому оно не тестирует ваш код изолированно. Оставьте для этого модульные тесты.

Попробуйте его в вашем приложении

Прокси-сервер разработки перехватывает запросы приложения к https://api.anthropic.com и возвращает ошибки в формате ошибок Anthropic, а приложение продолжает вызывать реальный URL-адрес. Скачайте предустановленный набор и запустите с ним Dev Proxy:

devproxy config get anthropic-throttling
devproxy --config-file "~dataFolder/configs/anthropic-throttling/.devproxy/devproxyrc.json"
Preset Что он возвращает
anthropic-throttling Случайным образом 1 из 4 429 rate_limit_error ответов (запросы, входные токены, выходные токены и ограничение скорости) или 529 overloaded_error. При ответах 429 Dev Proxy устанавливает retry-after и сообщает вам, когда приложение снова вызывает API слишком рано.
anthropic-random-errors Случайным образом выбирается одна из ошибок из списка ошибок API Claude, включая 400, 401, 402, 403, 404, 409, 413, 429, 500, 504 и 529, для 50% запросов

Ни одна из предустановок не включает в себя ограничение расходов 429. Чтобы проверить этот сценарий, добавьте ответ без заголовка retry-after в файл предустановки anthropic-errors.json:

{
  "statusCode": 429,
  "headers": [
    { "name": "content-type", "value": "application/json" }
  ],
  "body": {
    "type": "error",
    "error": {
      "type": "rate_limit_error",
      "message": "You have reached your API usage limits.",
      "details": { "error_code": "enforced_spend_limit_reached" }
    }
  }
}

Чтобы все запросы завершались ошибкой и вы увидели, что происходит, когда у SDK закончатся попытки повтора, запустите Dev Proxy с --failure-rate 100. Дополнительные сведения см. в разделе Частота сбоев запросов на изменение. Чтобы установить Dev Proxy, см. статью Настройка Dev Proxy.

Дальнейшие действия

См. также