Xin chào, tôi là một kỹ sư đã làm việc với các mô hình ngôn ngữ lớn (LLM) được hơn 3 năm. Trong bài viết này, tôi sẽ chia sẻ kinh nghiệm thực chiến về cách tối ưu hóa prompt cho Gemini, đặc biệt là kỹ thuật đa phương thức (multi-modal) và tư duy liên kết (Chain of Thought). Bạn sẽ thấy mọi thứ đơn giản hơn rất nhiều so với những gì bạn tưởng tượng.

Gemini Là Gì Và Tại Sao Nên Dùng?

Gemini là mô hình AI của Google, nổi bật với khả năng xử lý đồng thời văn bản, hình ảnh, âm thanh và video. So với các dịch vụ khác:

Với tỷ giá ¥1 = $1 khi sử dụng HolySheep AI, chi phí thực tế còn giảm đến 85%. Thời gian phản hồi dưới 50ms, hoàn hảo cho ứng dụng production.

Thiết Lập Môi Trường Cơ Bản

Trước khi bắt đầu, bạn cần cài đặt thư viện và lấy API key. Đăng ký tài khoản tại HolySheep AI để nhận tín dụng miễn phí ngay khi bắt đầu.

# Cài đặt thư viện cần thiết
pip install openai requests python-dotenv pillow

Tạo file .env để lưu API key

echo "HOLYSHEEP_API_KEY=YOUR_HOLYSHEEP_API_KEY" > .env
# Cấu hình client kết nối HolySheep API
import os
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv()

client = OpenAI(
    api_key=os.getenv("HOLYSHEEP_API_KEY"),
    base_url="https://api.holysheep.ai/v1"  # LUÔN dùng base_url của HolySheep
)

Kiểm tra kết nối thành công

models = client.models.list() print("Kết nối thành công!") print(f"Models available: {[m.id for m in models.data[:5]]}")

Kỹ Thuật 1: Định Dạng Đa Phương Thức (Multi-Modal Input)

Điểm mạnh của Gemini 2.5 Flash là khả năng xử lý nhiều loại dữ liệu cùng lúc. Dưới đây là cách gửi ảnh + văn bản + file trong một request duy nhất.

Gửi Ảnh Với Chú Thích

import base64
from PIL import Image
import io

Đọc và mã hóa ảnh thành base64

def encode_image(image_path): with Image.open(image_path) as img: # Resize ảnh để giảm kích thước (tiết kiệm token) img = img.resize((1024, 1024)) buffer = io.BytesIO() img.save(buffer, format="PNG") return base64.b64encode(buffer.getvalue()).decode()

Tạo message với định dạng multi-modal

image_data = encode_image("screenshot.png") response = client.chat.completions.create( model="gemini-2.0-flash-exp", messages=[ { "role": "user", "content": [ { "type": "text", "text": "Phân tích ảnh chụp màn hình này và cho biết: 1) Đây là giao diện của ứng dụng nào? 2) Có vấn đề gì cần khắc phục không?" }, { "type": "image_url", "image_url": { "url": f"data:image/png;base64,{image_data}" } } ] } ], max_tokens=1000, temperature=0.7 ) print(f"Kết quả: {response.choices[0].message.content}") print(f"Tokens sử dụng: {response.usage.total_tokens}")

Gửi Nhiều Ảnh Cùng Lúc

# Xử lý nhiều ảnh cho so sánh hoặc phân tích tổng hợp
images = ["chart1.png", "chart2.png", "chart3.png"]

content_parts = [
    {
        "type": "text",
        "text": "So sánh 3 biểu đồ doanh thu năm 2024 này và tổng hợp xu hướng chung."
    }
]

Thêm từng ảnh vào nội dung

for img_path in images: img_base64 = encode_image(img_path) content_parts.append({ "type": "image_url", "image_url": { "url": f"data:image/png;base64,{img_base64}" } }) response = client.chat.completions.create( model="gemini-2.0-flash-exp", messages=[{"role": "user", "content": content_parts}], max_tokens=1500 ) print(response.choices[0].message.content)

