Перейти к содержимому
Команда ClaudexiaAPI

Rate limits в Claude API: что значит 429 и как с этим жить

Откуда берутся лимиты запросов и токенов, как правильно делать повтор с задержкой, зачем нужен джиттер и как не упереться в потолок на агентных сценариях.

Ошибка 429 означает, что вы превысили лимит. Неочевидно то, что лимитов несколько и упереться можно в любой из них.

Три вида лимитов

Запросы в минуту. Сколько раз вы можете дёрнуть API. Упираются сюда обычно те, кто параллелит мелкие задачи.

Входные токены в минуту. Сколько текста вы отправляете. Упираются те, кто гоняет большой контекст: агенты, работа с репозиторием.

Выходные токены в минуту. Сколько модель генерирует. Упираются те, кто просит длинные ответы или запускает много генераций сразу.

Первый лимит обычно не главный. На агентных сценариях вы упрётесь во второй задолго до первого.

Как правильно повторять запрос

Наивный повтор сразу же делает только хуже: вы добавляете нагрузку в момент, когда её и так много. Нужна выдержка с ростом и случайной добавкой.

import random, time

def call_with_retry(fn, attempts=5, base=1.0):
    for i in range(attempts):
        try:
            return fn()
        except RateLimitError:
            if i == attempts - 1:
                raise
            delay = base * (2 ** i) + random.uniform(0, 0.5)
            time.sleep(delay)

Случайная добавка нужна, чтобы десять ваших воркеров не пошли на повтор одновременно. Без неё вы получите волны отказов вместо ровной работы.

Читайте заголовки ответа

API возвращает, сколько осталось до сброса. Это лучше, чем угадывать: если сервер говорит подождать двадцать секунд, ждать надо двадцать, а не тридцать две по формуле.

Как не упираться вовсе

Не шлите весь файл, если нужен метод. Входной лимит расходуется контекстом, а он на агентных сценариях накапливается.

Разведите нагрузку по ключам. Фоновая обработка и живая работа человека не должны делить один лимит. Иначе ночной прогон уронит вам рабочий день.

Ставьте очередь, а не параллель. Десять одновременных запросов упрутся в лимит, десять последовательных пройдут. Если задача не срочная, очередь дешевле и надёжнее.

Кэшируйте повторяющийся контекст. Если каждый запрос тащит одну и ту же большую инструкцию, её стоит закэшировать на стороне провайдера.

Про отдельные ключи

Разделение нагрузки удобнее всего делать ключами: один на прод, один на фон, один на эксперименты. Тогда видно, кто съел лимит, и можно ограничить каждого отдельно.

У нас на каждый ключ настраиваются свои лимиты и своя статистика, а суб-организации разводят команды по отдельным бюджетам.

Коротко

Лимитов три, и на агентах вы упрётесь в токенный, а не в запросный. Повтор делайте с ростом задержки и джиттером, слушайте заголовки, разводите фон и живую работу по разным ключам.