429 là lỗi nói "chậm lại", không phải "bạn hết tiền". Sự khác biệt rất quan trọng: cách sửa lỗi này là chờ, còn lỗi kia là nạp tiền — nhầm lẫn hai lỗi sẽ khiến bạn mất hàng giờ gỡ lỗi sai chỗ.
Lỗi
{
"type": "error",
"error": { "type": "rate_limit_error",
"message": "Number of requests has exceeded your rate limit" }
}Tổng quan nguyên nhân và cách khắc phục
| Nguyên nhân | Cách khắc phục |
|---|---|
| Số yêu cầu mỗi phút vượt quá giới hạn tài khoản của bạn | Xếp hàng và giới hạn mức đồng thời ở phía client thay vì gửi tất cả cùng lúc. |
| Số token mỗi phút vượt quá giới hạn | Prompt dài tiêu thụ hạn mức token nhanh hơn nhiều so với hạn mức yêu cầu. Hãy giảm ngữ cảnh hoặc chia nhỏ công việc. |
| Nhiều tiến trình dùng cùng một khóa | Giới hạn áp dụng cho khóa, không phải tiến trình. Các worker song song cộng dồn vào cùng một hạn mức. |
| Retry không có backoff | Lặp lại ngay lập tức khiến bạn luôn vượt quá giới hạn. Backoff cấp số nhân kèm jitter là bắt buộc. |
Hãy tôn trọng retry-after khi có
Khi phản hồi có tiêu đề retry-after, đó không phải đề xuất: đó là khoảng thời gian chính xác sau đó yêu cầu mới được chấp nhận lại. Chờ ít hơn chắc chắn sẽ nhận thêm một lỗi 429.
import time
from openai import APIStatusError
try:
resp = client.chat.completions.create(model=MODELO, messages=msgs)
except APIStatusError as e:
if e.status_code == 429:
espera = float(e.response.headers.get("retry-after", 5))
time.sleep(espera)
resp = client.chat.completions.create(model=MODELO, messages=msgs)
else:
raiseGiới hạn mức đồng thời ngay từ nguồn
Nguyên nhân phổ biến nhất không phải tổng khối lượng mà là một đợt tăng đột biến: hai mươi yêu cầu gửi cùng thời điểm có thể vượt giới hạn mà sáu mươi yêu cầu trải đều trong một phút lại không vượt. Semaphore xử lý được điều mà retry đơn thuần không xử lý được.
import asyncio
LIMITE = asyncio.Semaphore(4) # no máximo 4 chamadas simultâneas
async def chamar(msgs):
async with LIMITE:
return await client.chat.completions.create(
model=MODELO, messages=msgs)Xác nhận đó là giới hạn, không phải số dư
429 không bao giờ có nghĩa là thiếu tín dụng — đó là 402. Nếu log của bạn trộn lẫn hai lỗi, hãy tách theo status trước khi điều tra: cách sửa 429 là điều chỉnh thời gian, còn 402 là nạp tiền. Lặp lại 402 sẽ luôn thất bại.
Nếu bạn gọi qua Kunavo
Tại Kunavo, giới hạn áp dụng theo khóa còn số dư là một ví trả trước riêng biệt, nên hai trường hợp có status khác nhau: 429 cho giới hạn tốc độ và 402 khi số dư không đủ cho lệnh gọi — không bao giờ lỗi này giả dạng lỗi kia. Các yêu cầu bị từ chối không bị tính phí. Mức phí theo token, quyết định mỗi lệnh gọi tiêu hao bao nhiêu từ số dư, được nêu trong hướng dẫn giá API Claude của chúng tôi.
Câu hỏi thường gặp
429 có nghĩa là tôi đã hết tín dụng phải không?
Không. Thiếu số dư là 402. 429 liên quan đến tốc độ: bạn đã gửi quá nhiều yêu cầu hoặc token trong thời gian ngắn, và chờ sẽ giải quyết được.
Tôi nên chờ bao lâu?
Nếu có tiêu đề retry-after, hãy chờ đúng khoảng thời gian đó. Nếu không có, dùng backoff cấp số nhân bắt đầu từ 1–2 giây kèm jitter, tối đa 30–60 giây.
Tăng giới hạn có giải quyết được không?
Có thể hữu ích nếu lưu lượng thực sự cao, nhưng phần lớn lỗi 429 đến từ các đợt tăng đột biến ngắn. Giới hạn mức đồng thời thường giải quyết được vấn đề mà không cần thay đổi giới hạn.
Hướng dẫn liên quan
- Lỗi 529 overloaded_error trong Claude API — có nghĩa là gì và cách xử lý
- Lỗi 401 authentication_error / invalid x-api-key — cần kiểm tra gì, theo thứ tự
- Claude API 429 rate_limit_error — nguyên nhân và cách khắc phục hiệu quả
Thông tin chi tiết hơn về ý nghĩa lỗi có trong tài liệu tham chiếu lỗi; bạn chỉ mất một phút để lấy khóa qua đăng ký và hướng dẫn xác thực.