Ayarlar

Dil

Yapay Zeka API Oran Sınırlaması: Nasıl Çalışır ve Nasıl Yönetilir

L
LemonData
·26 Şubat 2026·19 görüntüleme
#hız sınırlama#prodüksiyon#hata yönetimi#rehber#en iyi uygulamalar
Yapay Zeka API Oran Sınırlaması: Nasıl Çalışır ve Nasıl Yönetilir

AI API Oran Sınırlaması: Nasıl Çalışır ve Nasıl Yönetilir

Her AI API'nin oran sınırları vardır. Geliştirme aşamasında bunlara takılmak can sıkıcıdır. Üretimde takılmak ise kullanıcılarınızın hata görmesine neden olur. Sağlayıcılar arasındaki oran sınırlarının nasıl çalıştığını anlamak ve uygun yeniden deneme mantığını kurmak, bir demo ile üretim uygulaması arasındaki farktır.

Her Sağlayıcının Sınırlaması Nasıl Çalışır

OpenAI

OpenAI, hesabınızın kullanım geçmişi ve ödeme seviyesine göre katmanlı oran sınırları uygular.

Katman RPM (İstek/Dakika) TPM (Token/Dakika) Nasıl Ulaşılır
Ücretsiz 3 40.000 Yeni hesap
Katman 1 500 200.000 5$ ödeme yapıldı
Katman 2 5.000 2.000.000 50$ ödeme yapıldı
Katman 3 5.000 10.000.000 100$ ödeme yapıldı
Katman 4 10.000 50.000.000 250$ ödeme yapıldı
Katman 5 10.000 300.000.000 1.000$ ödeme yapıldı

Sınırlar model başına geçerlidir. GPT-4.1 kullanmak, GPT-4.1-mini kotanızı tüketmez.

Anthropic

Anthropic, RPM ve TPM sınırları olan benzer bir katman sistemi kullanır. Ayrıca alt katmanlarda günlük token sınırı uygular.

Google (Gemini)

Google AI Studio, model başına sınırlar uygular. Ücretsiz katman günlük isteklerde cömerttir ancak dakikalık oranlarda sıkıdır (Gemini 2.5 Flash ücretsiz katman için 15 RPM).

Aggregratör Platformlar

LemonData ve OpenRouter gibi aggregratörler, yukarı akış sınırlarının üzerine kendi oran sınırlama katmanlarını ekler. LemonData rol tabanlı sınırlar kullanır:

Rol RPM
Kullanıcı 1.000
Ortak 3.000
VIP 10.000

Avantajı: Aggregratör sınırları genellikle bireysel sağlayıcıların ücretsiz katmanlarından yüksektir ve çok kanallı yönlendirme sayesinde bir yukarı akış kanalı oran sınırlamasına takılırsa istek başka bir kanala yönlendirilir.

Oran Sınırı Başlıklarını Okuma

Tüm büyük sağlayıcılar, yanıt başlıklarında oran sınırı bilgisi döner:

x-ratelimit-limit-requests: 500
x-ratelimit-remaining-requests: 499
x-ratelimit-reset-requests: 60s
x-ratelimit-limit-tokens: 200000
x-ratelimit-remaining-tokens: 199500

Bu başlıkları proaktif olarak kullanın. Yavaşlamak için 429 hatasını beklemeyin.

Yeniden Deneme Mantığı Kurma

Yanlış Yol

# Bunu yapmayın
import time

def call_api(messages):
    while True:
        try:
            return client.chat.completions.create(
                model="gpt-4.1",
                messages=messages
            )
        except Exception:
            time.sleep(1)  # Sabit gecikme, geri çekilme yok, her hatayı yakalar

Sorunlar: üssel geri çekilme yok, yeniden denemeye uygun olmayan hataları yakalar, maksimum yeniden deneme sınırı yok, rastgele gecikme (jitter) yok.

Doğru Yol

import time
import random
from openai import RateLimitError, APIError, APIConnectionError

def call_with_retry(messages, model="gpt-4.1", max_retries=3):
    """Üssel geri çekilme ve jitter ile yeniden deneme."""
    for attempt in range(max_retries + 1):
        try:
            return client.chat.completions.create(
                model=model,
                messages=messages
            )
        except RateLimitError as e:
            if attempt == max_retries:
                raise
            # Yanıttan retry_after varsa kullan
            wait = getattr(e, 'retry_after', None)
            if wait is None:
                wait = (2 ** attempt) + random.uniform(0, 1)
            print(f"Oran sınırına takıldı. {wait:.1f}s bekleniyor (deneme {attempt + 1})")
            time.sleep(wait)
        except APIConnectionError:
            if attempt == max_retries:
                raise
            wait = (2 ** attempt) + random.uniform(0, 1)
            time.sleep(wait)
        except APIError as e:
            # İstemci hatalarını (400, 401, 403) yeniden deneme
            if e.status_code and 400 <= e.status_code < 500:
                raise
            if attempt == max_retries:
                raise
            time.sleep((2 ** attempt) + random.uniform(0, 1))

