← Quay lại Blog
Công nghệ & AI 13/08/2026 · 10 phút đọc

Prompt Optimization: Tối Ưu Chi Phí Và Hiệu Suất LLM

Biểu đồ minh họa các kỹ thuật tối ưu prompt giảm chi phí và tăng hiệu suất LLM

Prompt optimization là quá trình tinh chỉnh cách bạn giao tiếp với LLM để giảm chi phí, tăng tốc độ phản hồi và cải thiện chất lượng output. Với chi phí API LLM tính theo token và latency ảnh hưởng trực tiếp đến trải nghiệm người dùng, tối ưu prompt là chiến lược kinh doanh quan trọng khi scale ứng dụng AI — không phải tính năng “nice-to-have”.

Tại Sao Cần Tối Ưu Prompt?

Khi triển khai ứng dụng LLM ở quy mô thực tế, bạn sẽ đối mặt với ba thách thức chính:

Chi phí token tăng nhanh theo traffic. Một ứng dụng chatbot với 10,000 conversations/ngày, trung bình 2,000 tokens/conversation (input + output), sử dụng GPT-4 có thể tốn $600-1,000/tháng chỉ riêng API cost. Nếu không tối ưu, con số này có thể nhân đôi hoặc gấp ba khi traffic tăng.

Latency cao làm giảm trải nghiệm. Prompt dài (>4,000 tokens) có thể khiến thời gian phản hồi tăng từ 2-3 giây lên 8-12 giây, đặc biệt với các model lớn. Người dùng thường chờ tối đa 3-5 giây trước khi rời bỏ ứng dụng.

Chất lượng output không ổn định. Prompt quá phức tạp, chứa nhiễu (redundant instructions, contradictory examples) dễ khiến model “lạc hướng” và cho kết quả không nhất quán giữa các lần chạy.

Tối ưu prompt giải quyết cả ba vấn đề cùng lúc. Giảm token count → giảm chi phí và latency. Loại bỏ nhiễu → cải thiện độ ổn định. Đơn giản mà hiệu quả.

Làm Thế Nào Để Đo Lường Hiệu Quả Tối Ưu?

Trước khi tối ưu bất kỳ prompt nào, thiết lập baseline với 4 chỉ số:

  1. Input token count — đếm số token của system message + user prompt + context. Dùng tokenizer của model (tiktoken cho OpenAI, anthropic-tokenizer cho Claude).
  2. Output token count — số token trong response. Kiểm soát bằng max_tokens parameter.
  3. Latency — thời gian từ khi gọi API đến khi nhận response đầy đủ (hoặc first token nếu dùng streaming).
  4. Quality score — đánh giá chủ quan hoặc dùng automated eval (so sánh với golden dataset, hoặc dùng LLM-as-judge).

Công thức tối ưu thành công: giảm được ≥20% chi phí/latency TRONG KHI quality score không giảm quá 5%.

Đó là mức đánh đổi chấp nhận được.

Ví dụ baseline:

Trước tối ưu:
- Input: 1,850 tokens
- Output: 420 tokens
- Latency: 6.2s
- Quality: 8.5/10
- Cost/request: $0.042 (GPT-4)

Sau tối ưu:
- Input: 980 tokens (-47%)
- Output: 380 tokens (-10%)
- Latency: 3.1s (-50%)
- Quality: 8.3/10 (-2.4%)
- Cost/request: $0.022 (-48%)
→ PASS (giảm chi phí 48%, quality chỉ giảm 2.4%)

7 Kỹ Thuật Tối Ưu Prompt Hiệu Quả

1. Prompt Caching — Giảm 50-90% Chi Phí Cho Context Lặp Lại

Nguyên lý: Anthropic Claude và một số provider hỗ trợ prompt caching — lưu lại phần đầu của prompt (system message, static context) để tái sử dụng giữa các request, chỉ tính phí đầy đủ cho lần đầu, các lần sau chỉ tính phí cache hit (rẻ hơn 10-90%).

Khi nào dùng:

  • System message dài (>500 tokens) giống nhau giữa các user request
  • Context tĩnh như documentation, knowledge base chunks
  • Few-shot examples cố định

Cách implement với Claude:

# Anthropic Claude prompt caching
response = client.messages.create(
    model="claude-3-5-sonnet-20241022",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": "Bạn là chuyên gia tư vấn tài chính...",  # Static system prompt
            "cache_control": {"type": "ephemeral"}  # Cache block này
        },
        {
            "type": "text",
            "text": f"Ngày hôm nay: {today}. User ID: {user_id}"  # Dynamic context (không cache)
        }
    ],
    messages=[{"role": "user", "content": user_query}]
)

Impact thực tế: Với system message 2,000 tokens, 1,000 requests/ngày:

  • Không cache: 2,000 tokens × 1,000 = 2M input tokens/ngày
  • Có cache (90% cache hit): 2,000 tokens × 100 (cache miss) + 200 tokens × 900 (cache hit phí 10%) = 380K tokens/ngày
  • Tiết kiệm: 81% chi phí input.

2. Token Reduction — Loại Bỏ Token Thừa

