Bỏ qua để vào nội dung chính
Một call API ngốn 17.000 token: 5 lớp guardrail chi phí

Một call API ngốn 17.000 token: 5 lớp guardrail chi phí

Bởi Marcus Bennett
07 thg 11, 20264 phút đọc

Một trang JSON từ API bất động sản ngốn 17.000 token của agent. Số đo thật về chi phí tool call, và năm lớp guardrail chặn hóa đơn LLM phình to.

Agent gọi một API, nhận về một trang JSON, context window bốc hơi 17.000 token trước khi model kịp viết chữ nào. Cuối tháng hóa đơn tới, không ai truy được prompt nào đã đốt tiền.

Bài này đo xem token chảy đi đâu, rồi dựng các lớp guardrail chặn chi phí: check rẻ chạy trước, model đắt chạy sau cùng.

Token chảy đi đâu: số đo thật

Một bài đo ngày 7/11 nối ba API bất động sản UAE theo cách một setup MCP làm, gọi 18 lần ngày 3/11/2026 và đếm mọi thứ model phải đọc.

Chi phí thứ nhất — danh sách tool, trả trước khi có câu hỏi. MCP client gửi cho model tên, mô tả và input schema của mọi tool nó có thể gọi, ở mỗi lượt. Với 46 tool từ ba API, phần định nghĩa đó là 52.439 ký tự, khoảng 13.110 token mỗi lượt.

Chi phí thứ hai — response. Một trang kết quả căn hộ 1 phòng ngủ ở Dubai Marina qua Bayut API là 68.709 ký tự JSON, khoảng 17.000 token cho 25 listing. Kích thước là thuộc tính của format, không phải của dữ liệu: qua ba khu vực, Bayut nằm trong 17.098–19.527 token, Property Finder 16.324–18.126. Agent so sánh ba khu vực trên hai cổng tiêu khoảng 105.600 token trước khi viết câu trả lời.

Bóc một row ra, phần lớn ký tự là thứ agent không dùng: location chiếm 28,3% row Bayut (cả cây địa danh, kèm tên tiếng Ả Rập, Trung, Nga), images chiếm 37,8% row Property Finder. Đáng chú ý hơn: dữ liệu liên hệ (ownerAgent, phoneNumber, contactName) chiếm 14,1% mỗi row Bayut, agent_details chiếm 14,7% trên Property Finder. Bạn trả tiền để nhét tên và số điện thoại người khác vào context lẫn log; trim giảm cost đồng thời xử lý vấn đề này.

Trim trước khi model đọc

Tác giả chỉ ra rằng để trả lời câu hỏi về giá thuê, agent chỉ cần khoảng chín trường. Nguyên tắc: tool handler không trả nguyên response upstream mà map sang struct phẳng, đơn vị nằm trong tên key (rent_aed, area_sqm), bỏ mọi trường model không dùng để ra quyết định. Với danh sách tool cũng vậy: chỉ nạp API mà task cần.

Các lớp guardrail, rẻ trước đắt sau

OWASP xếp nó vào Top 10 cho ứng dụng LLM dưới mã LLM10:2025 Unbounded Consumption, gọi thẳng mặt chi phí là "Denial of Wallet": kẻ tấn công khai thác giá pay-per-use để đẩy hóa đơn nhà cung cấp lên.

  1. Quota trước mọi thứ. Check rate limit và budget ngày của user trước khi tiêu một token nào. Check này miễn phí, chặn đứng script và vòng lặp chạy loạn.
  2. Giới hạn input. Cap độ dài prompt và kích thước attachment: một file 50 trang paste vào trợ lý nấu ăn không phải câu hỏi về nấu ăn.
  3. Gate rẻ đứng trước. Hỏi một model nhỏ, nhanh (hoặc classifier) đúng một câu: request này có thuộc phạm vi sản phẩm không? Request lạc đề nhận câu trả lời cố định, model lớn không chạy. Đừng nhầm system prompt với gate — "bạn là trợ lý nấu ăn" chỉ là gợi ý model cân nhắc cùng bất cứ thứ gì user hỏi tiếp.
  4. Chỉ cấp tool cần thiết. Agent công thức nấu ăn cần tìm công thức và danh sách mua sắm, không cần code runner hay browsing mở — mỗi tool thừa làm rộng thêm nghĩa của chữ "bất cứ thứ gì".
  5. Budget cứng mỗi run. Cap output token, số step, số tool call, wall-clock time. Bài gốc đặt MAX_STEPS, MAX_TOOL_CALLS, MAX_SECONDS = 8, 5, 30 — vài dòng code, nhưng chặn prompt lạm dụng ở step limit thay vì để nó lặp trên hóa đơn của bạn.

Làm gì tuần này

  • Log token và cost theo request và theo user — không đo thì không biết lớp nào đáng dựng.
  • Đếm ký tự định nghĩa tool gửi mỗi lượt, chia 4 để ước lượng token, nhân số lượt/ngày.
  • Đọc top prompt bị từ chối hằng tuần — chúng cho biết user thực sự muốn gì.

Không spam, hủy đăng ký bất kỳ lúc nào.

Bài viết liên quan