Cài đặt

Ngôn ngữ

Cách giảm 30% chi phí AI API mà không cần thay đổi mô hình

L
LemonData
·26 tháng 2, 2026·427 lượt xem
Cách giảm 30% chi phí AI API mà không cần thay đổi mô hình

Hầu hết các đội ngũ đang trả quá nhiều tiền cho các lượt gọi AI API. Không phải vì họ chọn sai model, mà vì họ đang bỏ qua ba phương pháp tối ưu hóa chỉ yêu cầu thay đổi code tối thiểu: prompt caching, smart model routing và batch processing.

Dưới đây là phân tích chi tiết từng kỹ thuật với những con số thực tế.

Nếu bạn vẫn đang phân vân liệu sự kết hợp các nhà cung cấp hiện tại có phải là vấn đề hay không, hãy đọc bài so sánh giá cả trước. Nếu nỗi đau lớn nhất của bạn là các đợt retry dồn dập hoặc bị giới hạn bởi nhà cung cấp thay vì chi phí thô, hãy kết hợp trang này với hướng dẫn về rate limiting.

1. Prompt Caching: Thắng lợi lớn nhất

Nếu ứng dụng của bạn gửi cùng một system prompt trong mỗi request, bạn đang trả toàn bộ chi phí cho các token mà nhà cung cấp đã xử lý trước đó.

Cách thức hoạt động

OpenAI tự động cache các prompt cho đầu vào trên 1,024 token. Các cached token chỉ tốn 50% so với giá input tiêu chuẩn. Bạn không cần thay đổi bất cứ điều gì trong code của mình.

Anthropic sử dụng tính năng caching rõ ràng thông qua các điểm ngắt cache_control. Chi phí ghi (write) cao hơn 25% so với input tiêu chuẩn, nhưng chi phí đọc (read) thấp hơn tới 90%. Cache TTL là 5 phút, và được gia hạn sau mỗi lần hit.

Với biểu giá mới của OpenAI, mức giảm giá thực tế có thể tốt hơn mong đợi. GPT-4.1 cached input có giá bằng 1/4 so với input tiêu chuẩn, điều này có nghĩa là các prefix nhất quán sẽ tạo ra mức tiết kiệm lớn hơn nhiều so với những gì chúng ta từng nghĩ.

Phép tính thực tế

Lấy ví dụ một bot hỗ trợ khách hàng điển hình:

  • System prompt: 2,000 tokens
  • User message: trung bình 200 tokens
  • 5,000 requests/ngày sử dụng Claude Sonnet 4.6

Không sử dụng caching:

Chi phí input hàng ngày = 5,000 × 2,200 tokens × $3.00/1M = $33.00

Với Anthropic prompt caching (giả định tỉ lệ cache hit là 95%):

Cache writes: 250 × 2,200 × $3.75/1M = $2.06
Cache reads:  4,750 × 2,200 × $0.30/1M = $3.14
User tokens:  5,000 × 200 × $3.00/1M = $3.00
Tổng cộng hàng ngày = $8.20 (Tiết kiệm 75% chi phí input)

Triển khai

from anthropic import Anthropic

client = Anthropic(
    api_key="sk-lemon-xxx",
    base_url="https://api.lemondata.cc"
)

response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": "You are a customer support agent for Acme Corp...",
            "cache_control": {"type": "ephemeral"}  # Kích hoạt caching
        }
    ],
    messages=[{"role": "user", "content": user_message}]
)

# Kiểm tra hiệu suất cache trong response headers
# cache_creation_input_tokens vs cache_read_input_tokens

Đối với các model OpenAI, caching là tự động. Chỉ cần đảm bảo prompt của bạn vượt quá 1,024 token và giữ cho static prefix nhất quán giữa các request.

Những sai lầm thường gặp:

  • Đặt timestamp hoặc request ID ở đầu mỗi prompt
  • Thay đổi thứ tự các chỉ dẫn hệ thống trong mỗi lần gọi
  • Chèn các ngữ cảnh biến đổi của người dùng trước prefix cố định

