Skip to main content

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_name
  • project_synapse_status
  • preference_communication_style
  • mistake_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 context vớ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")

Mẫu chống cần tránh

Bước tiếp theo