- vừa được xem lúc

Một trick nhỏ giúp tăng số lượng request có thể gửi đến Gemini API

0 0 1

Người đăng: Thành Sơn

Theo Viblo Asia

Chào các bạn! Hôm nay mình muốn chia sẻ một trick nhỏ mà khá hiệu quả để tăng số lượng request có thể gửi đến Gemini API. (Hy vọng mấy bác Google không đọc được bài này 😄 )

Vấn Đề với Rate Limit

Khi làm việc với Gemini API, chắc hẳn nhiều bạn đã từng gặp thông báo rate limit kiểu như:

"Rate limit exceeded. Please try again later." 😅

Rate limit của Gemini API khá... khiêm tốn. Đang chạy ngon lành thì bị block, đợi một hồi mới chạy tiếp được. Với các ứng dụng production, đây là vấn đề khá đau đầu.

Giải Pháp: Multiple API Keys Handler

Sau vài lần "vật lộn" với rate limit, mình đã nghĩ ra một giải pháp đơn giản: Tại sao không dùng nhiều API key cùng lúc và sử dụng nhiều model của gemini?

Triển khai

1. Cài đặt

pip install google-generativeai
export GEMINI_API_KEYS=["AIza...1","AIza..2", ...]

Download file từ gemini_handler.py trên github: sorry anh em vì mình chưa viết thành pip library do "lười"

2. Code mẫu đầy đủ

from gemini_handler import GeminiHandler, GenerationConfig, Strategy, KeyRotationStrategy
import os # Configure generation parameters
generation_config = GenerationConfig( temperature=0.7, # Độ sáng tạo thấp để output ổn định top_p=0.95, # Nucleus sampling top_k=40, # Số tokens được consider max_output_tokens=8192, response_mime_type="text/plain"
) # Get API keys từ environment
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à chuyên gia chém gió, nhiệm vụ của bạn là tư vấn chủ đề tình cảm giúp tôi.", generation_config=generation_config ) # Generate content
response = handler.generate_content( prompt="Làm sao tán được nàng?", model_name="gemini-exp-1206", return_stats=True # Get key usage stats
) # Process response
if response['success']: print(response['text'])
else: print(f"Generation failed: {response['error']}") # Monitor usage
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

  • Generation Config: Cấu hình các parameters cho model generation như temperature, top_p...

  • Content Strategy:

content_strategy=Strategy.FALLBACK # hoặc ROUND_ROBIN, RETRY
  1. ROUND_ROBIN: Xoay vòng qua các models để phân phối tải
  2. FALLBACK: Tự động chuyển model khác khi gặp lỗi
  3. RETRY: Thử lại với cùng model, sử dụng exponential backoff
  • Key Rotation Strategy:
key_strategy=KeyRotationStrategy.SMART_COOLDOWN # hoặc SEQUENTIAL, ROUND_ROBIN, LEAST_USED
  1. SEQUENTIAL: Sử dụng key theo thứ tự, đơn giản
  2. ROUND_ROBIN: Phân phối đều request cho tất cả keys
  3. LEAST_USED: Ưu tiên key ít được sử dụng
  4. SMART_COOLDOWN: Quản lý thông minh dựa trên cooldown time và failure rate

Recommendation: Kết hợp FALLBACK với SMART_COOLDOWN.

handler = GeminiHandler( api_keys=api_keys, content_strategy=Strategy.FALLBACK, key_strategy=KeyRotationStrategy.SMART_COOLDOWN )
  • Monitoring: Track usage và performance của từng key

Lợi ích

  1. Tối ưu Usage

    • Tăng throughput với multiple keys
    • Giảm downtime nhờ fallback
    • Quản lý chi phí hiệu quả
  2. Robust Error Handling

    • Auto retry khi fail
    • Fallback thông minh
    • Rate limit detection
  3. Easy Monitoring

    • Track từng key
    • Measure performance
    • Early warning system

Kết luận

Rate Limit Handler giúp bạn tối ưu hóa việc sử dụng Gemini API trong production. Thư viện cung cấp giải pháp toàn diện cho các vấn đề phổ biến khi làm việc với API.

Source code được open source trên GitHub. Contributions are welcome!

Happy coding! 🚀

Bình luận

Bài viết tương tự

- vừa được xem lúc

Các thuật toán cơ bản trong AI - Phân biệt Best First Search và Uniform Cost Search (UCS)

Nếu bạn từng đọc các thuật toán trong AI (Artificial Intelligence - Trí tuệ nhân tạo), rất có thể bạn từng nghe qua về các thuật toán tìm kiếm cơ bản: UCS (thuộc chiến lược tìm kiếm mù) và Best First Search (thuộc chiến lược tìm kiếm kinh nghiệm). Khác nhau rõ từ khâu phân loại rồi, thế nhưng hai th

0 0 170

- vừa được xem lúc

Con đường AI của tôi

Gần đây, khá nhiều bạn nhắn tin hỏi mình những câu hỏi đại loại như: có nên học AI, bắt đầu học AI như nào, làm sao tự học cho đúng, cho nhanh, học không bị nản, lộ trình học AI như nào... Sau nhiều lần trả lời, mình nghĩ rằng nên viết hẳn một bài để trả lời chi tiết hơn, cũng như để các bạn sau này

0 0 159

- vừa được xem lúc

[ChatterBot] Thư viện chatbot hay ho dành cho Python| phần 3

Trong bài trước mình đã trình bày về Training data cho chatbot và tiền xử lý dữ liệu. Trong phần này sẽ trình bày với các bạn về logic adapter.

0 0 62

- vừa được xem lúc

[Deep Learning] Kỹ thuật Dropout (Bỏ học) trong Deep Learning

. Trong bài viết này, mình xin phép giới thiệu về Dropout (Bỏ học) trong mạng Neural, sau đó là mình sẽ có 1 số đoạn code để xem Dropout ảnh hưởng thế nào đến hiệu suất của mạng Neural. 1.1. Dropout trong mạng Neural là gì.

0 0 69

- vừa được xem lúc

Kỹ thuật Dropout (Bỏ học) trong Deep Learning

Trong bài viết này, mình xin phép giới thiệu về Dropout (Bỏ học) trong mạng Neural, sau đó là mình sẽ có 1 số đoạn code để xem Dropout ảnh hưởng thế nào đến hiệu suất của mạng Neural. 1.

0 1 82

- vừa được xem lúc

Blockchain dưới con mắt làng Vũ Đại 4.0

Mở bài. Hey nhô các bạn, lại là mình đây .

0 0 51