Nếu prefix thay đổi mọi lúc, cache sẽ không bao giờ có tác dụng. Hãy coi cấu trúc prompt như một yếu tố cơ bản về chi phí, chứ không chỉ là một chi tiết kỹ thuật prompt engineering.

2. Smart Model Routing: Sử dụng đúng Model cho từng tác vụ

Không phải mọi request đều cần đến model đắt tiền nhất của bạn. Một tác vụ phân loại mà GPT-4.1 xử lý với giá $2.00/1M input token cũng có thể hoạt động tốt với GPT-4.1-mini ở mức $0.40/1M, giúp giảm chi phí gấp 5 lần.

Chiến lược định tuyến (Routing Strategy)

Loại tác vụ Model đề xuất Chi phí Input/1M
Suy luận phức tạp Claude Opus 4.6 / GPT-4.1 $5.00 / $2.00
Chat tổng quát Claude Sonnet 4.6 / GPT-4.1 $3.00 / $2.00
Phân loại, trích xuất GPT-4.1-mini / Claude Haiku 4.5 $0.40 / $1.00
Embeddings text-embedding-3-small $0.02
Định dạng đơn giản DeepSeek V3 $0.28

Triển khai

from openai import OpenAI

client = OpenAI(
    api_key="sk-lemon-xxx",
    base_url="https://api.lemondata.cc/v1"
)

def route_request(task_type: str, messages: list) -> str:
    """Chọn model rẻ nhất có thể xử lý tốt tác vụ này."""
    model_map = {
        "classification": "gpt-4.1-mini",
        "extraction": "gpt-4.1-mini",
        "summarization": "gpt-4.1-mini",
        "complex_reasoning": "gpt-4.1",
        "creative_writing": "claude-sonnet-4-6",
        "code_generation": "claude-sonnet-4-6",
    }
    model = model_map.get(task_type, "gpt-4.1-mini")

    response = client.chat.completions.create(
        model=model,
        messages=messages
    )
    return response.choices[0].message.content

Tiết kiệm thực tế

Một trợ lý lập trình định tuyến 60% request (linting, định dạng, hoàn thiện code đơn giản) sang GPT-4.1-mini và 40% (kiến trúc, debugging) sang Claude Sonnet 4.6:

Trước đây (tất cả dùng Claude Sonnet 4.6):
  1,000 req/ngày × 3K input × $3.00/1M = $9.00/ngày

Sau khi áp dụng (chia tỉ lệ 60/40):
  600 req × 3K × $0.40/1M = $0.72/ngày (mini)
  400 req × 3K × $3.00/1M = $3.60/ngày (sonnet)
  Tổng cộng = $4.32/ngày (Tiết kiệm 52%)

3. Batch Processing: Giá thấp hơn cho các công việc không khẩn cấp

OpenAI cung cấp Batch API với mức giảm giá 50% cho cả input và output token. Sự đánh đổi: kết quả được trả về trong vòng 24 giờ thay vì thời gian thực.

Anthropic cũng cung cấp mức giảm giá batch 50% trên các model được hỗ trợ. Nếu khối lượng công việc của bạn là chạy qua đêm, không đồng bộ hoặc mang tính chất xem xét lại, hiếm khi có lý do chính đáng để trả giá theo thời gian thực.

Các ứng viên phù hợp để batching:

  • Tạo nội dung hàng đêm
  • Phân loại tài liệu số lượng lớn
  • Gán nhãn tập dữ liệu (Dataset labeling)
  • Tạo báo cáo định kỳ
# Tạo file batch (định dạng JSONL)
import json

requests = []
for i, doc in enumerate(documents):
    requests.append({
        "custom_id": f"doc-{i}",
        "method": "POST",
        "url": "/v1/chat/completions",
        "body": {
            "model": "gpt-4.1-mini",
            "messages": [
                {"role": "system", "content": "Classify this document..."},
                {"role": "user", "content": doc}
            ]
        }
    })

