LLM không tự nhớ gì cả — mỗi lần gọi, nó chỉ thấy đúng những gì bạn gửi trong messages. "Trí nhớ" của agent hoàn toàn do bạn dựng lên. Bài này bạn học ba loại bộ nhớ và cách không để context tràn.
Ba loại bộ nhớ
- Bộ nhớ ngắn hạn (short-term): lịch sử hội thoại hiện tại — chính là mảng
messages. Reset khi phiên kết thúc. - Bộ nhớ dài hạn (long-term): dữ liệu lưu ngoài (file, DB, vector store) tồn tại qua nhiều phiên — ví dụ hồ sơ khách hàng, ghi chú cũ.
- Bộ nhớ làm việc (working/scratchpad): các bước suy nghĩ và kết quả tool trong một tác vụ — chính là observation ta nối vào ở bài 5.
Vấn đề: cửa sổ context có hạn
Mỗi model có giới hạn token. Hội thoại càng dài, chi phí càng cao và cuối cùng sẽ tràn. Ba chiến lược xử lý:
- Cắt bớt (truncation): giữ system prompt + N lượt gần nhất, bỏ phần cũ.
- Tóm tắt (summarization): định kỳ gọi LLM tóm tắt phần cũ thành một đoạn ngắn, thay cho toàn bộ lịch sử.
- Truy hồi (retrieval / RAG): chỉ lấy đúng mẩu thông tin liên quan từ bộ nhớ dài hạn khi cần, thay vì nhồi hết vào.
Ví dụ: tóm tắt lịch sử để tiết kiệm token
def compress_history(messages, keep_last=4):
system = messages[0]
old = messages[1:-keep_last]
recent = messages[-keep_last:]
if not old:
return messages
summary = call_llm([
{"role": "system", "content": "Tom tat hoi thoai sau that ngan gon, giu du kien quan trong."},
{"role": "user", "content": str(old)},
])
return [system,
{"role": "user", "content": f"[Tom tat truoc do]: {summary}"}
] + recent
Ví dụ: bộ nhớ dài hạn đơn giản với file JSON
import json, os
def remember(user_id, key, value):
path = f"mem_{user_id}.json"
data = json.load(open(path)) if os.path.exists(path) else {}
data[key] = value
json.dump(data, open(path, "w"), ensure_ascii=False)
def recall(user_id, key, default=None):
path = f"mem_{user_id}.json"
if not os.path.exists(path):
return default
return json.load(open(path)).get(key, default)
Các bước thêm memory cho agent
- Xác định thông tin nào cần nhớ qua phiên (tên khách, sở thích, trạng thái tác vụ).
- Chọn nơi lưu: JSON/SQLite cho dữ liệu có cấu trúc; vector store nếu cần tìm theo ngữ nghĩa.
- Trước mỗi phiên,
recalldữ liệu liên quan và chèn vào system prompt. - Sau mỗi tác vụ,
rememberdữ liệu mới đáng lưu. - Bật nén lịch sử khi hội thoại vượt ngưỡng (ví dụ > 10 lượt).
Khung tư duy: "Nhớ ít, nhớ đúng"
Context = System prompt + Trí nhớ liên quan (đã lọc) + Vài lượt gần nhất
Mục tiêu không phải nhớ nhiều nhất mà là đưa vào context đúng thứ liên quan tới bước hiện tại. Context sạch → agent quyết định tốt hơn và rẻ hơn.
Checklist memory
- [ ] Biết rõ đâu là short-term, đâu là long-term.
- [ ] Có cơ chế chống tràn context (cắt/tóm tắt/retrieval).
- [ ] Chỉ nạp trí nhớ liên quan, không nhồi tất cả.
- [ ] Dữ liệu dài hạn lưu bền (file/DB), không mất khi restart.
- [ ] Không lưu dữ liệu nhạy cảm thừa (tuân thủ quyền riêng tư).
Sai lầm thường gặp
- Nhồi toàn bộ lịch sử mỗi lần gọi → tràn context, chi phí tăng vọt, agent "lạc".
- Nhầm rằng LLM tự nhớ phiên trước → không lưu long-term nên agent "quên" mọi thứ sau restart.
- Tóm tắt làm mất dữ kiện quan trọng (số đơn, số tiền). Hãy chỉ định rõ cái gì phải giữ.
- Retrieval trả về mẩu không liên quan → agent bị nhiễu. Kiểm tra chất lượng truy hồi.
- Lưu dữ liệu cá nhân bừa bãi → rủi ro bảo mật. Chỉ lưu thứ thật cần.
Học xong bài này rồi?
Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu,
và học hết khóa thì có chứng chỉ.
Lưu tiến độ của tôi