Kỹ Thuật 2: Chain of Thought (Tư Duy Liên Kết)

Chain of Thought (CoT) là kỹ thuật yêu cầu AI hiển thị các bước suy nghĩ trước khi đưa ra kết luận cuối cùng. Điều này giúp:

# Prompt với Chain of Thought tích hợp
cot_prompt = """Hãy giải bài toán sau bằng cách HIỂN THỊ TỪNG BƯỚC suy nghĩ:

Bài toán: Một cửa hàng bán 3 loại sản phẩm:
- Áo thun: 150.000đ/cái, bán được 20 cái
- Quần jeans: 350.000đ/cái, bán được 15 cái  
- Giày: 800.000đ/đôi, bán được 8 đôi

Tính tổng doanh thu và lợi nhuận biết chi phí chiếm 40% doanh thu.

YÊU CẦU:
1. Hiển thị từng bước tính toán
2. Viết rõ công thức áp dụng
3. Đưa ra kết luận cuối cùng"""

response = client.chat.completions.create(
    model="gemini-2.0-flash-exp",
    messages=[
        {
            "role": "system",
            "content": "Bạn là một chuyên gia toán học. LUÔN hiển thị từng bước reasoning trước khi đưa ra đáp án cuối cùng."
        },
        {"role": "user", "content": cot_prompt}
    ],
    max_tokens=800,
    temperature=0.3  # Giảm temperature cho kết quả nhất quán hơn
)

print(response.choices[0].message.content)

Few-Shot Chain of Thought

# Cung cấp ví dụ mẫu để AI bắt chước pattern
few_shot_cot_prompt = """
Ví dụ mẫu:
Câu hỏi: 5 + 3 × 2 = ?
Suy nghĩ: 
- Theo thứ tự phép tính, nhân trước cộng
- 3 × 2 = 6
- 5 + 6 = 11
Đáp án: 11

Bây giờ hãy giải:
Câu hỏi: Một đoàn du lịch có 45 người, chia đều vào 5 xe bus. Mỗi xe còn trống 3 ghế. Hỏi mỗi xe có bao nhiêu ghế?

Suy nghĩ:
"""

response = client.chat.completions.create(
    model="gemini-2.0-flash-exp",
    messages=[{"role": "user", "content": few_shot_cot_prompt}],
    max_tokens=500,
    temperature=0.2
)

print(response.choices[0].message.content)

Kỹ Thuật 3: Kết Hợp Multi-Modal + Chain of Thought

Đây là cách tôi thường dùng trong thực tế — phân tích tài liệu phức tạp kèm theo hình ảnh với quy trình suy nghĩ rõ ràng.

