Vào đợt cao điểm 11/11/2025, tôi được mời tư vấn cho một sàn thương mại điện tử tầm trung khi hệ thống chatbot AI chăm sóc khách hàng của họ "chết cứng" đúng 21:47 — đúng giờ flash sale. Hệ thống cũ dùng requests đồng bộ, mỗi phút chỉ xử lý được 90 phiên hội thoại, trong khi lượng truy cập đổ về là 4.200 phiên/phút. Sau 6 giờ refactor, tôi đưa vào pipeline dùng asyncio + connection pool + adaptive concurrency, thông lượng tăng lên 5.800 phiên/phút, độ trễ p50 giảm từ 2.100ms xuống còn 47ms, và tổng chi phí token giảm 87%. Bài viết này là toàn bộ playbook tôi đã áp dụng.

Bối cảnh bài toán: 40.000 request GPT trong 3 giờ

Yêu cầu nghiệp vụ của dự án:

Sau khi khảo sát, tôi chọn HolySheep AI làm gateway vì gateway này hỗ trợ https://api.holysheep.ai/v1 với tỷ giá ¥1 = $1 (giúp tiết kiệm 85%+ so với channel mặc định), chấp nhận WeChat/Alipay, có chính sách tín dụng miễn phí khi đăng ký và SLA độ trễ < 50ms cho request khu vực Đông Á.

Tại sao asyncio là chìa khóa cho batch LLM

Một request GPT-5.5 điển hình mất 800ms–2.000ms. Nếu gọi tuần tự (đồng bộ), 40.000 request = hơn 11 giờ. Nhưng nếu mở 80-150 kết nối đồng thời bằng asyncio.Semaphore, cùng khối lượng công việc hoàn thành trong 5-7 phút. Bảng so sánh nhanh trên cùng 1.000 request từ máy chủ ở Singapore:

Triển khai code: 3 phiên bản từ cơ bản đến production

Phiên bản 1 — Async batch tối thiểu (chạy được trong 20 dòng)

import asyncio, aiohttp, time

API_URL = "https://api.holysheep.ai/v1/chat/completions"
API_KEY = "YOUR_HOLYSHEEP_API_KEY"

async def call_gpt(session, prompt, sem):
    async with sem:
        async with session.post(
            API_URL,
            json={"model": "gpt-5.5",
                  "messages": [{"role": "user", "content": prompt}]},
            headers={"Authorization": f"Bearer {API_KEY}",
                     "Content-Type": "application/json"},
        ) as r:
            data = await r.json()
            return data["choices"][0]["message"]["content"], data["usage"]["total_tokens"]

async def main():
    prompts = [f"Tóm tắt đơn hàng #{i}: khách hỏi về phí ship" for i in range(200)]
    sem = asyncio.Semaphore(50)
    t0 = time.perf_counter()
    async with aiohttp.ClientSession() as s:
        results = await asyncio.gather(*[call_gpt(s, p, sem) for p in prompts])
    dt = time.perf_counter() - t0
    total_tokens = sum(t for _, t in results)
    print(f"Hoàn thành 200 request trong {dt:.2f}s, throughput {200/dt:.1f} req/s, "
          f"tổng {total_tokens} token")

asyncio.run(main())

Phiên bản 2 — Production với retry, rate-limit handling, metrics

import asyncio, aiohttp, random, logging, time
from dataclasses import dataclass, field

logger = logging.getLogger("holysheep-batch")

@dataclass
class BatchMetrics:
    success: int = 0
    failed: int = 0
    retried: int = 0
    tokens_in: int = 0
    tokens_out: int = 0
    latency_ms: list = field(default_factory=list)

class HolySheepBatchClient:
    def __init__(self, api_key: str,
                 base_url: str = "https://api.holysheep.ai/v1",
                 model: str = "gpt-5.5",
                 concurrency: int = 80,
                 max_retries: int = 5):
        self.api_key = api_key
        self.base_url = base_url
        self.model = model
        self.sem = asyncio.Semaphore(concurrency)
        self.max_ret