Cửa sổ trượt: giữ N lượt gần nhất, cắt bỏ phần đầu. Rẻ, tất định, không gọi thêm LLM. Nhược điểm: mất hẳn thông tin đầu hội thoại — người dùng khai tên, mã đơn, ràng buộc ở lượt 2 thì đến lượt 30 model không còn biết.
Tóm tắt lũy tiến (compaction): khi độ dài chạm ngưỡng, gọi LLM tóm tắt phần cũ thành một khối ngắn rồi thay thế nó, giữ nguyên vài lượt gần nhất ở dạng đầy đủ.
if count_tokens(messages) > THRESHOLD:
old, recent = messages[:-6], messages[-6:]
summary = llm.summarize(old, prior_summary=state.summary)
messages = [{"role": "system", "content": SYSTEM + "\n\n" + summary}] + recentSo sánh nhanh:
| Cửa sổ trượt | Tóm tắt lũy tiến | |
|---|---|---|
| Chi phí | 0 | thêm 1 lần gọi LLM mỗi lần nén |
| Giữ ngữ cảnh xa | mất | giữ ở dạng nén |
| Rủi ro | quên dữ kiện cũ | sai lệch tích lũy qua nhiều lần tóm tắt |
Thực tế thường kết hợp: giữ nguyên 5-10 lượt gần nhất, tóm tắt phần cũ, và tách riêng các dữ kiện then chốt vào bộ nhớ có cấu trúc (tên, mã đơn, ngôn ngữ, ràng buộc đã chốt) lưu ngoài prompt rồi chèn lại nguyên văn. Dữ kiện có cấu trúc không nên đi qua bước tóm tắt vì tóm tắt nhiều vòng sẽ làm sai lệch dần. Một lưu ý về chi phí: mỗi lần nén là prompt prefix đổi, nên cache prompt bị vô hiệu — đừng nén quá thường xuyên.