Skip to main content

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"
Jika ragu, gunakan `fact` untuk info yang dapat diverifikasi dan `note` untuk yang lainnya. Jangan berlebihan mengkategorikan — lebih baik memiliki `fact` yang jelas daripada `context` yang membingungkan.

Key: Identifier Bermakna

Field key adalah identifier memori. Gunakan key yang bermakna dan stabil:

Key yang baik:

  • user_name
  • project_synapse_status
  • preference_communication_style
  • mistake_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
Tag tidak case-sensitive. Gunakan huruf kecil untuk konsistensi.

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%
Jangan tandai semuanya `critical`. Jika semuanya critical, tidak ada yang critical. Simpan `critical` untuk hal-hal yang akan menyebabkan kerugian nyata jika dilupakan.

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 context dengan 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")
Gunakan key yang stabil sehingga Anda dapat memperbarui tanpa membuat duplikat. LLM harus POST ulang key yang sama saat info berubah, bukan membuat memori baru.

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")

Anti-Pola yang Harus Dihindari

Langkah Berikutnya