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