Ограничение частоты и управление квотами
Устанавливайте квоты для каждого пользователя, организации и конечной точки, чтобы один клиент не израсходовал весь бюджет OpenAI.
«Ограничение частоты и управление квотами» — бесплатный урок AI Agents на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Зачем нужны ограничения?
Без ограничений один недобросовестный клиент может:
- исчерпать бюджет OpenAI
- вытеснить других пользователей
- подвергнуть сервис DDoS-атаке
Ограничения частоты запросов и квоты защищают расходы, задержку и справедливость.
Ограничение частоты запросов и квота
- Ограничение частоты запросов — число запросов в секунду или минуту (краткосрочное ограничение)
- Квота — общий бюджет на день или месяц (долгосрочное ограничение)
Вам нужны оба механизма.
Алгоритм token bucket
Классический алгоритм: у каждого пользователя есть «ведро», которое пополняется с фиксированной скоростью. Каждый запрос расходует один токен. Нет токенов — нет обслуживания.
Redis Token Bucket Example
def allow(user_id, rate=10, capacity=30):
key = f'rate:{user_id}'
now = time.time()
pipe = redis.pipeline()
pipe.hgetall(key)
state, _ = pipe.execute()
tokens = float(state.get('tokens', capacity))
last = float(state.get('last', now))
tokens = min(capacity, tokens + (now - last) * rate)
if tokens < 1:
return False
tokens -= 1
redis.hset(key, mapping={'tokens': tokens, 'last': now})
redis.expire(key, 60)
return TrueFastAPI Integration with slowapi
# pip install slowapi
from slowapi import Limiter
from slowapi.util import get_remote_address
limiter = Limiter(key_func=get_remote_address)
app.state.limiter = limiter
@app.post('/agents/qa')
@limiter.limit('10/minute')
def qa(req: AgentRequest):
...Different Limits Per Tier
class User:
def __init__(self, is_pro):
self.is_pro = is_pro
class State:
def __init__(self, is_pro):
self.user = User(is_pro)
class Req:
def __init__(self, is_pro):
self.state = State(is_pro)
def limit_for(req):
return '100/minute' if req.state.user.is_pro else '10/minute'
def qa(req):
limit = limit_for(req)
print(f'user is_pro={req.state.user.is_pro} -> rate limit {limit}')
return limit
qa(Req(is_pro=True))
qa(Req(is_pro=False))
Квоты на основе стоимости
Ограничивайте расходы в долларах, а не только число запросов:
def check_budget(user_id, predicted_cost):
key = f'cost:{user_id}:{date.today()}'
spent = float(redis.get(key) or 0)
if spent + predicted_cost > daily_budget(user_id):
raise HTTPException(429, 'Daily budget exceeded')
# After the call:
redis.incrbyfloat(key, actual_cost)
redis.expireat(key, midnight_tomorrow_ts)Ограничения параллельности
Также ограничивайте число одновременно выполняющихся запросов для каждого пользователя:
key = f'inflight:{user_id}'
redis.sadd(key, request_id)
if redis.scard(key) > 3:
raise HTTPException(429, 'Too many concurrent requests')
# Remove from set when the request finishes.Глобальное ограничение частоты запросов
Защитите нижестоящие API LLM от собственного сервиса:
global_key = 'rate:global:llm'
if redis.incr(global_key) > 60: # 60 calls per second
raise HTTPException(503, 'Service overloaded')
redis.expire(global_key, 1)Return Useful Errors
headers = {
'X-RateLimit-Limit': '60',
'X-RateLimit-Remaining': '0',
'X-RateLimit-Reset': str(reset_time),
'Retry-After': '30'
}
return JSONResponse({'error': 'rate-limited'}, status_code=429, headers=headers)Распределённые ограничения частоты запросов
Если Вы запускаете несколько API-серверов, ограничения частоты запросов должны быть общими для них. Redis — стандартный серверный компонент; Cloudflare и Kong предлагают управляемые альтернативы.
Допустимые всплески нагрузки
Реальная нагрузка возникает всплесками. Разрешайте небольшие всплески (например, 30 запросов одновременно при скорости 10 запросов в секунду). Реализации token bucket естественным образом поддерживают это благодаря увеличенному `capacity`.
Оповещения
Отправляйте оповещение, когда:
- срабатывания глобального ограничения частоты запросов происходят чаще X раз в минуту
- какой-либо пользователь постоянно достигает своего ограничения (вероятно, ему нужно повысить тариф или в системе есть ошибка)
- дневной бюджет приближается к 80%
Двухуровневая защита
Зачем нужны BOTH ограничения частоты запросов AND квоты?
Итоги
Алгоритм token bucket для ограничений частоты запросов, счётчики стоимости для квот, ограничения параллельности для каждого пользователя, глобальный автоматический размыкатель и информативные ответы 429 с Retry-After.
Изучай AI Agents с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 60
- Уроки
- 239
Часто задаваемые вопросы
Урок «Ограничение частоты и управление квотами» бесплатный?
Да — полный текст урока «Ограничение частоты и управление квотами» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Ограничение частоты и управление квотами»?
Устанавливайте квоты для каждого пользователя, организации и конечной точки, чтобы один клиент не израсходовал весь бюджет OpenAI. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Ограничение частоты и управление квотами»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Предоставление агентов через API
- Асинхронные процессы и фоновые задачи
- Ограничение частоты и управление квотами
- Сине-зелёные и канареечные развёртывания агентов