# Ghi file JSONL
with open("batch_input.jsonl", "w") as f:
    for req in requests:
        f.write(json.dumps(req) + "\n")

# Gửi batch
batch_file = client.files.create(file=open("batch_input.jsonl", "rb"), purpose="batch")
batch = client.batches.create(input_file_id=batch_file.id, endpoint="/v1/chat/completions", completion_window="24h")

Các ứng viên tốt để batching bên trong một sản phẩm thực tế:

  • Các công việc làm mới nội dung qua đêm
  • Tóm tắt ticket hỗ trợ
  • Backfill dữ liệu embeddings
  • Đánh giá codebase hoặc tài liệu lớn
  • Thông báo người dùng có độ ưu tiên thấp

Các ứng viên không phù hợp:

  • Phản hồi chat
  • Hỗ trợ lập trình tương tác
  • Các quy trình mà hành động tiếp theo của người dùng phụ thuộc ngay lập tức vào câu trả lời

4. Bonus: Giảm số lượng Token

Trước khi tối ưu hóa ở cấp độ API, hãy kiểm tra xem bạn có đang gửi nhiều token hơn mức cần thiết hay không.

Lãng phí thường gặp:

  • System prompt quá dài dòng, lặp lại các chỉ dẫn mà model đã tuân thủ
  • Bao gồm toàn bộ lịch sử hội thoại khi chỉ cần 3-5 lượt trao đổi cuối cùng
  • Gửi HTML/markdown thô khi văn bản thuần túy (plain text) vẫn hoạt động tốt
  • Không sử dụng max_tokens để giới hạn độ dài đầu ra

Giảm 30% độ dài prompt sẽ trực tiếp chuyển thành việc giảm 30% chi phí input.

Cách dễ nhất để tìm ra sự lãng phí là ghi lại (log) độ dài prompt theo route hoặc tính năng. Hầu hết các đội ngũ không gặp vấn đề về giá model. Họ gặp vấn đề "cùng một prompt cồng kềnh được gửi 100,000 lần mỗi ngày".

5. Tăng khả năng hiển thị chi phí trước khi tối ưu hóa một cách mù quáng

Tối ưu hóa chi phí sẽ thất bại nếu các đội ngũ tối ưu hóa dựa trên trực giác.

Trước khi thay đổi các quy tắc định tuyến, hãy log lại:

  • tên route hoặc tính năng
  • model
  • input tokens
  • output tokens
  • cache hit hoặc miss
  • số lần retry
  • độ trễ mà người dùng cảm nhận được

Điều đó cho phép bạn trả lời các câu hỏi quan trọng:

  • Route nào đắt tiền vì nó thực sự hữu ích?
  • Route nào đắt tiền vì prompt lãng phí?
  • Route nào nên chuyển sang batch?
  • Route nào nên chuyển sang cấp độ model rẻ hơn?

Nếu bạn không thể trả lời bốn câu hỏi đó, việc "tối ưu hóa chi phí" của bạn sẽ chỉ là chuyển chi phí từ chỗ này sang chỗ khác.

6. Thứ tự tối ưu hóa thực tế

Thứ tự hiệu quả nhất thường là:

  1. Loại bỏ sự lãng phí token rõ rệt.
  2. Bật hoặc sửa lỗi caching.
  3. Tách biệt các tác vụ rẻ tiền khỏi các tác vụ đắt tiền.
  4. Batch hóa bất cứ thứ gì không khẩn cấp.
  5. Chỉ sau đó mới thương lượng lại sự kết hợp các nhà cung cấp.

Thứ tự này rất quan trọng vì mức tiết kiệm lớn nhất thường đến trước khi chuyển đổi nhà cung cấp. Nếu bạn đổi nhà cung cấp mà không sửa cấu trúc prompt, bạn vẫn sẽ tiếp tục trả tiền cho cùng một sự kém hiệu quả đó.

7. Một quy trình triển khai Trước-và-Sau cụ thể

