Vấn đề cốt lõi: agent quên sạch sau mỗi phiên
Bạn dành 30 phút đầu phiên giải thích cho agent về dự án: naming convention, quyết định kiến trúc, những thứ đã thử và thất bại. Agent hiểu, làm tốt suốt buổi. Sáng hôm sau mở lại? Quên sạch. Phải bắt đầu lại từ đầu.
Đây là giới hạn cơ bản của LLM — mỗi phiên chat là một cuộc hội thoại mới, hoàn toàn biệt lập. Context window của model chỉ tồn tại trong phiên đó; khi phiên kết thúc, mọi thứ biến mất.
OpenClaw giải quyết vấn đề này bằng hệ thống trí nhớ 3 tầng, mô phỏng cách bộ não con người hoạt động: có thứ luôn sẵn trong đầu, có thứ nhớ từ hôm qua, và có thứ phải "lục lại" mới ra.
Ba tầng trí nhớ
MEMORY.md là file được đọc vào context mỗi lần agent khởi động một phiên riêng tư.
Bất cứ thứ gì nằm trong file này, agent sẽ "nhớ" ngay khi bắt đầu chat — không cần nhắc lại.
Nên đưa vào MEMORY.md những gì quan trọng, dùng thường xuyên, và ít thay đổi:
# Memory
## Quyết định kiến trúc
- 2026-03-15: Chuyển từ REST sang GraphQL cho internal API
- 2026-04-01: Dùng Resend thay SendGrid (giá tốt hơn, DX sạch hơn)
- 2026-04-10: Chọn VietinBank qua SePay cho payment gateway
## Convention đã thống nhất
- Commit message: conventional commits (feat:, fix:, docs:)
- Branch naming: feature/TASK-xxx-mo-ta-ngan
- API response: { success: true, data: {} }
## Bài học rút ra
- Không mock database trong integration test → đã gây lỗi production
- Luôn test email template trước khi deploy
- VPS provisioning cần timeout 120s, không phải 30s mặc định
Tầng 2 là các file ghi chú theo ngày trong thư mục memory/, format YYYY-MM-DD.md.
OpenClaw tự động load file hôm nay và hôm qua vào context — không cần cấu hình gì thêm.
├── 2026-04-10.md
├── 2026-04-11.md auto-load: hôm qua
└── 2026-04-12.md auto-load: hôm nay
Khi bạn nói "nhớ cái này nhé", agent sẽ ghi vào file daily note của ngày hôm nay. Đây là cuốn sổ tay công việc tự động — agent ghi lại những quyết định, bug đã fix, và ngữ cảnh quan trọng theo thời gian thực.
# 2026-04-12
## Buổi sáng
- Deploy thành công v2.3.1 lên production (10:15)
- Phát hiện bug pagination ở /admin/users — chưa fix, ưu tiên thấp
- Khách hàng @minh_dev hỏi về API rate limit → đã giải thích qua Telegram
## Buổi chiều
- Fix bug pagination: nguyên nhân offset = page * limit thay vì (page-1) * limit
- Commit: fix: correct pagination offset for admin user list
- Team lead: tuần sau làm tính năng auto-deploy theo branch
Đây là tầng mạnh nhất và khác biệt nhất. Khi agent cần thông tin không có trong MEMORY.md hay daily notes gần đây,
nó tự động tìm kiếm trong toàn bộ thư mục memory/ bằng semantic search —
không cần bạn chỉ đường.
Cách hoạt động bên dưới
Cấu hình semantic search
{
"agents": {
"defaults": {
"memorySearch": {
"backend": "qmd",
"maxResults": 6,
"paths": [
"memory/",
"MEMORY.md",
"AGENTS.md"
]
}
}
}
}
Tổ chức thư mục memory nâng cao
Ngoài daily notes, bạn có thể tổ chức memory theo chủ đề. Semantic search tìm trong tất cả file — không phân biệt cấu trúc thư mục.
├── people/
│ ├── khach-hang-a.md # Lịch sử và yêu cầu
│ └── doi-tac-b.md # Ghi chú hợp tác
├── projects/
│ ├── onmay.md # Ngữ cảnh dự án chính
│ └── side-project.md # Dự án phụ
├── decisions/
│ └── payment-gateway.md # Tại sao chọn SePay thay Stripe
├── topics/
│ ├── devops-notes.md
│ └── nextjs-tips.md
├── 2026-04-11.md
└── 2026-04-12.md
Khi bạn hỏi "khách hàng A muốn gì?", agent tìm đúng people/khach-hang-a.md mà không cần
bạn nhắc tới đường dẫn. Khi hỏi "tại sao không dùng Stripe?", nó tìm ra decisions/payment-gateway.md.
Embedding Provider
Semantic search cần embedding provider để chuyển text thành vector. OpenClaw tự động phát hiện provider từ API key bạn đã cấu hình — không cần khai báo thêm.
Nếu bạn đã có API key của bất kỳ provider nào ở trên, semantic search tự bật — không cần cấu hình thêm.
Trên VPS OnMay, chỉ cần thêm API key vào .env và memory search sẵn sàng hoạt động.
Mẹo tối ưu hệ thống trí nhớ
Viết ghi chú có cấu trúc, ngữ cảnh đủ trong một chunk
Semantic search chia text theo chunk ~400 token. Nếu một đoạn ghi chú thiếu ngữ cảnh, agent tìm thấy nhưng không hiểu. Dùng heading rõ ràng và viết mỗi đoạn như một unit độc lập:
## Bug fix: Pagination offset sai ở admin users
- Ngày: 2026-04-12
- File: app/admin/users/page.tsx
- Nguyên nhân: offset = page * limit → phải là (page - 1) * limit
- Fix: commit abc123
- Đã test với page 1, 5, 10, 100 — pass hết
Đoạn trên có đủ ngữ cảnh trong một chunk: vấn đề là gì, ở đâu, nguyên nhân, và cách fix. Agent tìm thấy sẽ hiểu ngay — không cần đọc thêm file khác.
Cross-reference khi một concept liên quan nhiều nơi
## Quyết định dùng SePay (2026-04-10)
Xem chi tiết tại: decisions/payment-gateway.md
Liên quan: yêu cầu bank transfer từ khách hàng (people/khach-hang-a.md)
Dọn dẹp memory định kỳ
- Mỗi tháng: chuyển thông tin quan trọng từ daily notes vào MEMORY.md hoặc file chuyên đề
- Xóa daily notes cũ hơn 30 ngày (đã được index, xóa file không mất vector đã build)
- Review MEMORY.md — loại bỏ những gì không còn đúng, thêm bài học mới
- Không nhồi nhét MEMORY.md — 100 dòng curated tốt hơn 500 dòng lộn xộn
Kiểm tra và debug memory
Muốn biết agent đang "nhớ" đúng không? Thử ba câu hỏi kiểm tra:
Nếu agent không nhớ thứ bạn mong đợi, kiểm tra theo thứ tự:
- Thông tin đã được ghi vào file markdown chưa? (Agent chỉ nhớ những gì đã được ghi ra file)
-
File có nằm trong path được cấu hình cho
memorySearch.pathskhông? -
Embedding provider đã được thiết lập chưa? Kiểm tra API key trong
.env
- Bài 1: Cài đặt và khởi động nhanh
- Bài 2: Cấu hình Workspace từ A-Z
- Bài 3: Hệ thống trí nhớ 3 tầng (bài này)
- Bài 4: HEARTBEAT.md — tác vụ tự động và cron agent
- Bài 5: Multi-agent setup và phân vai