Mình bắt đầu dùng Gemini API từ cuối năm 2023, lúc đó chủ yếu để thử nghiệm so sánh với GPT-4. Điều khiến mình ấn tượng không phải là chất lượng văn bản — mà là khả năng xử lý đa phương thức (multimodal) ngay từ đầu: gửi ảnh, PDF, thậm chí video lên và hỏi thẳng. Trong khi các API khác tốn thêm chi phí riêng cho vision, Gemini gộp tất cả vào một endpoint duy nhất.
Project cần phân tích ảnh, đọc PDF, hay xử lý nhiều loại nội dung? Gemini đáng thử — nhất là khi free tier của nó rộng rãi hơn hầu hết đối thủ.
Tại sao Gemini và khi nào nên dùng?
Câu hỏi thực tế: khi nào nên chọn Gemini thay vì OpenAI hay các provider khác?
Vấn đề với nhiều developer là chi phí leo thang nhanh khi scale. GPT-4o tốn khoảng $5/1M input tokens. Gemini 2.0 Flash miễn phí đến 15 requests/phút với context window 1M token — con số này quá hào phóng cho project thử nghiệm hoặc startup nhỏ.
Những điểm mạnh cụ thể của Gemini:
- Context window khổng lồ: Gemini 1.5 Pro hỗ trợ 1 triệu token — tương đương ~700,000 từ tiếng Anh, gửi cả file log mà không cần chunking
- Multimodal native: Text, image, audio, video, PDF trong cùng một API call
- Grounding với Google Search: Tính năng độc quyền, kết quả có thể được verify bằng tìm kiếm thực
- Free tier thực sự dùng được: 1,500 requests/ngày với Gemini 2.0 Flash, không cần credit card
Cài đặt và Lấy API Key
Lấy API key từ Google AI Studio
Truy cập aistudio.google.com, đăng nhập bằng Google account, chọn “Get API key” → “Create API key”. Key có dạng AIzaSy...
Lưu ý: API key từ AI Studio chỉ dùng cho Google AI trực tiếp, không qua Vertex. Dự án lớn hơn cần SLA? Migration sang Vertex AI là bước tiếp theo — setup phức tạp hơn, nhưng đổi lại được SLA và quyền kiểm soát tốt hơn nhiều.
Cài thư viện và lưu credentials
pip install google-genai
Lưu API key vào environment variable, đừng hardcode vào source code:
export GEMINI_API_KEY="AIzaSy..."
Hoặc tạo file .env và dùng python-dotenv:
# .env
GEMINI_API_KEY=AIzaSy...
Cấu hình Chi Tiết và Sử Dụng
Request đầu tiên
import os
from google import genai
client = genai.Client(api_key=os.environ.get("GEMINI_API_KEY"))
response = client.models.generate_content(
model="gemini-2.0-flash",
contents="Giải thích Docker Compose bằng ngôn ngữ đơn giản"
)
print(response.text)
Kết quả lấy ngay qua response.text. Không cần unpack thêm gì — so với anthropic hay openai SDK, cú pháp gọn hơn đáng kể.
Multi-turn chat — giữ ngữ cảnh hội thoại
chat = client.chats.create(model="gemini-2.0-flash")
# Lượt 1
response = chat.send_message("Mình đang học Python, bắt đầu từ đâu?")
print("AI:", response.text)
# Lượt 2 — model nhớ context từ lượt 1
response = chat.send_message("Cho mình một ví dụ về list comprehension")
print("AI:", response.text)
Xử lý ảnh — Multimodal
Tính năng mình dùng nhiều nhất. Phân tích screenshot lỗi, đọc diagram kiến trúc hệ thống, trích xuất text từ ảnh chụp màn hình — tất cả trong cùng một API call:
from pathlib import Path
image_data = Path("screenshot.png").read_bytes()
response = client.models.generate_content(
model="gemini-2.0-flash",
contents=[
{
"inline_data": {
"mime_type": "image/png",
"data": image_data
}
},
"Đây là lỗi gì? Cách fix như thế nào?"
]
)
print(response.text)
Structured Output — Enforce JSON schema
Thay vì parse text thủ công (và xử lý edge case mãi không xong), Gemini hỗ trợ enforce JSON schema qua response_schema. Cực kỳ hữu ích khi build pipeline tự động:
from google.genai import types
import json
response = client.models.generate_content(
model="gemini-2.0-flash",
contents="Liệt kê 3 lệnh Linux hay dùng nhất cho sysadmin",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema={
"type": "array",
"items": {
"type": "object",
"properties": {
"command": {"type": "string"},
"description": {"type": "string"},
"example": {"type": "string"}
}
}
}
)
)
data = json.loads(response.text)
for item in data:
print(f"$ {item['command']}: {item['description']}")
Generation config và Safety settings
Mặc định Gemini có safety filter khá chặt — đôi khi block nội dung kỹ thuật hoàn toàn hợp lệ như hướng dẫn penetration testing hay security research. Điều chỉnh như sau:
response = client.models.generate_content(
model="gemini-2.0-flash",
contents=prompt,
config=types.GenerateContentConfig(
temperature=0.7, # 0.0 = deterministic, 2.0 = creative
top_p=0.95,
max_output_tokens=8192,
safety_settings=[
types.SafetySetting(
category="HARM_CATEGORY_DANGEROUS_CONTENT",
threshold="BLOCK_ONLY_HIGH"
)
]
)
)
Streaming response
Response dài mà đợi toàn bộ rồi mới hiện ra thì UX rất tệ. Streaming giải quyết điều này — user thấy text xuất hiện từng phần, giống ChatGPT:
for chunk in client.models.generate_content_stream(
model="gemini-2.0-flash",
contents="Viết hướng dẫn cài đặt Nginx trên Ubuntu"
):
print(chunk.text, end="", flush=True)
Kiểm tra và Monitoring
Theo dõi token usage
Mỗi response Gemini trả về metadata về token đã dùng — quan trọng để kiểm soát chi phí ngay cả khi đang dùng free tier:
usage = response.usage_metadata
print(f"Input tokens: {usage.prompt_token_count}")
print(f"Output tokens: {usage.candidates_token_count}")
print(f"Total tokens: {usage.total_token_count}")
Error handling với retry và exponential backoff
Trong production, bắt đúng exception type giúp debug nhanh hơn nhiều:
from google.genai import errors
import time
def safe_generate(client, prompt, retries=3):
for attempt in range(retries):
try:
response = client.models.generate_content(
model="gemini-2.0-flash",
contents=prompt
)
return response.text
except errors.ClientError as e:
if "RATE_LIMIT_EXCEEDED" in str(e):
wait = 2 ** attempt # exponential backoff
print(f"Rate limit, chờ {wait}s...")
time.sleep(wait)
elif "INVALID_API_KEY" in str(e):
raise # Lỗi này không retry được
else:
raise
except errors.ServerError as e:
print(f"Lỗi server Gemini (attempt {attempt+1}): {e}")
time.sleep(2)
return None
Quota và rate limit cần biết
Free tier Gemini 2.0 Flash có 15 RPM, 1.500 RPD và 1M TPM. Đủ dùng thoải mái cho dự án cá nhân hoặc prototype. Muốn kiểm tra quota đang dùng, vào console.cloud.google.com → APIs & Services → Generative Language API → Quotas.
Khi cần scale lên, Vertex AI Gemini cho phép tăng quota theo nhu cầu. Nhưng phải setup Google Cloud project và billing account — phức tạp hơn AI Studio khá nhiều.
Mình đã dùng Gemini API cho một tool nội bộ phân tích log tự động — gửi chunk log lên và hỏi “có gì bất thường không”. Context window 1M token của Gemini 1.5 Pro là lý do mình chọn nó thay vì các model khác: không cần chia nhỏ log rồi merge kết quả, gửi thẳng cả file là xong. Với những use case cần xử lý lượng text lớn, đây là lợi thế khó bỏ qua.

