Praktik Terbaik Memori
Cara menstrukturkan memori untuk recall yang efektif — kategori, key, tag, prioritas.
Praktik Terbaik Memori
Bagaimana Anda menstrukturkan memori menentukan seberapa berguna memori tersebut. Panduan ini mencakup pola untuk mengkategorikan, menandai, dan memprioritaskan memori sehingga LLM dapat recall informasi yang tepat pada waktu yang tepat.
Kategori: Pilih yang Paling Spesifik
| Kategori | Gunakan Untuk | Contoh |
|---|---|---|
identity |
Nama pengguna, peran, info kontak | "user_name": "Michael Schäfer" |
preference |
Suka, tidak suka, gaya kerja | "communication": "Prefers concise responses" |
fact |
Fakta yang dapat diverifikasi | "office_location": "Berlin, Germany" |
project |
Status proyek, keputusan | "project_synapse": "v1.5.0 deployed" |
skill |
Keahlian pengguna | "skill_python": "Advanced, 10+ years" |
mistake |
Error masa lalu yang harus dihindari | "mistake_npm_version": "Always bump version" |
context |
Konteks yang relevan dengan sesi | "current_focus": "Working on docs system" |
note |
Catatan lain-lain | "note_idea": "Try Redis for caching" |
Key: Identifier Bermakna
Field key adalah identifier memori. Gunakan key yang bermakna dan stabil:
Key yang baik:
user_nameproject_synapse_statuspreference_communication_stylemistake_npm_version_bump
Key yang buruk:
mem_001(tidak bermakna)temp(tidak deskriptif)2026-06-27-note(tanggal tidak membantu recall)
Konvensi penamaan key
snake_case(huruf kecil dengan garis bawah)- Awali dengan kategori:
preference_*,project_*,mistake_* - Gunakan kata benda deskriptif, bukan kata kerja
- Jaga di bawah 50 karakter
Tag: Untuk Pencarian dan Pemfilteran
Tag memungkinkan pemfilteran dan pencarian cepat. Tambahkan 2-5 tag per memori:
{
"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"]
}Pola tag
- Nama proyek:
synapse,synapse-mcp,synapse-chat - Topik:
deployment,ci,database,auth - Status:
active,completed,blocked - Indikator prioritas:
urgent,long-term
Prioritas: Realistis
| Prioritas | Gunakan Untuk | % Memori |
|---|---|---|
critical |
Identitas pengguna, info hukum, keputusan ireversibel | ~5% |
high |
Proyek aktif, preferensi penting | ~20% |
normal |
Sebagian besar fakta, catatan, konteks | ~65% |
low |
Efemeral, bagus untuk diketahui | ~10% |
Kapan Menyimpan vs Tidak Menyimpan
Selalu simpan
- Identitas pengguna (nama, email, peran)
- Preferensi jangka panjang
- Keputusan proyek dan rasional
- Kesalahan masa lalu dan pelajaran yang dipetik
- Komitmen yang dibuat kepada pengguna
Jangan simpan
- State sementara (gunakan variabel sebagai gantinya)
- Riwayat percakapan verbatim (sistem chat menangani ini)
- Data sensitif (kata sandi, API key)
- Fakta yang mudah diturunkan (tanggal saat ini, konten file)
- Konteks efemeral (gunakan kategori
contextdengan prioritas rendah)
Memperbarui Memori
POST /memory dengan category + key yang sama memperbarui memori yang ada:
# 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")Siklus Hidup Memori
Create → Active → Stale → Archive → Delete- Create: POST /memory dengan konteks penuh
- Active: Recall sering, perbarui sesuai kebutuhan
- Stale: Masih relevan tetapi tidak aktif digunakan (prioritas lebih rendah?)
- Archive: Tetapkan prioritas ke
low, simpan untuk referensi historis - Delete: DELETE /memory/:id saat tidak lagi relevan
Pembersihan berkala
# 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")Pola: Warisan Memori
Untuk konteks hierarkis (proyek → subproyek → tugas):
# 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 kemudian dapat mencari q=synapse+docs untuk menemukan semua memori terkait.
Pola: Log Keputusan
Simpan keputusan dengan rasional sehingga LLM tidak membahasnya ulang:
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")Pola: Penghindaran Kesalahan
Simpan kesalahan dengan instruksi penghindaran spesifik:
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")