Quay lại hướng dẫn
Chi phí·25 tháng 5, 2026·Cập nhật 30 tháng 9, 2026·Đọc 11 phút

Tối ưu chi phí AI — hướng dẫn đầy đủ để giảm 70–90% hóa đơn LLM

Nếu bạn đang trả hơn $1,000/tháng cho API LLM, hướng dẫn này sẽ giúp bạn tiết kiệm ít nhất một nửa. Mọi kỹ thuật đều được công bố kèm mức tiết kiệm đo được và mã có thể chạy. Kết hợp 3–5 kỹ thuật có thể giảm 70% một cách thực tế mà không đánh đổi chất lượng.

Được xem xét lần cuối vào .

Năm kỹ thuật này cộng dồn hiệu quả. Mỗi kỹ thuật cắt giảm một phần khác nhau của hóa đơn — kết hợp ba kỹ thuật có thể thực tế đưa bạn đến mức giảm 70% mà không làm giảm chất lượng; cả năm kỹ thuật đưa bạn tiến gần 85–90%. Hướng dẫn này bao quát đầy đủ các lựa chọn, kèm khoản tiết kiệm được đo lường và mã có thể chạy cho từng kỹ thuật. Mỗi kỹ thuật liên kết đến một bài phân tích chuyên sâu ở cuối.

Năm kỹ thuật, xếp hạng theo ROI

#Kỹ thuậtKhoản mục được cắt giảmMức tiết kiệm thực tế
1bộ nhớ đệm promptToken đầu vào trong các prompt lặp lạiGiảm 60–90% chi phí đầu vào
2Phân tầng modelMức phí mỗi lệnh gọi cho tác vụ đơn giảnRẻ hơn khoảng 10 lần
3Giới hạn đầu raToken đầu ra, chi phí chính trong các tác vụ sáng tạoĐầu ra đắt hơn đầu vào 4–5 lần
4Xử lý song song + theo lôThời gian thực, không phải chi phí mỗi tokenCho phép timeout chặt hơn, ít lần thử lại hơn
5Vệ sinh cơ chế thử lạiChi phí thử lại không kiểm soátGiới hạn phần đuôi, không phải mức trung bình

1. Bộ nhớ đệm prompt — kỹ thuật có ROI cao nhất

Nếu system prompt của bạn dài hơn 1.000 token và bạn gọi cùng một prompt hơn hai lần trong khoảng thời gian 5 phút, bộ nhớ đệm prompt là khoản tiết kiệm gần như miễn phí. Anthropic tính phí input được lưu trong bộ nhớ đệm ở mức 10% mức phí input (2,5% ở Claude Fable 5.1; 5% ở Claude Opus 5.5); OpenAI tự động thực hiện điều tương đương tại 10%. Chỉ cần thêm một trường:

cache_control.py
# Prompt caching: 1 extra field = 10% rate on cached input
resp = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=600,
    system=[{
        "type": "text",
        "text": LONG_SYSTEM_PROMPT,
        "cache_control": {"type": "ephemeral"},   # cache this part
    }],
    messages=[{"role": "user", "content": question}],
)

Mức tiết kiệm thực tế: giảm 60–90% dòng chi phí đầu vào nếu system prompt của bạn lớn và ổn định. Hãy xem bảng điều khiển /app/usage — nếu cache_read_input_tokens bằng 0, bạn có 30 phút công việc phía trước nhưng khoản đầu tư này sẽ hoàn vốn mãi mãi. Phân tích chuyên sâu.

2. Phân tầng model — dùng model rẻ nhất nhưng vẫn đủ tốt

Claude Haiku 4.5 có giá khoảng 10% Claude Opus 4.7. Với việc phân loại, định dạng, quyết định định tuyến và tóm tắt đơn giản — Haiku là quá đủ. Chỉ dành Opus cho các lệnh gọi suy luận thực sự khó.

tiering.py
# Pick the cheapest model that's still good enough for the task.
# Escalate by difficulty: cheap (Haiku 4.5 / GPT-5.6 Terra) -> Sonnet 5 -> Opus 4.7
def pick_model(difficulty: int) -> str:
    if difficulty <= 2: return "claude-haiku-4-5"     # ~10x cheaper than Opus
    if difficulty <= 4: return "gpt-5-6-terra"        # a second family, cheap output
    if difficulty <= 7: return "claude-sonnet-5"
    return "claude-opus-4-7"