def analyze_invoice_with_cot(image_path):
    """Phân tích hóa đơn với Chain of Thought"""
    
    image_base64 = encode_image(image_path)
    
    combined_prompt = """PHÂN TÍCH HÓA ĐƠN VÀ TÍNH TOÁN

Hãy thực hiện theo các bước sau:

BƯỚC 1 - ĐỌC THÔNG TIN:
- Xác định tên công ty, địa chỉ
- Ghi nhận ngày tháng, số hóa đơn

BƯỚC 2 - LIỆT KÊ SẢN PHẨM:
- Đọc từng dòng sản phẩm
- Ghi số lượng và đơn giá

BƯỚC 3 - TÍNH TỔNG:
- Nhân số lượng × đơn giá cho từng sản phẩm
- Cộng tổng phụ
- Tính thuế VAT 10%
- Tính tổng cộng cuối cùng

BƯỚC 4 - KIỂM TRA:
- So sánh kết quả tính được với số trên hóa đơn
- Báo cáo nếu có sai lệch"""

    response = client.chat.completions.create(
        model="gemini-2.0-flash-exp",
        messages=[{
            "role": "user",
            "content": [
                {"type": "text", "text": combined_prompt},
                {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{image_base64}"}}
            ]
        }],
        max_tokens=1200,
        temperature=0.1
    )
    
    return response.choices[0].message.content

Sử dụng

result = analyze_invoice_with_cot("invoice.png") print(result)

Template Prompt Cho Các Tình Huống Thực Tế

1. Phân Tích Dữ Liệu Báo Cáo

ANALYSIS_TEMPLATE = """
Bạn là chuyên gia phân tích dữ liệu. Nhiệm vụ: {task}

Dữ liệu đính kèm: {description}

YÊU CẦU XỬ LÝ:
1. Đọc và tổng hợp thông tin từ dữ liệu
2. Xác định các chỉ số quan trọng
3. So sánh với chuẩn/mục tiêu đề ra
4. Đưa ra nhận định và khuyến nghị

FORMAT TRẢ LỜI:

Tóm tắt (100 từ)

Chi tiết phân tích

Điểm cần lưu ý

Khuyến nghị hành động

"""

2. Code Review Với Giải Thích

CODE_REVIEW_TEMPLATE = """

Vai trò: Senior Developer với 10 năm kinh nghiệm

Nhiệm vụ: Review code và giải thích chi tiết

CODE CẦN REVIEW: ```{language} {code_snippet} ``` YÊU CẦU: 1. ĐÁNH GIÁ TỔNG QUAN: Code có đúng chức năng không? 2. VẤN ĐỀ BẢO MẬT: Có lỗ hổng nào không? 3. PERFORMANCE: Có cách nào tối ưu hơn? 4. BEST PRACTICES: Có tuân thủ coding standards? 5. GIẢI THÍCH: Giải thích từng đoạn phức tạp Với mỗi vấn đề tìm được, đề xuất code cải thiện. """

So Sánh Chi Phí Thực Tế

Tôi đã thử nghiệm cùng một prompt phân tích trên nhiều nền tảng. Dưới đây là chi phí thực tế (tính theo $2.50/1M tokens cho Gemini 2.5 Flash):

Với tín dụng miễn phí khi đăng ký tại HolySheep AI, bạn có thể thử nghiệm thoải mái trước khi quyết định.

Lỗi Thường Gặp Và Cách Khắc Phục

1. Lỗi "Invalid API Key" Hoặc Không Kết Nối Được

Mã lỗi: 401 Unauthorized hoặc AuthenticationError

# ❌ SAI - Dùng base_url của OpenAI
client = OpenAI(
    api_key="YOUR_HOLYSHEEP_API_KEY",
    base_url="https://api.openai.com/v1"  # SAI RỒI!
)

✅ ĐÚNG - Dùng base_url của HolySheep

client = OpenAI( api_key="YOUR_HOLYSHEEP_API_KEY", base_url="https://api.holysheep.ai/v1" # ĐÚNG RỒI! )

Kiểm tra lại key

print(f"API Key đang dùng: {os.getenv('HOLYSHEEP_API_KEY')[:10]}...")

Cách khắc phục: Đảm bảo bạn sao chép đúng API key từ HolySheep Dashboard. Key phải bắt đầu bằng prefix đúng của họ.

2. Lỗi "Image Too Large" Hoặc Quá Nhiều Tokens

Mã lỗi: 413 Payload Too Large hoặc 400 Bad Request

# ❌ SAI - Gửi ảnh gốc không resize
with open("huge_image.jpg", "rb") as f:
    img_base64 = base64.b64encode(f.read()).decode()  # Có thể > 10MB!

✅ ĐÚNG - Resize ảnh trước khi gửi

from PIL import Image import io def optimize_image(image_path, max_size=1024): with Image.open(image_path) as img: # Chuyển sang RGB nếu cần if img.mode in ('RGBA', 'P'): img = img.convert('RGB') # Resize giữ tỷ lệ img.thumbnail((max_size, max_size), Image.Resampling.LANCZOS) # Nén JPEG để giảm kích thước buffer = io.BytesIO() img.save(buffer, format="JPEG", quality=85, optimize=True) return base64.b64encode(buffer.getvalue()).decode()

Sử dụng

img_base64 = optimize_image("huge_image.jpg") print(f"Kích thước: {len(img_base64) / 1024:.1f} KB")

Cách khắc phục: Luôn resize ảnh về kích thước tối đa 1024x1024 và nén về JPEG. Một ảnh 4K có thể tiêu tốn 500K+ tokens!

3. Lỗi "Rate Limit Exceeded" Khi Gửi Request Quá Nhanh

Mã lỗi: 429 Too Many Requests

# ❌ SAI - Gửi request liên tục không delay
for item in large_list:
    response = client.chat.completions.create(...)  # Có thể bị rate limit!

✅ ĐÚNG - Thêm retry logic với exponential backoff

import time import requests def safe_api_call(messages, max_retries=3): for attempt in range(max_retries): try: response = client.chat.completions.create( model="gemini-2.0-flash-exp", messages=messages ) return response except Exception as e: if "429" in str(e) and attempt < max_retries - 1: wait_time = 2 ** attempt # 1s, 2s, 4s... print(f"Rate limited. Chờ {wait_time}s...") time.sleep(wait_time) else: raise return None

Sử dụng cho batch processing

for idx, item in enumerate(items): result = safe_api_call(item) print(f"Hoàn thành {idx+1}/{len(items)}") time.sleep(0.5) # Thêm delay nhỏ giữa các request

Cách khắc phục: Thêm đoạn code retry với exponential backoff. HolySheep có rate limit riêng — kiểm tra dashboard để biết giới hạn cụ thể của gói subscription.

4. Lỗi "Invalid Content Format" Với Multi-Modal

Mã lỗi: 400 Bad Request khi gửi image

# ❌ SAI - Format image_url không đúng
{
    "type": "image_url",
    "url": "screenshot.png"  # SAI! Thiếu prefix data URI
}

✅ ĐÚNG - Format đầy đủ với data URI

{ "type": "image_url", "image_url": { "url": "data:image/png;base64,iVBORw0KGgoAAAANS..." # Đầy đủ! } }

Hoặc dùng URL trực tiếp (nếu có)

{ "type": "image_url", "image_url": { "url": "https://example.com/image.png" # HTTPS URL cũng được! } }

Kiểm tra format trước khi gửi

def validate_message_content(content): for part in content: if part.get("type") == "image_url": url = part.get("image_url", {}).get("url", "") if not url.startswith(("data:", "http://", "https://")): raise ValueError(f"Image URL không hợp lệ: {url[:50]}") return True

Test

validate_message_content(content_parts)

Cách khắc phục: Luôn đảm bảo image_url có prefix đúng (data:image/png;base64, hoặc https://). Mất prefix sẽ gây lỗi ngay lập tức.

Mẹo Tối Ưu Hóa Prompt (Từ Kinh Nghiệm Thực Chiến)

Qua hơn 10,000 requests với Gemini trên HolySheep, đây là những gì tôi rút ra được:

Kết Luận

Việc tối ưu prompt cho Gemini không khó như bạn nghĩ. Với định dạng đa phương thức, bạn có thể xử lý ảnh, tài liệu trực tiếp. Với Chain of Thought, kết quả trở nên đáng tin cậy và dễ debug.

Điểm mấu chốt là thực hành liên tục — mỗi ngày tôi vẫn thử nghiệm prompt mới và học được điều mới. HolySheheep AI với chi phí cực thấp ($2.50/1M tokens) và thời gian phản hồi dưới 50ms là lựa chọn hoàn hảo để bạn thử nghiệm không giới hạn.

👉 Đăng ký HolySheep AI — nhận tín dụng miễn phí khi đăng ký