Ana prensipler:

  • Üssel geri çekilme: 1s, 2s, 4s, 8s
  • Jitter: 0-1s rastgele eklenerek "thundering herd" önlenir
  • Sağlanırsa retry_after başlığına saygı gösterilir
  • İstemci hataları (kötü istek, yetkilendirme hatası) yeniden denenmez
  • Maksimum yeniden deneme sayısı belirlenir

Async Versiyon

import asyncio
import random
from openai import AsyncOpenAI, RateLimitError

async_client = AsyncOpenAI(
    api_key="sk-lemon-xxx",
    base_url="https://api.lemondata.cc/v1"
)

async def call_with_retry_async(messages, model="gpt-4.1", max_retries=3):
    for attempt in range(max_retries + 1):
        try:
            return await async_client.chat.completions.create(
                model=model,
                messages=messages
            )
        except RateLimitError:
            if attempt == max_retries:
                raise
            wait = (2 ** attempt) + random.uniform(0, 1)
            await asyncio.sleep(wait)

Gelişmiş: Token Bucket Oran Sınırlayıcı

Yüksek verimli uygulamalar için, sunucu sınırlarına takılmamak adına istemci tarafı oran sınırlaması uygulayın:

import time
import asyncio

class TokenBucket:
    def __init__(self, rate: float, capacity: int):
        self.rate = rate          # saniye başına token
        self.capacity = capacity  # maksimum patlama boyutu
        self.tokens = capacity
        self.last_refill = time.monotonic()

    async def acquire(self, tokens: int = 1):
        while True:
            now = time.monotonic()
            elapsed = now - self.last_refill
            self.tokens = min(
                self.capacity,
                self.tokens + elapsed * self.rate
            )
            self.last_refill = now

            if self.tokens >= tokens:
                self.tokens -= tokens
                return
            # Yeterli token için bekle
            wait = (tokens - self.tokens) / self.rate
            await asyncio.sleep(wait)

# Dakikada 500 istek = saniyede ~8.3
limiter = TokenBucket(rate=8.0, capacity=20)

async def rate_limited_call(messages, model="gpt-4.1"):
    await limiter.acquire()
    return await async_client.chat.completions.create(
        model=model,
        messages=messages
    )

Oran Sınırlarında Model Yedekleme

Birincil modeliniz oran sınırına takıldığında, alternatif modele geçin:

FALLBACK_CHAIN = [
    "claude-sonnet-4-6",
    "gpt-4.1",
    "gpt-4.1-mini",
]

async def call_with_fallback(messages):
    for model in FALLBACK_CHAIN:
        try:
            return await async_client.chat.completions.create(
                model=model,
                messages=messages
            )
        except RateLimitError:
            continue
    raise Exception("Tüm modeller oran sınırına takıldı")

API aggregratörleri burada parlıyor. Tek bir uç noktada 300+ model ile her zaman bir yedek bulunur.

Oran Sınırı Kullanımını İzleme

Kullanıcılar etkilenmeden önce sorunları yakalamak için oran sınırı tüketiminizi takip edin:

import logging

def log_rate_limits(response):
    headers = response.headers
    remaining = headers.get("x-ratelimit-remaining-requests")
    limit = headers.get("x-ratelimit-limit-requests")
    if remaining and int(remaining) < int(limit) * 0.1:
        logging.warning(
            f"Oran sınırı uyarısı: {remaining}/{limit} istek kaldı"
        )

Kalan kapasite %10'un altına düştüğünde uyarılar kurun. Bu, kullanıcılar 429 hatası görmeden önce kısıtlama uygulamanız için zaman kazandırır.

Özet

Strateji Ne Zaman Kullanılır
Üssel geri çekilme Her zaman (temel)
İstemci tarafı oran sınırlayıcı Yüksek verimli uygulamalar (>100 RPM)
Model yedekleme SLA gereksinimli üretim uygulamaları
Proaktif izleme Herhangi bir üretim dağıtımı
Toplu API Gerçek zamanlı olmayan iş yükleri

Amaç oran sınırlarından tamamen kaçınmak değil. Onları kullanıcılarınızın fark etmeyeceği şekilde yönetmektir.


Dayanıklı AI uygulamaları geliştirin: lemondata.cc, yukarı akış oran sınırlarını otomatik yöneten çok kanallı yönlendirme sağlar. Tek API anahtarı, 300+ model.

Share: