الذاكرة والمعرفة
الذاكرة قصيرة المدى مقابل طويلة المدى
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))
أفضل الممارسات
| الممارسة | لماذا تهم |
|---|---|
| حدد نطاق الذاكرة بشكل مناسب | لا تخزن كل شيء |
| أضف طوابع زمنية | اعرف متى تم تعلم المعلومة |
| مكّن النسيان | أزل المعلومات القديمة |
| احترم الخصوصية | تعامل مع البيانات الشخصية بعناية |
| اختبر دقة الاسترجاع | تحقق من استرجاع الذاكرة |
بعد ذلك، سنناقش إبقاء الوكلاء محدثين مع انقطاعات المعرفة والتحديثات. :::