الدرس 11 من 20

الذاكرة والمعرفة

الذاكرة قصيرة المدى مقابل طويلة المدى

3 دقيقة للقراءة

الوكلاء الفعالون يحتاجون كلا نوعي الذاكرة: قصيرة المدى للمحادثة الحالية وطويلة المدى للمعرفة المستمرة عبر الجلسات.

نظرة عامة على أنواع الذاكرة

النوع النطاق التخزين حالة الاستخدام
قصيرة المدى الجلسة الحالية في الذاكرة سياق المحادثة
طويلة المدى عبر الجلسات قاعدة بيانات/مخزن متجهات تفضيلات المستخدم، الحقائق
عرضية التجارب السابقة مخزن متجهات المواقف السابقة المماثلة
دلالية الحقائق والمفاهيم رسم معرفي معرفة المجال

الذاكرة قصيرة المدى

تتابع المحادثة الحالية:

from langchain.memory import ConversationBufferMemory

# مخزن بسيط - يخزن جميع الرسائل
memory = ConversationBufferMemory()
memory.save_context(
    {"input": "اسمي أليس"},
    {"output": "تشرفت بمعرفتك يا أليس!"}
)

# مخزن نافذة - يحتفظ بآخر N تبادلات
from langchain.memory import ConversationBufferWindowMemory
memory = ConversationBufferWindowMemory(k=10)

# ذاكرة ملخصة - تلخص الرسائل القديمة
from langchain.memory import ConversationSummaryMemory
memory = ConversationSummaryMemory(llm=llm)

الذاكرة طويلة المدى

تحافظ على المعلومات عبر الجلسات:

import json
from datetime import datetime

class LongTermMemory:
    def __init__(self, user_id, db):
        self.user_id = user_id
        self.db = db

    def remember(self, key, value, metadata=None):
        """تخزين حقيقة عن المستخدم"""
        self.db.upsert({
            "user_id": self.user_id,
            "key": key,
            "value": value,
            "metadata": metadata,
            "updated_at": datetime.now()
        })

    def recall(self, key):
        """استرجاع حقيقة مخزنة"""
        return self.db.query(
            user_id=self.user_id,
            key=key
        )

    def search(self, query):
        """بحث دلالي عبر الذكريات"""
        embedding = embed(query)
        return self.db.vector_search(
            user_id=self.user_id,
            embedding=embedding,
            top_k=5
        )

دمج أنواع الذاكرة

وكيل الإنتاج عادةً يستخدم أنظمة ذاكرة متعددة:

class AgentMemory:
    def __init__(self, user_id):
        # قصيرة المدى: المحادثة الحالية
        self.conversation = ConversationBufferWindowMemory(k=20)

        # طويلة المدى: حقائق المستخدم
        self.user_facts = LongTermMemory(user_id, facts_db)

        # عرضية: المحادثات السابقة
        self.episodes = VectorStore(f"episodes_{user_id}")

    def get_context(self, query):
        """بناء السياق من جميع أنواع الذاكرة"""
        context = {
            "recent": self.conversation.load_memory_variables({}),
            "user_info": self.user_facts.recall("preferences"),
            "similar_past": self.episodes.search(query, k=3)
        }
        return context

    def save_interaction(self, input, output):
        """الحفظ في كل من قصيرة وطويلة المدى"""
        # قصيرة المدى
        self.conversation.save_context(
            {"input": input},
            {"output": output}
        )

        # استخراج وتخزين الحقائق
        facts = extract_facts(input, output)
        for fact in facts:
            self.user_facts.remember(fact.key, fact.value)

استخراج الذاكرة

استخراج المعلومات القابلة للتذكر تلقائياً:

def extract_facts(conversation):
    """استخدام LLM لاستخراج الحقائق التي تستحق التذكر"""
    prompt = """
    استخرج الحقائق الرئيسية من هذه المحادثة التي يجب تذكرها:
    - تفضيلات المستخدم
    - التواريخ/الأحداث المهمة
    - الأهداف أو الاحتياجات المذكورة

    المحادثة: {conversation}

    الحقائق (تنسيق JSON):
    """
    return llm.generate(prompt.format(conversation=conversation))

أفضل الممارسات

الممارسة لماذا تهم
حدد نطاق الذاكرة بشكل مناسب لا تخزن كل شيء
أضف طوابع زمنية اعرف متى تم تعلم المعلومة
مكّن النسيان أزل المعلومات القديمة
احترم الخصوصية تعامل مع البيانات الشخصية بعناية
اختبر دقة الاسترجاع تحقق من استرجاع الذاكرة

بعد ذلك، سنناقش إبقاء الوكلاء محدثين مع انقطاعات المعرفة والتحديثات. :::

اختبار

الوحدة 3: الذاكرة والمعرفة

خذ الاختبار