Quản lý ngữ cảnh
Vì sao chi phí của các phiên dài tăng phi tuyến và những cách giữ lịch sử trong giới hạn.
API không lưu trạng thái. Mỗi lượt đều gửi lại toàn bộ cuộc hội thoại, nên số token đầu vào tăng theo bản ghi hội thoại — và chi phí cũng tăng theo ở mọi lệnh gọi tiếp theo.
Đặc điểm của vấn đề
Một cuộc hội thoại gồm N lượt, mỗi lượt thêm khoảng T token, tiêu tốn tổng số token đầu vào ở mức N²T/2 thay vì NT. Tăng gấp đôi độ dài phiên khiến chi phí đầu vào tăng xấp xỉ gấp bốn. Đó là lý do một tác nhân có vẻ rẻ trong mười phút lại khiến bạn lo ngại sau một giờ.
Bốn cách tiếp cận hiệu quả
| Mẫu | Cách thực hiện | Đánh đổi |
|---|---|---|
| Cửa sổ trượt | Giữ K lượt gần nhất, bỏ phần còn lại | Mất hoàn toàn ngữ cảnh ban đầu |
| Bản tóm tắt được cập nhật liên tục | Định kỳ thay thế các lượt cũ bằng bản tóm tắt do mô hình viết | Tốn thêm một lệnh gọi; giữ được ý chính |
| Phiên mới cho mỗi tác vụ | Bắt đầu lại từ đầu khi chủ đề thay đổi | Không tốn thêm chi phí và thường là lựa chọn đúng |
| Lưu trữ bên ngoài | Lưu trạng thái trong tệp hoặc cơ sở dữ liệu, chỉ tải những gì bước hiện tại cần | Tốn công nhất, kết quả tốt nhất |
Tóm tắt các lượt cũ
def compact(history, keep=6):
class="s">""class="s">"Replace everything but the last `keep` turns with one summary turn."class="s">""
if len(history) <= keep:
return history
old, recent = history[:-keep], history[-keep:]
summary = summarise(old) class=class="s">"c"># one cheap Haiku call
return [{class="s">"role": class="s">"user", class="s">"content": fclass="s">"Summary of earlier discussion: {summary}"}] + recent
Chạy tác vụ tóm tắt bằng một mô hình có chi phí thấp. Đây là tác vụ nén thông tin, không phải tác vụ suy luận.
Kết quả công cụ thường là thủ phạm
- Một công cụ trả về 500 hàng sẽ đưa 500 hàng vào mọi yêu cầu sau đó. Hãy giới hạn số hàng, hoặc trả về bản tóm tắt kèm một mã tham chiếu để lấy thông tin chi tiết khi cần.
- Toàn bộ nội dung tệp mà tác nhân đọc sẽ được giữ trong ngữ cảnh. Hãy đọc phần bạn cần, thay vì toàn bộ tệp.
- Ảnh chụp màn hình và hình ảnh được gửi lại như mọi nội dung khác — hãy loại bỏ chúng sau khi đã mô tả.
- Nhật ký bản dựng và dấu vết ngăn xếp: giữ lại 50 dòng đầu và cuối, bỏ phần giữa.
Trong các công cụ tác nhân, bắt đầu phiên mới giữa những tác vụ không liên quan là cách tối ưu ít tốn kém nhất. Trong Claude Code, đó là
/clear.