Mẹo Tối Ưu Hóa Số Lượng Request Gửi Đến Gemini API: Giải Quyết Vấn Đề Rate Limit
Chào các bạn! Hôm nay, mình sẽ chia sẻ một mẹo rất đơn giản nhưng hiệu quả trong việc tăng số lượng request mà bạn có thể gửi đến Gemini API. Với nhiều bạn, thông báo lỗi với rate limit như: "Rate limit exceeded. Please try again later." có lẽ đã trở thành nỗi ám ảnh trong quá trình phát triển ứng dụng. Hãy cùng khám phá cách vượt qua rào cản này nhé!
Vấn Đề với Rate Limit của Gemini API
Rate limit của Gemini API thường khiến người dùng cảm thấy khó chịu, đặc biệt khi thực hiện các tác vụ quan trọng. Bạn có thể đang chạy một ứng dụng ở môi trường production và bỗng dưng bị block sau khi gửi quá nhiều request. Điều này không chỉ gây gián đoạn mà còn ảnh hưởng đến trải nghiệm người dùng.
Giải Pháp Hiệu Quả: Sử Dụng Nhiều API Key
Sau một khoảng thời gian “vật lộn” với giới hạn này, mình đã nghĩ ra một giải pháp hiệu quả: sử dụng nhiều API key cùng lúc và áp dụng nhiều mô hình khác nhau của Gemini.
Triển Khai Giải Pháp
1. Cài Đặt Môi Trường
Bạn cần cài đặt thư viện Google Generative API và cấu hình các API keys:
bash
pip install google-generativeai
export GEMINI_API_KEYS=["AIza...1","AIza..2", ...]
Sau đó, tải file gemini_handler.py
từ GitHub. Nhắc rằng mình chưa viết thành thư viện pip do thiếu thời gian.
2. Code Mẫu Đầy Đủ
python
from gemini_handler import GeminiHandler, GenerationConfig, Strategy, KeyRotationStrategy
import os
# Cấu hình tham số generation
generation_config = GenerationConfig(
temperature=0.7,
top_p=0.95,
top_k=40,
max_output_tokens=8192,
response_mime_type="text/plain"
)
# Lấy API keys từ môi trường
api_keys = os.getenv('GEMINI_API_KEYS')
if not api_keys:
raise ValueError("GEMINI_API_KEYS environment variable is not set")
# Khởi tạo handler
handler = GeminiHandler(
api_keys=api_keys,
content_strategy=Strategy.FALLBACK,
key_strategy=KeyRotationStrategy.SMART_COOLDOWN,
system_instruction="Bạn là một chuyên gia chém gió, nhiệm vụ của bạn là tư vấn về tình cảm.",
generation_config=generation_config
)
# Tạo content
response = handler.generate_content(
prompt="Làm sao để tán được nàng?",
model_name="gemini-exp-1206",
return_stats=True
)
# Xử lý phản hồi
if response['success']:
print(response['text'])
else:
print(f"Generation failed: {response['error']}")
# Giám sát sử dụng
stats = handler.get_key_stats()
for key_index, key_stats in stats.items():
print(f"\nKey {key_index}:")
print(f" Uses: {key_stats['uses']}")
print(f" Failures: {key_stats['failures']}")
3. Giải Thích Code
- Cấu hình Generation: Điều chỉnh các tham số như temperature, top_p, và max_output_tokens giúp cải thiện chất lượng output.
- Chiến Lược Nội Dung: Có thể chọn giữa
Strategy.FALLBACK
,ROUND_ROBIN
hoặcRETRY
để đảm bảo xử lý tốt nhất cho các request. - Chiến Lược Câu Lệnh Key: Áp dụng
KeyRotationStrategy.SMART_COOLDOWN
để tối ưu hóa việc sử dụng các API keys.
Lợi Ích Khi Áp Dụng Giải Pháp
- Tối Ưu Hiệu Suất: Tăng số lượng request mà không bị giới hạn.
- Quản Lý Lỗi Tốt Hơn: Tự động retry và fallback khi gặp lỗi xảy ra.
- Giám Sát Hiệu Quả: Theo dõi hiệu suất từng key giúp bạn có cái nhìn tổng quan về tình trạng sử dụng API.
Kết Luận
Bằng cách sử dụng một handler cho rate limit, bạn có thể tối ưu hoá việc sử dụng Gemini API trong môi trường sản xuất. Giải pháp này giúp tăng hiệu suất làm việc đồng thời giảm thiểu thời gian downtime. Source code đã được mở và các bạn có thể tìm thấy nó trên GitHub. Mọi đóng góp đều được hoan nghênh!
Chúc bạn lập trình vui vẻ! 🚀
source: viblo