Blog
6 phút đọc

Vượt rate limit Claude API: 5 pattern cho production

5 pattern kiến trúc giúp ứng dụng không bị chặn bởi rate limit Claude API: queue, caching, batch, backoff, routing. Kèm code mẫu

Claude API rate limit và thử thách production

Rate limit là rào cản phổ biến khi đưa ứng dụng Claude API lên production. Mỗi tài khoản có giới hạn request/phút và token/phút. Nếu vượt quá, API trả về HTTP 429. Bài viết này tổng hợp 5 pattern giúp ứng dụng hoạt động ổn định dù chịu tải cao. Các pattern có thể kết hợp tùy kiến trúc.

Pattern 1: Hàng đợi kết hợp backpressure

Khi request đến vượt quá limit, thay vì retry ngay, đẩy vào queue. Worker xử lý queue với tốc độ kiểm soát. Backpressure giúp queue không tràn.

# Ví dụ dùng asyncio.Queue
import asyncio
async def worker(queue, client, rate_limiter):
    while True:
        req = await queue.get()
        async with rate_limiter:
            resp = await client.post("https://api.anthropic.com/v1/messages", json=req)
            if resp.status == 429:
                await queue.put(req)  # retry sau
        queue.task_done()

Ưu điểm: Xử lý tải đột biến, tránh loss request. Nhược điểm: Cần quản lý queue (Redis, SQS), tăng độ trễ.

Pattern 2: Caching response cho request trùng lặp

Nhiều request có cùng input. Cache response Claude API trong thời gian ngắn giúp giảm số lượng request.

from functools import lru_cache

@lru_cache(maxsize=100)
def get_completion(prompt, model):
    return call_claude_api(prompt, model)

Đặt TTL hợp lý (vài giây đến vài phút) tùy độ nhạy của dữ liệu. Phù hợp với các tác vụ lặp lại như kiểm tra chính tả, tóm tắt nội dung cố định.

Pattern 3: Batch request cho nhiều tác vụ nhỏ

Gom nhiều prompt vào một request bằng cách dùng system message hướng dẫn Claude xử lý từng item. Giảm số request đáng kể.

// Body request batch
{
  "model": "claude-sonnet-4-20250514",
  "messages": [
    {"role": "system", "content": "Translate each user message to Vietnamese. Return as JSON array."},
    {"role": "user", "content": "Hello\nGoodbye\nHow are you?"}
  ]
}

Hiệu quả: 10 task nhỏ = 1 request thay vì 10. Phù hợp xử lý hàng loạt ngôn ngữ, phân loại, trích xuất.

Pattern 4: Exponential backoff và retry thông minh

Khi gặp 429, đợi thời gian tăng dần. Thêm jitter (ngẫu nhiên) để tránh thundering herd.

import time, random

def retry_with_backoff(fn, max_retries=5):
    for i in range(max_retries):
        try:
            return fn()
        except RateLimitError:
            wait = (2 ** i) + random.random()
            time.sleep(wait)
    raise

Kết hợp đọc header Retry-After nếu có. Đây là pattern cơ bản nhất, dễ triển khai.

Pattern 5: Route request qua nhiều API key

Dùng nhiều key chia sẻ tải. Mỗi key có rate limit riêng, giúp tăng throughput tổng thể.

keys = ['key1', 'key2', 'key3']
current = 0

def get_next_key():
    global current
    key = keys[current % len(keys)]
    current += 1
    return key

Có thể thêm health check, loại key hết limit khỏi vòng quay. Yêu cầu quản lý key tập trung.

So sánh các pattern

PatternGiảm requestĐộ phức tạpGiảm latencyKhi nào dùng
QueueTrung bìnhCaoTăngTải đột biến, cần đảm bảo không mất request
CachingCaoThấpGiảm mạnhRequest trùng lặp nhiều
BatchCaoTrung bìnhGiảmNhiều tác vụ nhỏ độc lập
BackoffKhôngThấpTăng tạmPattern bắt buộc cho mọi production
Multi‑keyCaoTrung bìnhGiảmCần throughput vượt giới hạn một key

Kết luận

Rate limit là vấn đề thực tế khi dùng Claude API ở quy mô lớn. Bắt đầu với exponential backoff, sau đó thêm caching và queue nếu cần. Batch và multi‑key dành cho ứng dụng có throughput rất cao. Tuỳ theo kiến trúc, bạn có thể kết hợp nhiều pattern.

Nếu bạn cần API key Claude giá tốt cho team, hãy tham khảo CLAUDE API KEY tại CheapAIKey – hỗ trợ đa dạng gói, bảo hành, giao dịch nhanh.

cheapaikey.store

Mua API Key Claude

Mua API Key

Đọc tiếp