Kiến trúc Memory: Short-term, working, long-term — Từ bộ não đến MEMORY.md
Phân tầng memory cho AI agent: Working Memory như KV cache, Short-term như session buffer, Long-term như vector DB. Giải quyết stability-plasticity dilemma t...
Bạn đã từng thấy agent với context window 128K tokens vẫn "quên" mất mình đang sửa lỗi gì sau 20 lượt tool call? Vấn đề không phải thiếu chỗ lưu, mà là thiếu kiến trúc. Bài viết này lấy cảm hứng từ cách bộ não người phân tầng trí nhớ để thiết kế memory cho agent platform — không phải để "nhớ nhiều", mà để "nhớ đúng lúc, quên đúng chỗ".
Vấn đề
Cách tiếp cận phổ biến hiện nay là flat memory: dump toàn bộ conversation history, RAG context, và system prompt vào một đống context window rồi gọi LLM. Cách này có ba lỗ hổng chết người:
- Attention dilution: Khi prompt dài 100K tokens, mô hình mất khả năng "focus" vào đúng biến cục bộ đang cần debug (lost in the middle). Dữ liệu quan trọng bị chôn vùi giữa đống log cũ.
- Stability-plasticity dilemma: Agent cần "quên" nhanh các giá trị tạm thời (như biến
itrong vòng lặp) để tránh interference, nhưng đồng thời cần "nhớ" chặt các preference của user (như "luôn dùng TypeScript strict mode"). Flat memory không phân biệt được hai loại này — cứ lưu hết vào thì kiến thức cố định bị biến động liên tục. - Cost & latency: Truy xuất RAG cho mỗi turn tốn thời gian, nhưng mang cả vector DB vào prompt thì tốn token. Không có tầng trung gian để cache "vừa đủ dùng".
Kết quả là agent dùng Claude 3.5 vẫn lặp lại lỗi đã sửa 10 phút trước, hoặc GPT-4 quên mất user yêu cầu output bằng tiếng Việt sau 15 lượt tool use.
Ý tưởng cốt lõi
Thay vì một "đống" memory, ta tổ chức thành ba tầng có chức năng sinh học khác biệt, mô phỏng theo mô hình của Cowan (2008) và các nghiên cứu về bộ não:
Working Memory (Tầng xử lý tức thì)
Đây không phải nơi "lưu trữ", mà là trạng thái kích hoạt (activated state) — tương tự KV cache của Transformer hay attention focus trong context window.
- Đặc điểm: Chỉ chứa 4±1 chunks (theo nghiên cứu của Cowan, không phải 7±2 như Miller). Mỗi chunk có thể là một file đang mở, một biến logic, hoặc kết quả tool vừa trả về.
- Thời gian: < 20 giây — đủ để agent "làm toán" với thông tin rồi quên ngay.
- AI Analog: Active context window (thường chỉ 4K-8K tokens thực sự được attention focus), hoặc state của ReAct loop hiện tại.
Ví dụ thực tế: Khi agent đang debug, Working Memory chỉ giữ "auth.ts lỗi dòng 42", "biến token null", và "stack trace vừa nhận". Nó không chứa lịch sử 50 lượt chat trước đó.
Short-term Memory (Tầng đệm phiên làm việc)
Tầng này giống như session buffer hoặc conversation history trong LangChain — lưu trữ thụ động (passive storage) nhưng vẫn nhanh.
- Đặc điểm: Sliding window 10-100 turns gần nhất, hoặc summary nén từ recursive summarization.
- Thời gian: Phút đến giờ — suốt một coding session.
- AI Analog: Redis session, SQLite conversation log, hoặc state của LangGraph checkpoint.
Ví dụ: Trong MEMORY.md của OpenClaw, đây là phần ## Session Context chứa các quyết định vừa thảo luận (ví dụ: "Chọn PostgreSQL thay vì Mongo") nhưng chưa đủ để ghi vào long-term.
Long-term Memory (Tầng lưu trữ tri thức)
Nơi lưu trữ bền vững, có cấu trúc, tương tự hippocampus → cortical storage.
- Đặc điểm: Unlimited capacity (về lý thuyết), yêu cầu consolidation (hệ thống củng cố) để chuyển từ short-term sang đây.
- Thời gian: Ngày đến năm.
- AI Analog: Vector DB (RAG), MEMORY.md files, hoặc external knowledge base. Trong kiến trúc Titans/MIRAS, đây là external persistent storage đóng vai "hippocampal index".
Cơ chế consolidation: Agent cần "giấc ngủ" — các cron job hoặc heartbeat chạy nền để nén short-term thành lessons learned rồi ghi vào MEMORY.md hoặc vector DB.
# MEMORY.md — Three-tier architecture example
## Working Context (Active)
- Current: Debugging JWT middleware
- Focus files: `src/auth.ts`, `.env.local`
- Active tools: FileEditor, TestRunner
## Short-term Session (Last 2h)
- Decisions: Switched from RSA to HS256 (pending validation)
- Pruned history: 5 key turns summarized
- Staging state: 3 test cases failing (red)
## Long-term Knowledge (Consolidated)
- User pref: Always strict TypeScript, never use `any`
- Project patterns: Repository pattern for DB access (embedding indexed)
- Past bugs: CORS mismatch on Vercel edge functions (severity: high, resolved: 2024-05)Tại sao nó hoạt động
Stability-Plasticity Tradeoff là chìa khóa. Khi agent đang viết code (working memory), nó cần plasticity cao — thay đổi biến, thử nghiệm giả thuyết, "quên" ngay khi block code kết thúc. Nếu ép agent lưu tất cả vào long-term ngay lập tức, kiến thức vững chắc (như "user ghét JavaScript") sẽ bị ghi đè bởi nhiễu tạm thời.
Ngược lại, working memory giới hạn 4±1 chunks buộc agent phải chunk hóa thông tin — giống như bộ não chỉ xử lý được 4 object cùng lúc. Điều này giải thích vì sao MCP tools hoạt động tốt hơn dump cả API schema: mỗi tool call là một chunk rõ ràng, dễ fit vào working memory, thay vì 1000 dòng tài liệu gây nhiễu.
Consolidation mechanism (chuyển từ short-term sang long-term) cũng giống protein synthesis trong não: cần thời gian "idle" (background task) để merge memories. Trong agent platform, đây là lúc HEARTBEAT.md hoặc cron job chạy để summarize session log thành vector embeddings.
Ý nghĩa thực tế
| Chỉ số | Flat Memory (Context Window) | Three-Tier Architecture |
|---|---|---|
| Latency | Cao (phải xử lý 100K tokens) | Thấp (Working chỉ 4K-8K) |
| Cost/token | $$$ (mỗi turn trả tiền cho cả lịch sử) | $ (chỉ active context + RAG khi cần) |
| Accuracy | "Lost in the middle" sau 20 turns | Focus cao, consolidation đảm bảo retention |
| Multi-tenancy | Khó (prompt càng dài càng dễ leak) | Dễ (Long-term dùng RLS, Working ephemeral) |
Ai đang dùng:
- Claude Code: Sử dụng "Skills" như long-term, conversation history như short-term, và active context như working memory.
- OpenClaw: MEMORY.md patterns cho phép selective consolidation — chỉ những gì agent "ngủ" mới ghi vào long-term.
- Titans (Google Research): Dùng external memory như "hippocampal index" để mở rộng context vượt qua sliding window.
Hạn chế:
- Cold start: Agent cần "warm up" working memory bằng cách đọc SOUL.md hoặc recent context từ short-term.
- Consolidation lag: Nếu agent crash trước khi consolidate, short-term mất hết (giống như mất trí ngắn hạn).
- Chunking overhead: Developer phải thiết kế tool và memory thành các chunk rõ ràng, không thể dump đống text.
Đào sâu hơn
Tài liệu chính thức:
- Cowan (2008) "What are the differences between long-term, short-term, and working memory?" — cơ sở khoa học cho giới hạn 4±1 chunks.
- Google Research Blog (2025) "Titans: Learning to Memorize at Test Time" — kỹ thuật SWAX (Sliding Window + xLSTM) để short window ép buộc long-term encoding.
Cùng cụm:
MEMORY.md Patterns: Ghi nhớ có chọn lọc qua sessions
Cách cấu hình file MEMORY.md để consolidation diễn ra tự động qua các phiên làm việc.
Context Files: Per-user, per-workspace, per-project
Phân tầng context theo workspace và project để cách ly working memory giữa các nhiệm vụ.
Quản lý lịch sử hội thoại: Pruning, summarization, sliding window
Kỹ thuật nén short-term memory để giữ 4±1 chunks quan trọng nhất trong working context.
RAG cho Agent: Khi memory không đủ, tìm kiếm thêm
Kết nối long-term memory với vector DB để truy xuất tri thức bền vững mà không làm nặng prompt.
Đọc tiếp:
Multi-Agent & Teams: Shared memory và handoff
Cách nhiều agent chia sẻ long-term memory nhưng giữ working memory riêng biệt.
Security & Multi-tenant: Memory isolation
Áp dụng Row-Level Security và sandboxing để đảm bảo working memory của user A không leak sang user B.
Thiết kế Tool cho Agent: Naming, description, error handling — Khi 'tay chân' AI hiểu sai ý
Tại sao agent gọi nhầm tool liên tục? Cách đặt tên, mô tả và xử lý lỗi để agent chọn đúng 'tay chân' mỗi lần, giảm 30% lỗi selection.
MEMORY.md Patterns: Ghi nhớ có chọn lọc qua sessions — Từ nhật ký sang kiến trúc nén
Kỹ thuật nén và tái hiện thông tin trong MEMORY.md giúp AI agent nhớ có chọn lọc qua các phiên làm việc, tránh bloat ngữ cảnh và nhiễu truy xuất.