Hãy xem xét một quy trình hỗ trợ hiện đang thực hiện việc này trên mỗi request:

  • gửi một system prompt dài 2,000 token
  • gọi một model cao cấp cho tất cả các request
  • retry cùng một cấu trúc request khi gặp lỗi tạm thời
  • chạy tóm tắt hàng đêm một cách đồng bộ thay vì dùng batch

Phiên bản đầu tiên thường mang lại cảm giác "đơn giản" vì nó chỉ có một đường dẫn code. Về mặt tài chính, nó đang thực hiện bốn việc tốn kém cùng một lúc.

Một quy trình triển khai hiệu quả hơn sẽ như thế này:

  1. Di chuyển văn bản chính sách cố định lên đầu prompt để caching thực sự có thể hoạt động.
  2. Định tuyến các tác vụ phân loại, trích xuất và tóm tắt ngắn sang một cấp độ model rẻ hơn.
  3. Dành riêng model cao cấp cho các trường hợp leo thang, suy luận phức tạp hoặc tổng hợp câu trả lời cuối cùng.
  4. Đẩy các công việc tóm tắt qua đêm và backfill sang batch.
  5. Kiểm tra log hàng tuần để tìm các route có cấu trúc prompt bị thay đổi làm mất hiệu quả của cache.

Kiểu triển khai đó không yêu cầu viết lại toàn bộ. Nó chỉ yêu cầu một tuần thiết lập công cụ đo lường và sự sẵn lòng coi prompt và routing như những bề mặt sản xuất thực thụ.

8. Những điều không nên làm

Cách nhanh nhất để lãng phí nỗ lực tối ưu hóa chi phí là tối ưu hóa sai thứ.

Tránh các bẫy sau:

  • chuyển đổi nhà cung cấp trước khi bạn đo lường sự lãng phí của prompt
  • định tuyến các tác vụ rẻ sang các model rẻ mà không kiểm tra chất lượng đầu ra
  • bật caching cho các prompt có prefix thay đổi theo từng request
  • batch hóa các công việc hướng tới người dùng vốn thực sự cần phản hồi thời gian thực
  • chỉ nhìn vào giá token mà bỏ qua chi phí retry, độ trễ và chi phí dự phòng (fallback)

Công việc tối ưu chi phí chỉ thành công khi sản phẩm vẫn hoạt động tốt sau khi tiết kiệm được tiền. Nếu trải nghiệm người dùng (UX) tệ đi, thì con số thắng lợi trên bảng tính chỉ là giả tạo.

Tổng kết lại

Kỹ thuật Nỗ lực Mức tiết kiệm điển hình
Prompt caching Thấp (thêm cache_control) 40-75% chi phí input
Model routing Trung bình (phân loại tác vụ) 30-50% tổng thể
Batch processing Trung bình (quy trình async) 50% cho các công việc batch
Giảm token Thấp (cắt tỉa prompt) 10-30% chi phí input

Các kỹ thuật này có tính cộng hưởng. Một đội ngũ triển khai cả bốn kỹ thuật có thể cắt giảm hóa đơn API hàng tháng từ $3,000 xuống dưới $1,000 một cách thực tế mà không làm giảm chất lượng đầu ra.

Điểm mấu chốt: tối ưu hóa chi phí trong AI API không phải là tìm kiếm nhà cung cấp rẻ hơn. Đó là việc sử dụng đúng model, ở đúng mức giá, với chiến lược caching phù hợp cho từng tác vụ cụ thể.

Nếu bạn đã sử dụng nhiều nhà cung cấp, khía cạnh vận hành cũng rất quan trọng. Hướng dẫn di chuyểnso sánh OpenRouter sẽ giúp bạn quyết định khi nào nên tập trung hóa việc định tuyến thay vì tiếp tục chắp vá các tích hợp riêng biệt.


Bắt đầu tối ưu hóa ngay hôm nay: LemonData cho phép bạn truy cập hơn 300 model thông qua một API key duy nhất, hỗ trợ prompt caching cho các dòng model OpenAI và Anthropic, đồng thời là nơi duy nhất để so sánh mức độ sử dụng giữa chúng.

Share: