Quên tắt /loop và hoá đơn API nghìn đô: hiểu chi phí khi agent chạy lặp
Tóm tắt
Một câu chuyện lan truyền trong cộng đồng: lập trình viên chạy /loop kiểm tra PR mỗi 30 phút rồi quên tắt, sáng hôm sau hoá đơn API lên vài nghìn đô. Lý do: mỗi lần lặp gửi lại cả cuộc hội thoại, và vì cache mặc định chỉ sống 5 phút nên lần lặp nào cũng phải trả giá đầy đủ cho phần ngữ cảnh đó.
Một câu chuyện lan truyền trong cộng đồng: lập trình viên chạy /loop kiểm tra PR mỗi 30 phút rồi quên tắt, sáng hôm sau hoá đơn API lên vài nghìn đô. Dù chi tiết từng trường hợp có thể khác nhau, cơ chế đằng sau là có thật và đáng hiểu — vì nó áp dụng cho mọi agent chạy lặp. Bài này giải thích vì sao chi phí phình lên, prompt cache tính giá thế nào và cách dừng/phòng ngừa.
Vì sao tốn đến vậy?
- Mỗi lượt gọi model đều gửi lại toàn bộ ngữ cảnh (system prompt, lịch sử, kết quả tool). Ngữ cảnh càng dài, mỗi lượt càng đắt.
- Prompt cache giúp phần ngữ cảnh lặp lại rẻ hơn nhiều, nhưng thời gian sống (TTL) mặc định chỉ 5 phút; có tuỳ chọn 1 giờ với giá ghi cao hơn.
- Lặp mỗi 30 phút → cache đã hết hạn → mỗi lần lặp phải ghi cache lại từ đầu với giá ghi, không hưởng giá đọc rẻ.
- Mỗi lần lặp lại thêm kết quả mới vào lịch sử → ngữ cảnh ngày càng phình, làm mỗi lượt sau đắt hơn lượt trước.
Prompt cache tính giá thế nào?
| Loại | So với giá input gốc |
|---|---|
| Ghi cache 5 phút | 1,25× |
| Ghi cache 1 giờ | 2× |
| Đọc cache | 0,1× (thấp hơn, khoảng 0,05×, ở một số model mới) |
Ngoài ra có điều kiện: phần được cache phải đạt độ dài tối thiểu (khoảng 512 token ở các model mới) và mỗi yêu cầu có tối đa 4 điểm đánh dấu cache. Cache chỉ có lợi khi bạn gọi lại trong thời gian sống của nó; loop thưa hơn TTL thì gần như không được hưởng.
Một phép tính minh hoạ
Giả sử ngữ cảnh 100.000 token. Nếu gọi mỗi 3 phút (trong TTL), mỗi lượt đọc cache với 0,1× giá input — khoảng 10.000 token “tương đương”. Nếu gọi mỗi 30 phút, mỗi lượt phải ghi lại 100.000 token với 1,25× — tức khoảng 125.000 token tương đương, gấp hơn 12 lần. Nhân với 48 lượt mỗi ngày và ngữ cảnh phình dần là đủ hiểu hoá đơn đến từ đâu.
Cách dừng và phòng ngừa
- Biết cách dừng: loop khoảng cố định (
/loop 30m …) không dừng bằng Esc — phải yêu cầu Claude huỷ. Task lặp tự hết hạn sau 7 ngày. - Chọn đúng công cụ: việc chạy lâu dài nên dùng scheduled task trên cloud/desktop hoặc GitHub Actions với phiên mới mỗi lần, thay vì để một phiên dài lặp mãi.
- Đặt giới hạn chi tiêu và cảnh báo ngân sách trên console API; theo dõi usage hằng ngày.
- Giữ ngữ cảnh gọn:
/clearhoặc mở phiên mới cho việc định kỳ; prompt lặp nên ngắn và cụ thể. - Chọn model hợp việc: kiểm tra trạng thái PR không cần model đắt nhất.
Checklist trước khi bật vòng lặp
- Tôi có thực sự cần lặp, hay có webhook/sự kiện để kích hoạt?
- Khoảng cách giữa các lần lặp so với TTL cache là bao nhiêu?
- Có giới hạn số lần lặp, thời gian hoặc ngân sách không?
- Ai sẽ tắt nó, và làm thế nào?
- Mỗi lần lặp có bắt đầu từ ngữ cảnh sạch không?
Áp dụng thế nào?
- Dev: đặt giới hạn và cảnh báo trước khi chạy bất kỳ việc lặp nào qua đêm.
- Tech Lead: tạo quy ước: việc định kỳ chạy bằng scheduled task/CI với phiên mới, không dùng phiên tương tác dài.
- PM: đưa chi phí AI vào theo dõi ngân sách hằng tuần; hoá đơn bất ngờ thường là dấu hiệu của vòng lặp quên tắt.