Cách xây dựng quyết định phân tầng: trước tiên dùng một bộ phân loại nhỏ (chính Haiku có thể thực hiện việc này với 100 token đầu vào), sau đó định tuyến. Đo chất lượng đầu ra bằng các bài đánh giá giữ lại. Đừng để trực giác quyết định — hãy benchmark.

  • Tầng 0 (Haiku 4.5): phân loại, trích xuất, dịch, tóm tắt đầu vào <2K — chi phí mỗi lệnh gọi tính bằng cent
  • Tầng 1 (GPT-5.6 Terra): tóm tắt dài hơn, hoàn thiện mã, sử dụng công cụ đơn giản — cũng tính bằng cent nhưng xử lý ngữ cảnh dài tốt hơn
  • Tầng 2 (Sonnet 5): suy luận thực sự, agent nhiều bước, tác vụ thị giác — model chủ lực trong môi trường production
  • Tầng 3 (Opus 4.7): chỉ dùng khi bạn đã xác nhận Sonnet không xử lý đúng

3. Giới hạn đầu ra — giới hạn những gì model tạo ra, không chỉ những gì model đọc

Token đầu ra thường đắt hơn token đầu vào 4–5 lần. Giá trị mặc định max_tokens=4096 tùy tiện khuyến khích model dài dòng. Hãy giới hạn mạnh và dùng chuỗi dừng để dừng tại đúng điểm đánh dấu:

caps.py
# Two-layer caps: per-call max_tokens + per-key wallet cap
client.chat.completions.create(
    model="claude-sonnet-5",
    messages=[...],
    max_tokens=800,             # cap each call
    stop=["</answer>"],         # cut at terminator
)
# /app/keys → set "Spending limit" per key:
#   Production: $50/day · Experiment: $5/day · CI: $1/day

Kết hợp max_tokens cho từng lệnh gọi với giới hạn chi tiêu ví theo từng khóa tại /app/keys — vòng lặp không kiểm soát hoặc lỗi không thể vượt quá hạn mức hằng ngày của bạn. Hai lớp, cả hai đều quan trọng.

4. Xử lý song song — dành cho khối lượng công việc dạng theo lô

Nếu bạn xử lý 1.000 mục độc lập (phân loại phản hồi, chấm điểm khách hàng tiềm năng, tạo mô tả), các lệnh gọi tuần tự sẽ mất một giờ. Xử lý bất đồng bộ với AsyncOpenAI và giới hạn đồng thời giúp bạn hoàn tất trong chưa đầy một phút — đồng thời timeout chặt hơn cho phép bạn thất bại nhanh với các upstream chậm. Xử lý song song không cắt giảm chi phí mỗi token, nhưng cho phép các mẫu kiến trúc (xử lý idempotent, ngân sách thử lại chặt hơn) có tác dụng đó.

5. Vệ sinh cơ chế thử lại — đừng trả tiền cho các lần thử lại không kiểm soát

Mã ngây thơ thử lại sau mọi lỗi, kể cả lỗi 400. Đó là trả tiền cho thất bại (các yêu cầu 4xx tại Kunavo không bị tính phí, nhưng bạn vẫn tiêu tốn ngân sách giới hạn tốc độ và thời gian trôi qua). Chính sách đúng: chỉ thử lại 408/429/5xx, thời gian chờ lũy thừa cộng jitter, tối đa 5 lần thử và tổng thời gian chờ 30 giây. Với mọi trường hợp khác, hãy thất bại nhanh và hiển thị lỗi.

Khoản tiết kiệm thể hiện như thế nào trong thực tế

Khoản tiết kiệm thực tế được đo lường trên một SaaS sử dụng Kunavo với mức chi $5.000/tháng:

  • Thêm bộ nhớ đệm prompt: tiết kiệm $2.000 (−40%)
  • Phân tầng Haiku cho việc phân loại: tiết kiệm $800 (−16%)
  • max_tokens chặt chẽ hơn: tiết kiệm $400 (−8%)
  • Tổng cộng: tiết kiệm $3.200/tháng, chi $1.800 (tổng mức giảm −64%)

Các khoản này cộng dồn — mỗi kỹ thuật tiếp theo tác động lên mức cơ sở đã giảm. Nếu chưa áp dụng bộ nhớ đệm trước, các kỹ thuật khác sẽ tiết kiệm ít hơn. Thứ tự rất quan trọng: bắt đầu với #1, sau đó #2, rồi #3.