Nguyên lý: Mỗi token đều tốn tiền. Rút gọn prompt bằng cách loại bỏ từ dư thừa, viết ngắn gọn hơn mà vẫn giữ ý nghĩa.

Chiến thuật cụ thể:

a) Rút gọn system message:

❌ Trước (67 tokens):
"You are a highly skilled customer support agent working for our company. 
Your primary responsibility is to provide helpful, accurate, and friendly 
responses to customer inquiries. Always maintain a professional tone."

✅ Sau (24 tokens, -64%):
"You're a customer support agent. Provide helpful, accurate, friendly 
responses. Stay professional."

b) Loại bỏ filler words:

  • “please”, “kindly”, “I would like you to” → thay bằng imperative trực tiếp
  • “in order to” → “to”
  • “due to the fact that” → “because”

c) Dùng abbreviations cho internal instructions:

❌ "If the user asks about pricing, provide the standard pricing table."
✅ "User asks pricing → show std table"

Lưu ý: Không rút gọn quá mức khiến prompt mơ hồ. Test kỹ sau mỗi lần rút gọn.

3. Context Pruning — Chỉ Gửi Context Liên Quan

Vấn đề: RAG hoặc conversation history dễ đẩy quá nhiều context không liên quan vào prompt, tăng token + nhiễu.

Giải pháp:

a) Semantic reranking: Sau khi retrieve chunks từ vector DB, dùng reranker (Cohere Rerank, cross-encoder) để chọn top-k chunks thực sự liên quan nhất.

# Trước: lấy top 10 chunks từ vector search (có thể chứa noise)
chunks = vector_db.search(query, top_k=10)

# Sau: rerank và chỉ lấy top 3 chunks chất lượng cao
chunks = vector_db.search(query, top_k=10)
reranked = reranker.rerank(query, chunks, top_n=3)
context = "\n\n".join([c.text for c in reranked])

Impact: Giảm context từ ~2,500 tokens xuống ~800 tokens (-68%), quality tăng do loại bỏ chunks không liên quan.

b) Conversation summarization: Với chatbot dài, thay vì gửi toàn bộ 20 turn history, summarize 15 turn đầu thành 1 đoạn ngắn, chỉ giữ nguyên 5 turn gần nhất.

if len(history) > 10:
    old_turns = history[:-5]
    summary = llm.summarize(old_turns)  # 200-300 tokens
    context = summary + history[-5:]
else:
    context = history

4. Output Length Control — Giới Hạn Response Tokens

Nguyên lý: Output tokens đắt hơn input (GPT-4: $0.03/1K input vs $0.06/1K output). Giới hạn max_tokens để tránh response dài không cần thiết.

Cách áp dụng:

# Ước lượng độ dài output cần thiết cho từng loại task
task_configs = {
    "classification": {"max_tokens": 10},  # chỉ cần 1 label
    "short_answer": {"max_tokens": 100},
    "summary": {"max_tokens": 300},
    "long_explanation": {"max_tokens": 800}
}

response = client.create(
    prompt=prompt,
    max_tokens=task_configs[task_type]["max_tokens"]
)

Thêm constraint vào prompt:

❌ "Summarize this article."
✅ "Summarize this article in max 3 sentences (60 words)."

Impact: Với use case tóm tắt, giảm avg output từ 450 tokens → 180 tokens = -60% output cost.

5. Model Routing — Dùng Model Nhỏ Cho Task Đơn Giản

Nguyên lý: GPT-4 mạnh nhưng đắt ($0.03/1K input). Nhiều task đơn giản (classification, entity extraction, formatting) chạy tốt với GPT-3.5-turbo hoặc Claude Haiku (rẻ hơn 10-20 lần).

Strategy: Router pattern

def route_model(task_type, complexity):
    if task_type in ["classification", "extraction", "formatting"]:
        return "gpt-3.5-turbo"  # $0.0015/1K input
    elif complexity == "high" or task_type == "reasoning":
        return "gpt-4"  # $0.03/1K input
    else:
        return "claude-3-haiku"  # $0.00025/1K input

model = route_model(user_task, estimate_complexity(user_query))

Impact thực tế: Ứng dụng customer support với 70% queries đơn giản (FAQ, routing):

  • 100% dùng GPT-4: $1,200/tháng
  • Router (70% GPT-3.5, 30% GPT-4): $420/tháng
  • Tiết kiệm: 65%

Xem thêm về Function Calling Trong AI để hiểu cách routing thông minh trong multi-agent systems.

6. Structured Output — Giảm Parsing Overhead

Vấn đề: Free-form output dài, tốn token cho wrapper text (“Here is the JSON:”, “Hope this helps!”), và dễ format sai.

Giải pháp: Dùng structured output (JSON mode, function calling) để model trả về đúng format ngay, không cần instruction dài.

Trước (free-form):

Prompt: "Extract name, email, phone from this text. Return as JSON."
Output: "Sure! Here's the extracted information in JSON format:\n```json\n{...}\n```\nLet me know if..."
→ 85 tokens output (chỉ cần ~25)

Sau (structured output với OpenAI):

response = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": text}],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "contact_extraction",
            "schema": {
                "type": "object",
                "properties": {
                    "name": {"type": "string"},
                    "email": {"type": "string"},
                    "phone": {"type": "string"}
                },
                "required": ["name", "email", "phone"]
            }
        }
    }
)
# Output: {"name":"...","email":"...","phone":"..."} — 25 tokens

Impact: -60% output tokens, 100% valid format (không cần retry vì parse error).

7. Batching — Gom Nhiều Request Thành 1

Khi nào dùng: Có nhiều items độc lập cần process (e.g., phân loại 50 emails, tóm tắt 20 paragraphs).

Thay vì: 50 API calls riêng lẻ (mỗi call overhead ~300 tokens system message).

Làm: 1 API call xử lý cả 50 items (system message chỉ tính 1 lần).

# Trước: 50 calls
for email in emails:
    classify(email)  # Mỗi call: 300 (system) + 100 (email) = 400 tokens input

# Sau: 1 call batch
batch_input = "\n---\n".join([f"Email {i}: {e}" for i, e in enumerate(emails)])
result = classify_batch(batch_input)
# 1 call: 300 (system) + 5000 (50 emails) = 5,300 tokens
# vs 50 × 400 = 20,000 tokens → tiết kiệm 73%

Lưu ý: Giới hạn batch size để không vượt context window. GPT-4-turbo: 128K tokens, nhưng batch quá lớn tăng latency.

Quy Trình Tối Ưu Từng Bước

  1. Establish baseline — đo token count, latency, cost, quality trước tối ưu.
  2. Identify bottleneck — phần nào của prompt chiếm nhiều token nhất? (system message, context, examples, output)
  3. Apply 1 technique at a time — test từng kỹ thuật riêng lẻ, đo impact.
  4. Validate quality — chạy eval suite (10-50 test cases) sau mỗi thay đổi.
  5. Combine techniques — sau khi đã test riêng, kết hợp các kỹ thuật có impact cao (e.g., caching + token reduction + model routing).
  6. Monitor in production — theo dõi cost/request, latency, error rate sau khi deploy.

Công Cụ Hỗ Trợ Tối Ưu Prompt

  • Tokenizer: tiktoken (OpenAI), anthropic-tokenizer (Claude) — đếm chính xác số token.
  • Prompt management: LangSmith, Helicone — track cost, latency, version prompts.
  • Eval frameworks: promptfoo, LangChain Evaluators — tự động đánh giá quality.
  • Observability: Xem chi tiết về AI Observability để giám sát production LLM apps.

Khi Nào Không Nên Tối Ưu?

  • Chưa có baseline: Tối ưu “mù” dễ làm giảm quality mà không biết.
  • Traffic thấp: Nếu app chỉ có 100 requests/ngày, tiết kiệm $5/tháng không đáng để đầu tư 10 giờ engineering.
  • Quality là priority tuyệt đối: Ứng dụng y tế, tài chính, pháp lý — accuracy quan trọng hơn chi phí.
  • Prompt đã đủ ngắn gọn: Nếu input đã <500 tokens, output <200 tokens, không có context lặp lại → impact tối ưu thấp.

Tóm Lại

Prompt optimization không phải “trick” mà là kỷ luật engineering: đo lường trước, thay đổi từng bước, validate sau mỗi thay đổi. Bảy kỹ thuật trên — prompt caching, token reduction, context pruning, output control, model routing, structured output, batching — khi áp dụng đúng có thể giảm 40-70% chi phí API mà vẫn giữ hoặc cải thiện chất lượng.

Bắt đầu từ kỹ thuật có impact lớn nhất với setup của bạn (thường là caching nếu có context tĩnh, hoặc model routing nếu nhiều task đơn giản), đo baseline cẩn thận, và tối ưu dần.

Đọc thêm:

Câu hỏi thường gặp

Prompt optimization khác gì prompt engineering?

Prompt engineering tập trung vào việc viết prompt để đạt kết quả mong muốn. Prompt optimization đi xa hơn — tối ưu chi phí, tốc độ và hiệu suất mà vẫn giữ hoặc cải thiện chất lượng output.

Kỹ thuật nào giảm chi phí nhiều nhất?

Prompt caching (giảm 50-90% chi phí cho phần context lặp lại) và token reduction (loại bỏ token thừa, rút gọn system message) là hai kỹ thuật có impact lớn nhất, đặc biệt với ứng dụng có context dài hoặc traffic cao.

Có nên tối ưu prompt ngay từ đầu?

Không. Ưu tiên viết prompt đạt kết quả đúng trước, sau đó mới tối ưu khi đã có baseline đo lường. Tối ưu quá sớm dễ làm giảm chất lượng output mà không có cách kiểm chứng.

Làm sao biết prompt đã được tối ưu tốt chưa?

Theo dõi 4 chỉ số: (1) token count (input + output), (2) latency (thời gian phản hồi), (3) cost per request, (4) quality score (accuracy/relevance). So sánh trước-sau tối ưu để đảm bảo không đánh đổi chất lượng.

#AI#LLM#Prompt Engineering#Optimization#Cost Reduction#API#GPT#Claude