LLM về bản chất không có trí nhớ — mỗi lời gọi là một tờ giấy trắng. Agent tạo ra ảo giác "nhớ" bằng cách nhét lại ngữ cảnh vào context window mỗi bước. Quản lý memory chính là quản lý những gì được nhét vào đó.
Hai loại memory
- Short-term memory (ngắn hạn / working memory): lịch sử hội thoại và các bước trong phiên hiện tại — quan sát tool, suy nghĩ, kết quả. Nằm trong context window.
- Long-term memory (dài hạn): thông tin cần nhớ giữa các phiên — sở thích user, dữ liệu tra cứu. Thường lưu ngoài (DB, vector store) và truy xuất khi cần.
Vấn đề: context window có hạn
Mỗi model có giới hạn token. Agent chạy 20 bước, mỗi bước thêm quan sát → lịch sử phình to, vượt giới hạn hoặc đắt đỏ. Bạn phải quản lý chứ không nhồi tất cả.
Ba chiến lược quản lý short-term memory
1. Sliding window: chỉ giữ N lượt gần nhất.
→ Đơn giản, nhưng quên thông tin cũ quan trọng.
2. Summarization: khi dài, tóm tắt các lượt cũ thành 1 đoạn.
→ Giữ được ý chính, tốn 1 lời gọi LLM để tóm.
3. Chọn lọc (scratchpad): chỉ giữ quan sát liên quan mục tiêu,
bỏ log rác.
→ Hiệu quả nhất nhưng cần logic lọc.
Thực chiến thường kết hợp: giữ vài lượt gần nhất + một bản tóm tắt các lượt cũ.
Long-term memory: mô hình retrieve
Long-term memory thường theo mô hình lưu → nhúng (embed) → truy xuất theo ngữ nghĩa:
Lưu: "User thích họp buổi sáng" → vector store
Khi cần: agent tìm ký ức liên quan câu hỏi hiện tại
→ nhét kết quả top-k vào context
Đây chính là RAG áp dụng cho memory. Đừng nhét toàn bộ long-term memory vào — chỉ lấy phần liên quan.
Các bước thiết kế memory cho agent
- Xác định cái gì cần nhớ qua phiên (long-term) vs chỉ trong phiên (short-term).
- Đặt ngân sách token cho phần lịch sử (ví dụ tối đa 4.000 token).
- Chọn chiến lược short-term: window / summarize / kết hợp.
- Với long-term: chọn nơi lưu (DB quan hệ cho dữ liệu có cấu trúc; vector store cho tra cứu ngữ nghĩa).
- Viết cơ chế truy xuất: khi bắt đầu lượt, nạp đúng ký ức liên quan.
- Ghi lại ký ức mới sau mỗi phiên (điều user tiết lộ, kết quả quan trọng).
Ví dụ luồng có memory
Phiên trước: user nói "tôi chỉ họp sau 14h". → lưu long-term.
Phiên này: "đặt họp mai"
→ agent truy xuất ký ức "chỉ họp sau 14h"
→ chỉ đề xuất khung 14h-17h. Không hỏi lại.
Đó là khác biệt giữa agent "nhớ bạn" và một chatbot vô cảm hỏi lại mỗi lần.
Khung tư duy: 3 câu hỏi về memory
- Cần nhớ bao lâu? → chọn short vs long-term.
- Truy xuất bằng khóa chính xác hay ngữ nghĩa? → DB vs vector store.
- Nhét bao nhiêu vào context là đủ? → đặt ngân sách, ưu tiên liên quan.
Checklist
- [ ] Phân biệt rõ dữ liệu short vs long-term.
- [ ] Có ngân sách token cho lịch sử.
- [ ] Có chiến lược cắt/tóm khi tràn.
- [ ] Long-term chỉ truy xuất phần liên quan.
- [ ] Có bước ghi ký ức mới sau phiên.
Sai lầm thường gặp
- Nhồi toàn bộ lịch sử vào mỗi lời gọi: đắt và chậm; khi tràn context, model "quên" phần đầu một cách khó lường.
- Không có long-term: user phải khai lại mọi thứ mỗi phiên → trải nghiệm tệ.
- Nhét cả kho long-term vào context: loãng, tốn token, giảm chất lượng. Chỉ lấy top-k liên quan.
- Tóm tắt làm mất chi tiết quyết định (ID, số liệu): tóm tắt cẩn thận, giữ lại dữ kiện cứng.
- Quên rằng tool observation cũng chiếm memory: kết quả tool dài (cả trang HTML) làm tràn context — hãy cắt gọn trước khi lưu.
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