Thực hành tốt nhất về bộ nhớ
Cách cấu trúc bộ nhớ cho thu hồi hiệu quả — danh mục, key, tag, mức ưu tiên.
Thực hành tốt nhất về bộ nhớ
Cách bạn cấu trúc bộ nhớ xác định độ hữu ích của chúng. Hướng dẫn này bao phủ mẫu cho việc phân danh mục, gắn tag và ưu tiên bộ nhớ để LLM có thể thu hồi thông tin đúng vào thời điểm đúng.
Danh mục: Chọn cái cụ thể nhất
| Danh mục | Dùng cho | Ví dụ |
|---|---|---|
identity |
Tên người dùng, vai trò, thông tin liên hệ | "user_name": "Michael Schäfer" |
preference |
Thích, không thích, phong cách làm việc | "communication": "Prefers concise responses" |
fact |
Sự kiện có thể kiểm chứng | "office_location": "Berlin, Germany" |
project |
Trạng thái dự án, quyết định | "project_synapse": "v1.5.0 deployed" |
skill |
Kỹ năng người dùng | "skill_python": "Advanced, 10+ years" |
mistake |
Lỗi quá khứ để tránh | "mistake_npm_version": "Always bump version" |
context |
Ngữ cảnh liên quan phiên | "current_focus": "Working on docs system" |
note |
Ghi chú linh tinh | "note_idea": "Try Redis for caching" |
Khi nghi ngờ, sử dụng `fact` cho thông tin có thể kiểm chứng và `note` cho
mọi thứ khác. Không phân danh mục quá mức — tốt hơn có một `fact` rõ ràng
hơn một `context` gây nhầm lẫn.
Key: Định danh ý nghĩa
Trường key là định danh của bộ nhớ. Sử dụng key ý nghĩa, ổn định:
Key tốt:
user_nameproject_synapse_statuspreference_communication_stylemistake_npm_version_bump
Key xấu:
mem_001(không ý nghĩa)temp(không mô tả)2026-06-27-note(ngày không giúp thu hồi)
Quy ước đặt tên key
snake_case(chữ thường với dấu gạch dưới)- Tiền tố với danh mục:
preference_*,project_*,mistake_* - Sử dụng danh từ mô tả, không động từ
- Giữ dưới 50 ký tự
Tag: Dành cho tìm kiếm và lọc
Tag cho phép lọc và tìm kiếm nhanh. Thêm 2-5 tag mỗi bộ nhớ:
{
"category": "project",
"key": "project_synapse_status",
"content": "Synapse v1.5.0 deployed. Next: v1.6.0 with docs system.",
"tags": ["synapse", "deployment", "status", "v1.5.0"]
}Mẫu tag
- Tên dự án:
synapse,synapse-mcp,synapse-chat - Chủ đề:
deployment,ci,database,auth - Trạng thái:
active,completed,blocked - Chỉ báo ưu tiên:
urgent,long-term
Tag không phân biệt chữ hoa chữ thường. Sử dụng chữ thường để nhất quán.
Mức ưu tiên: Thực tế
| Ưu tiên | Dùng cho | % Bộ nhớ |
|---|---|---|
critical |
Nhận dạng người dùng, thông tin pháp lý, quyết định không thể đảo ngược | ~5% |
high |
Dự án đang hoạt động, sở thích quan trọng | ~20% |
normal |
Hầu hết sự kiện, ghi chú, ngữ cảnh | ~65% |
low |
Tạm thời, tốt nếu biết | ~10% |
Không đánh dấu mọi thứ `critical`. Nếu mọi thứ là critical, không có gì là
critical cả. Dự trữ `critical` cho những thứ sẽ gây hại thực sự nếu quên.
Khi nào lưu so với không lưu
Luôn lưu
- Nhận dạng người dùng (tên, email, vai trò)
- Sở thích dài hạn
- Quyết định dự án và lý do
- Lỗi quá khứ và bài học
- Cam kết với người dùng
Không lưu
- Trạng thái tạm thời (sử dụng biến thay thế)
- Lịch sử hội thoại nguyên văn (hệ thống chat xử lý điều này)
- Dữ liệu nhạy cảm (mật khẩu, API key)
- Sự kiện dễ dàng suy ra (ngày hiện tại, nội dung tệp)
- Ngữ cảnh tạm thời (sử dụng danh mục
contextvới ưu tiên thấp)
Cập nhật bộ nhớ
POST /memory với cùng category + key cập nhật bộ nhớ hiện có:
# Initial store
store("project", "project_synapse_status", "v1.4.0 deployed", priority="high")
# Later: update with same key
store("project", "project_synapse_status", "v1.5.0 deployed. CI green.", priority="high")Sử dụng key ổn định để bạn có thể cập nhật mà không tạo bản trùng lặp. LLM
nên POST lại cùng key khi thông tin thay đổi, không tạo bộ nhớ mới.
Vòng đời bộ nhớ
Create → Active → Stale → Archive → Delete- Create: POST /memory với ngữ cảnh đầy đủ
- Active: Thu hồi thường xuyên, cập nhật khi cần
- Stale: Vẫn liên quan nhưng không được sử dụng tích cực (ưu tiên thấp hơn?)
- Archive: Đặt ưu tiên thành
low, giữ cho tham chiếu lịch sử - Delete: DELETE /memory/:id khi không còn liên quan
Dọn dẹp định kỳ
# Find memories not updated in 90 days
old_memories = requests.get(
f"{URL}/memory/search?q=*",
headers={"Authorization": f"Bearer {KEY}"}
)
for mem in old_memories["results"]:
if is_stale(mem, days=90):
# Either delete or lower priority
if is_obsolete(mem):
delete_memory(mem["id"])
else:
update_memory(mem["id"], priority="low")Mẫu: Kế thừa bộ nhớ
Cho ngữ cảnh phân cấp (dự án → dự án con → tác vụ):
# Parent project
store("project", "project_synapse", "Main Synapse project",
tags=["synapse", "parent"], priority="high")
# Sub-project (tags link to parent)
store("project", "project_synapse_docs", "Docs system for Synapse",
tags=["synapse", "docs", "synapse-parent"], priority="high")
# Specific task (tags link to sub-project)
store("project", "task_docs_loader", "Implement docs-loader.ts",
tags=["synapse", "docs", "task"], priority="normal")LLM có thể sau đó tìm q=synapse+docs để tìm tất cả bộ nhớ liên quan.
Mẫu: Nhật ký quyết định
Lưu quyết định với lý do để LLM không tái thẩm lại chúng:
store("fact", "decision_postgres_over_sqlite",
"Chose PostgreSQL over SQLite for production. Reason: concurrent writes, "
"FTS5 native support, better backup story. Date: 2026-06-15. Decided by: Michael.",
tags=["decision", "database", "postgres", "sqlite"],
priority="high")Mẫu: Tránh lỗi
Lưu lỗi với hướng dẫn tránh cụ thể:
store("mistake", "mistake_forget_version_bump",
"Forgot to bump package.json version after changes. npm publish failed. "
"FIX: Always run `npm version patch` before pushing. "
"CI fails with 'version already exists' if you forget.",
tags=["npm", "ci", "publish", "version"],
priority="high")