Cách khắc phục lỗi Gemini API 429 RESOURCE_EXHAUSTED

intermediate🧠 AI Tools2026-05-17| Google AI Studio (Gemini API), Vertex AI, Node.js/Python SDKs, cURL

Error Message

429 RESOURCE_EXHAUSTED
#gemini#google-cloud#toi-uu-hoa-api#gioi-han-luot-goi

Kịch bản lỗiBạn đang trong quá trình xây dựng—có thể là một chatbot dành cho khách hàng hoặc một đường ống dữ liệu hạng nặng—và mọi thứ bỗng dừng lại. Các bản ghi log của bạn bắt đầu tràn ngập một thông báo cụ thể và gây khó chịu:

google.api_core.exceptions.ResourceExhausted: 429 RESOURCE_EXHAUSTED

Nếu bạn kiểm tra phản hồi JSON thô từ lệnh cURL, bạn sẽ thấy như sau:

{
  "error": {
    "code": 429,
    "message": "Quota exceeded for aiplatform.googleapis.com/generate_content_requests per minute...",
    "status": "RESOURCE_EXHAUSTED"
  }
}

Về cơ bản, Gemini API đang đóng vai trò như một cảnh sát giao thông. Bạn đã gửi quá nhiều dữ liệu hoặc quá nhiều yêu cầu trong một khoảng thời gian ngắn. Mặc dù điều này thường gặp nhất ở Gói miễn phí (Free Tier), ngay cả người dùng trả phí cũng có thể gặp phải rào cản này nếu cài đặt dự án không được tối ưu hóa.

Phân tích: Tại sao điều này lại xảy ra?Google quản lý lưu lượng truy cập bằng ba chỉ số cụ thể. Hiểu được bạn đang gặp phải chỉ số nào là bước đầu tiên để khắc phục.

  • RPM (Requests Per Minute): Số lượng yêu cầu mỗi phút. Một phép đếm đơn giản về số lần bạn gọi API.- RPD (Requests Per Day): Số lượng yêu cầu mỗi ngày. Hạn mức tổng cộng hàng ngày của bạn, hạn mức này sẽ được đặt lại vào nửa đêm giờ UTC.- TPM (Tokens Per Minute): Số lượng token mỗi phút. Khối lượng văn bản được xử lý, bao gồm cả câu lệnh (prompt) của bạn và phản hồi của mô hình.Các giới hạn này thay đổi rất lớn tùy theo mô hình. Ví dụ, Gemini 1.5 Flash Free Tier cho phép 15 RPM. Tuy nhiên, Gemini 1.5 Pro Free Tier chặt chẽ hơn nhiều, thường bị giới hạn chỉ ở mức 2 RPM. Nếu bạn xử lý một tệp CSV có 50 hàng trong một vòng lặp nhanh, bạn sẽ kích hoạt lỗi 429 trong chưa đầy năm giây.

Khắc phục nhanh: Triển khai Exponential BackoffĐừng chỉ thử lại yêu cầu ngay lập tức. Điều này tạo ra vấn đề "thundering herd" (đám đông ồ ạt) khiến bạn tiếp tục bị chặn. Thay vào đó, hãy sử dụng exponential backoff (giảm tốc lũy thừa). Kỹ thuật này thêm một khoảng thời gian trễ tăng dần giữa mỗi lần thử lại, giúp API có thời gian để đặt lại hạn mức (quota) của bạn.

Ví dụ Python với TenacityThư viện tenacity là cách đáng tin cậy nhất để xử lý các lần thử lại trong Python. Nó quản lý thời gian để bạn không phải viết các vòng lặp phức tạp.

import os
import google.generativeai as genai
from tenacity import retry, stop_after_attempt, wait_random_exponential, retry_if_exception_type

genai.configure(api_key="YOUR_API_KEY")
model = genai.GenerativeModel('gemini-1.5-flash')

@retry(
    retry=retry_if_exception_type(Exception), 
    wait=wait_random_exponential(min=1, max=60), 
    stop=stop_after_attempt(6)
)
def generate_content_with_retry(prompt):
    try:
        return model.generate_content(prompt).text
    except Exception as e:
        if "429" in str(e):
            print("Đã đạt giới hạn tốc độ. Đang lùi lại...")
            raise e
        raise e

Ví dụ Node.jsTrong JavaScript, bạn có thể sử dụng một hàm hỗ trợ async đơn giản. Phiên bản này thêm một chút "jitter" (độ nhiễu ngẫu nhiên) vào thời gian chờ, giúp ngăn chặn nhiều phiên bản ứng dụng cùng thử lại vào đúng một mili giây.

const sleep = (ms) => new Promise(res => setTimeout(res, ms));

async function callGeminiWithRetry(prompt, retries = 5) {
  for (let i = 0; i  Quotas**.- Lọc danh sách theo "Generative Language API".- Tìm `generate_content_requests_per_minute`.- Nhấp vào **Edit Quotas** và cung cấp giải thích ngắn gọn về trường hợp sử dụng của bạn. Các yêu cầu thường được phê duyệt trong vòng 24–48 giờ.## Xác minh: Đã khắc phục xong chưa?Đừng chỉ giả định rằng lỗi đã biến mất. Hãy theo dõi **API & Services Dashboard** trong Google Cloud. Một dự án hoạt động tốt sẽ hiển thị khối lượng lớn phản hồi 200 OK và chỉ một phần rất nhỏ lỗi 4xx. Nếu bạn thấy độ trễ trung bình tăng lên, điều đó có nghĩa là logic backoff của bạn đang hoạt động—nó đang trì hoãn các yêu cầu thành công trong thời gian lưu lượng truy cập cao thay vì để chúng thất bại.

Related Error Notes