Cách tiết kiệm 1.240 USD/tháng từ các cuộc gọi API LLM lãng phí (và công cụ phát hiện của tôi)
Tác giả tiết lộ việc chi khoảng 2.000 USD/tháng cho các API AI, rồi xây dựng công cụ mở nguồn "LLM Cost Profiler" để phát hiện lãng phí lên tới 43%, bao gồm các lỗi retry, trùng lặp, chọn sai mô hình và lạm dụng ngữ cảnh.

Tôi đang chi khoảng 2.000 USD mỗi tháng cho các API OpenAI và Anthropic trên một vài dự án. Tôi biết một phần số tiền đó bị lãng phí, nhưng tôi không thể chứng minh được. Các bảng điều khiển của nhà cung cấp chỉ hiển thị một con số duy nhất — tổng hóa đơn của bạn. Điều này giống như nhận hóa đơn tiền điện mà không có breakdown. Nó là do điều hòa không khí? Đèn? Phòng máy chủ? Không biết.
Vì vậy, tôi đã xây dựng một công cụ để tìm ra câu trả lời. Những gì nó phát hiện ra thực sự làm tôi cảm thấy tội nghiệp.
Những gì tôi tìm thấy
34% các cuộc gọi tóm tắt của tôi là các lần thử lại (retry). Lệnh yêu cầu JSON, nhưng mô hình liên tục bao bọc nó trong các khối mã markdown. Trình phân tích của tôi từ chối nó. Vòng lặp thử lại chạy lại cùng một cuộc gọi. Và lần nữa. Mỗi lần thử lại đều tốn tiền. Tổng lãng phí: khoảng 140 USD/tháng — từ một sửa đổi 6 từ mà tôi có thể đã thực hiện vài tháng trước.
85% các cuộc gọi phân loại của tôi là trùng lặp. Cùng đầu vào, cùng đầu ra, giá cả đầy đủ mỗi lần. Không có bộ nhớ đệm (cache). 723 trong số 847 cuộc gọi hàng tuần hoàn toàn thừa thãi. Một bộ nhớ đệm đơn giản đã tiết kiệm được 310 USD/tháng.
Mô hình phân loại của tôi đang sử dụng GPT-4o cho một tác vụ có/không. Đầu ra luôn dưới 10 mã thông báo — một trong năm nhãn cố định. GPT-4o-mini tạo ra kết quả giống hệt ở mức giá rẻ hơn nhiều. Tiết kiệm: 71 USD/tháng.
Bot chat của tôi đang nhét toàn bộ lịch sử cuộc trò chuyện vào mỗi cuộc gọi. Tại tin nhắn thứ 20, đầu vào là 3.200 mã thông báo và đang tăng lên. Chỉ một vài tin nhắn cuối cùng mới quan trọng. Cắt bớt thành 5 tin nhắn cuối cùng tiết kiệm được 155 USD/tháng.
Tổng: 1.240 USD/tháng trong lãng phí trên tổng chi tiêu 2.847 USD/tháng. Đó là 43%.
Công cụ: LLM Cost Profiler
Tôi đóng gói tất cả điều này vào một CLI Python nguồn mở. Đây là cách nó hoạt động.
Bước 1: Cài đặt
pip install llm-spend-profiler
Bước 2: Bọc (Wrap) khách hàng của bạn (2 dòng mã)
from llm_cost_profiler import wrap
from openai import OpenAI
client = wrap(OpenAI())
Đó là tất cả. Mã của bạn hoạt động chính xác như trước. Mọi cuộc gọi API giờ đây đều được ghi nhật ký một cách im lặng vào cơ sở dữ liệu SQLite cục bộ. Nếu ghi nhật ký thất bại vì bất kỳ lý do gì, nó sẽ thất bại một cách im lặng — ứng dụng của bạn sẽ không bị ảnh hưởng.
Hoạt động với Anthropic cũng:
from anthropic import Anthropic
client = wrap(Anthropic())
Bước 3: Xem tiền của bạn đi đâu
$ llmcost report
LLM Cost Report — Last 7 Days
========================================
Total: $847.32 | 2.4M tokens | 12,847 calls
By Feature:
summarizer $412.80 (48.7%) ████████████████████
chatbot $203.11 (24.0%) ████████████
classifier $89.40 (10.5%) █████
content_gen $78.22 (9.2%) ████
extraction $41.50 (4.9%) ██
untagged $22.29 (2.6%) █
Warnings:
⚠ summarizer: 34% of calls are retries ($140.15 wasted)
⚠ chatbot: avg 3,200 input tokens but only 180 output tokens (context bloat)
⚠ classifier: using gpt-4o but output is always <10 tokens (cheaper model works)
Bước 4: Tìm ra lãng phí
$ llmcost optimize
LLM Cost Optimization Report
========================================
Current monthly spend (projected): $2,847
Potential savings found: $1,240/month (43.5%)
#1 CACHE — classifier.py:34 [SAVE $310/mo]
85% of calls are exact duplicates (723 of 847/week)
→ Add @cache decorator
Confidence: HIGH
#2 RETRY FIX — content_gen.py:112 [SAVE $180/mo]
28% retry rate from JSON parse errors
→ Fix prompt to return raw JSON
Confidence: HIGH
#3 MODEL DOWNGRADE — classifier.py:34 [SAVE $71/mo]
Output is always <10 tokens, one of 5 fixed labels
→ Switch gpt-4o to gpt-4o-mini
Confidence: MEDIUM
#4 CONTEXT BLOAT — chatbot.py:123 [SAVE $155/mo]
Avg 3,200 input tokens, growing over conversation
→ Truncate history to last 5 messages
Confidence: MEDIUM
Mỗi đề xuất bao gồm số dòng chính xác của tệp, khoản tiết kiệm ước tính hàng tháng và mức độ tin cậy.
Các tính năng đáng chú ý khác
llmcost hotspots — xếp hạng các vị trí mã của bạn theo chi phí. Tự động phát hiện từ ngăn xếp cuộc gọi Python, không cần gắn nhãn thủ công:
Top Cost Hotspots:
1. features/summarizer.py:47 summarize_doc() $412.80/week 4,201 calls
2. api/chat.py:123 handle_message() $203.11/week 3,892 calls
3. pipeline/classify.py:34 classify_text() $89.40/week 2,847 calls
llmcost compare — so sánh tuần qua tuần để phát hiện các đột biến đột ngột.
llmcost dashboard — mở bảng điều khiển web cục bộ tại localhost:8177 với biểu đồ treemap, biểu đồ thời gian chi tiêu và thác nước tối ưu hóa. Tệp HTML đơn, không cần npm, không cần bước xây dựng.
Gắn thẻ (Tagging) — nhóm chi phí theo tính năng, khách hàng hoặc môi trường:
from llm_cost_profiler import tag
with tag(feature="summarizer", customer="acme_corp"):
response = client.chat.completions.create(...)
Bộ nhớ đệm (Caching) decorator — dừng trả tiền cho các cuộc gọi trùng lặp:
from llm_cost_profiler import cache
@cache(ttl=3600)
def classify_text(text):
return client.chat.completions.create(...)
Cách thức hoạt động bên dưới
- Wrapper: Mẫu proxy minh bạch — ngăn chặn các cuộc gọi phương thức mà không cần "monkey patching".
- Lưu trữ: SQLite với chế độ WAL tại
~/.llmcost/data.db. An toàn cho luồng. - Giá cả: Bảng tra cứu tích hợp sẵn cho các mô hình OpenAI và Anthropic.
- Phát hiện điểm gọi: Duyệt ngăn xếp cuộc gọi Python để tự động phát hiện hàm nào kích hoạt mỗi cuộc gọi.
- Không có phụ thuộc: Chỉ sử dụng thư viện tiêu chuẩn của Python.
- Quyền riêng tư: Mọi thứ vẫn ở cục bộ. Không có thứ nào được gửi đi đâu cả.
Thử nghiệm trên cơ sở mã của bạn
Nếu bạn đang thực hiện các cuộc gọi API LLM trong bất kỳ dự án nào, tôi thực sự tò mò về những gì nó tìm thấy. Trong kinh nghiệm của tôi, mọi cơ sở mã đều có ít nhất một bất ngờ — thường là các cuộc gọi trùng lặp mà không ai biết đến.
GitHub: https://github.com/BuildWithAbid/llm-cost-profiler
Cài đặt: pip install llm-spend-profiler
Giấy phép: MIT
Nếu bạn tìm thấy lỗi hoặc có ý tưởng về những gì nó nên phát hiện thêm, hãy mở một vấn đề hoặc để lại bình luận ở đây. Đây là dự án nguồn mở đầu tiên của tôi và tôi rất mong nhận được phản hồi.



