Skip to main content

أفضل ممارسات الذاكرة

كيف تُنظَّم الذكريات للاستدعاء الفعال — الفئات، المفاتيح، الوسوم، الأولويات.


أفضل ممارسات الذاكرة

كيف تُنظَّم الذكريات يحدد مدى فائدتها. يغطي هذا الدليل أنماط تصنيف ووسم وأولوية الذكريات حتى يستطيع الـ LLM استدعاء المعلومة الصحيحة في الوقت المناسب.

الفئات: اختر الأكثر تحديدًا

الفئة استخدم لـ مثال
identity اسم المستخدم، الدور، معلومات الاتصال "user_name": "Michael Schäfer"
preference الإعجابات، عدم الإعجابات، أسلوب العمل "communication": "Prefers concise responses"
fact حقائق قابلة للتحقق "office_location": "Berlin, Germany"
project حالة المشروع، القرارات "project_synapse": "v1.5.0 deployed"
skill مهارات المستخدم "skill_python": "Advanced, 10+ years"
mistake أخطاء سابقة يجب تجنبها "mistake_npm_version": "Always bump version"
context سياق ذو صلة بالجلسة "current_focus": "Working on docs system"
note ملاحظات متفرقة "note_idea": "Try Redis for caching"
عند الشك، استخدم `fact` للمعلومات القابلة للتحقق و `note` لكل شيء آخر. لا تفرط في التصنيف — أفضل أن يكون لديك `fact` واضح من `context` مربك.

المفاتيح: مُعرّفات ذات معنى

الحقل key هو مُعرّف الذاكرة. استخدم مفاتيح ذات معنى وثابتة:

مفاتيح جيدة:

  • user_name
  • project_synapse_status
  • preference_communication_style
  • mistake_npm_version_bump

مفاتيح سيئة:

  • mem_001 (ليس ذا معنى)
  • temp (ليس وصفيًا)
  • 2026-06-27-note (التاريخ لا يساعد الاستدعاء)

اصطلاحات تسمية المفاتيح

  • snake_case (أحرف صغيرة مع شرطات سفلية)
  • بادئة بالفئة: preference_*، project_*، mistake_*
  • استخدم أسماء وصفية، لا أفعالًا
  • أبقِها أقل من 50 حرفًا

الوسوم: للبحث والتصفية

تُمكّن الوسوم التصفية والبحث السريع. أضف 2-5 وسوم لكل ذاكرة:

{
  "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"]
}

أنماط الوسوم

  • أسماء المشاريع: synapse، synapse-mcp، synapse-chat
  • المواضيع: deployment، ci، database، auth
  • الحالة: active، completed، blocked
  • مؤشرات الأولوية: urgent، long-term
الوسوم غير حساسة لحالة الأحرف. استخدم أحرفًا صغيرة للاتساق.

الأولويات: كن واقعيًا

الأولوية استخدم لـ % من الذكريات
critical هوية المستخدم، المعلومات القانونية، القرارات غير القابلة للتراجع ~5%
high المشاريع النشطة، التفضيلات المهمة ~20%
normal معظم الحقائق، الملاحظات، السياق ~65%
low عابرة، جيد معرفتها ~10%
لا تعلّم كل شيء `critical`. إذا كان كل شيء حرجًا، فلا شيء كذلك. احجز `critical` للأشياء التي تسبب ضررًا حقيقيًا إذا نُسيت.

متى تخزّن ومتى لا تخزّن

خزّن دائمًا

  • هوية المستخدم (الاسم، البريد، الدور)
  • التفضيلات طويلة الأمد
  • قرارات المشروع والمبررات
  • الأخطاء السابقة والدروس المستفادة
  • الالتزامات المقطوعة للمستخدم

لا تخزّن

  • الحالة العابرة (استخدم المتغيرات بدلًا من ذلك)
  • سجل المحادثة الحرفي (نظام الدردشة يتولى هذا)
  • البيانات الحساسة (كلمات المرور، مفاتيح API)
  • الحقائق المشتقة بسهولة (التاريخ الحالي، محتويات الملفات)
  • السياق العابر (استخدم فئة context بأولوية منخفضة)

تحديث الذكريات

استدعِ POST /memory بنفس category + key يُحدّث الذاكرة الموجودة:

# التخزين الأول
store("project", "project_synapse_status", "v1.4.0 deployed", priority="high")

# لاحقًا: التحديث بنفس المفتاح
store("project", "project_synapse_status", "v1.5.0 deployed. CI green.", priority="high")
استخدم مفاتيح ثابتة حتى تُحدّث دون إنشاء مكررات. على الـ LLM إعادة POST لنفس المفتاح مع تغير المعلومات، لا إنشاء ذكريات جديدة.

دورة حياة الذاكرة

Create → Active → Stale → Archive → Delete
  • Create: POST /memory بسياق كامل
  • Active: استدعِ كثيرًا، حدّث حسب الحاجة
  • Stale: ما زال ذا صلة لكن غير مستخدم بنشاط (أولوية أقل؟)
  • Archive: عيّن الأولوية إلى low، أبقِ للمرجع التاريخي
  • Delete: DELETE /memory/:id عندما لا يعود ذا صلة

تنظيف دوري

# إيجاد الذكريات غير المُحدّثة منذ 90 يومًا
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):
        # إما حذف أو خفض الأولوية
        if is_obsolete(mem):
            delete_memory(mem["id"])
        else:
            update_memory(mem["id"], priority="low")

نمط: وراثة الذاكرة

للسياق الهرمي (مشروع → مشروع فرعي → مهمة):

# المشروع الأب
store("project", "project_synapse", "Main Synapse project", 
      tags=["synapse", "parent"], priority="high")

# مشروع فرعي (الوسوم تربط بالأب)
store("project", "project_synapse_docs", "Docs system for Synapse",
      tags=["synapse", "docs", "synapse-parent"], priority="high")

# مهمة محددة (الوسوم تربط بالمشروع الفرعي)
store("project", "task_docs_loader", "Implement docs-loader.ts",
      tags=["synapse", "docs", "task"], priority="normal")

يستطيع الـ LLM حينها البحث q=synapse+docs لإيجاد جميع الذكريات ذات الصلة.

نمط: سجل القرارات

خزّن القرارات مع المبررات حتى لا يعيد الـ LLM مناقشتها:

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

نمط: تجنب الأخطاء

خزّن الأخطاء مع تعليمات تجنب محددة:

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

أنماط مضادة يجب تجنبها

الخطوات التالية