Những cách không hiệu quả như quảng cáo

  • "Embedding cho mọi thứ" — embedding giúp tiết kiệm khi tìm kiếm văn bản, không phải khi tạo nội dung. Chúng rẻ nhưng không làm giảm chi phí lệnh gọi LLM
  • "Fine-tune cục bộ để giảm chi phí" — chỉ hợp lý nếu bạn xử lý hơn 10M token/ngày cho một tác vụ chuyên biệt. Với hầu hết đội ngũ, bộ nhớ đệm prompt + phân tầng Haiku hiệu quả hơn sự phức tạp vận hành của việc tự lưu trữ
  • "Aggregator rẻ hơn" — Kunavo đã định giá hầu hết model thấp hơn mức phí chính thức của nhà cung cấp. Các aggregator rẻ hơn thường thắng bằng cách âm thầm đổi model bạn yêu cầu sang một model rẻ hơn

Tiếp theo nên xem gì

Hãy áp dụng bộ nhớ đệm trước — đây là khoản ROI cao nhất trên mỗi giờ đầu tư. Sau đó theo dõi bảng điều khiển /app/usage theo model và tầng. Rồi phân tầng. Theo dõi chi phí hàng tháng trên mỗi người dùng đang hoạt động như chỉ số định hướng chính — nếu chỉ số này đi ngang hoặc giảm trong khi mức độ tương tác tăng, bạn đang làm đúng.

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

Bộ nhớ đệm prompt có thể giảm hóa đơn LLM bao nhiêu?

Anthropic tính phí đầu vào được lưu trong cache ở mức 10% so với giá đầu vào thông thường (2,5% ở Claude Fable 5.1; 5% ở Claude Opus 5.5), còn OpenAI tự động áp dụng mức tương đương ở 10%. Với khối lượng công việc có system prompt lớn và ổn định, chi phí đầu vào giảm 60–90%. Hãy áp dụng cách này trước — mọi kỹ thuật sau đó đều hoạt động trên mức cơ sở đã giảm. Xem hướng dẫn chuyên sâu về bộ nhớ đệm prompt để biết chính xác cấu trúc yêu cầu.

Claude Haiku rẻ hơn Claude Opus bao nhiêu?

Claude Haiku 4.5 có giá khoảng 10% Claude Opus 4.7 — rẻ hơn khoảng 10 lần. Với việc phân loại, trích xuất, dịch và tóm tắt ngắn, Haiku là đủ; chỉ dành Opus cho những tác vụ suy luận mà bạn đã xác nhận Claude Sonnet 5 xử lý sai. Mức giá hiện tại theo từng model có trong hướng dẫn giá Claude API.

Token đầu ra có đắt hơn token đầu vào không?

Có — token đầu ra thường đắt hơn token đầu vào 4–5 lần. Vì vậy, giá trị mặc định max_tokens=4096 tùy tiện sẽ tốn kém: nó khuyến khích model dài dòng ở phần đắt nhất của hóa đơn. Giới hạn max_tokens cho từng lệnh gọi và dùng chuỗi dừng để dừng tại đúng điểm đánh dấu.

Trên thực tế, tổng hóa đơn LLM có thể giảm bao nhiêu?

Kết hợp ba trong năm kỹ thuật có thể thực tế đạt mức giảm 70% mà không làm giảm chất lượng, còn cả năm kỹ thuật có thể tiến gần mức 85–90%. Với khối lượng công việc được đo lường ở mức $5.000/tháng: bộ nhớ đệm prompt tiết kiệm $2.000 (−40%), phân tầng Haiku cho việc phân loại tiết kiệm $800 (−16%), và max_tokens chặt chẽ hơn tiết kiệm $400 (−8%) — tiết kiệm $3.200, chi $1.800, tổng mức giảm 64%.

Chính sách thử lại đúng cho các lệnh gọi LLM API là gì?

Chỉ thử lại các phản hồi 408, 429 và 5xx, với thời gian chờ lũy thừa cộng jitter, giới hạn ở 5 lần thử và tổng thời gian chờ 30 giây. Với mọi trường hợp khác, hãy thất bại nhanh. Thử lại lỗi 400 sẽ không bao giờ thành công — và dù các yêu cầu 4xx thất bại không bị tính phí trên Kunavo, chúng vẫn tiêu tốn ngân sách giới hạn tốc độ và thời gian thực.