🚀 جرب Zilliz Cloud، الـ Milvus المدارة بالكامل، مجاناً — تجربة أداء أسرع بـ 10 أضعاف! جرب الآن>>

milvus-logo
LFAI
الصفحة الرئيسية
  • عمليات الدمج
    • الوكلاء
  • Home
  • Docs
  • عمليات الدمج

  • الوكلاء

  • ميم0

الشروع في العمل مع Mem0 وMilvus

Open In Colab GitHub Repository

Mem0 عبارة عن طبقة ذاكرة ذكية لتطبيقات الذكاء الاصطناعي، مصممة لتقديم تفاعلات مخصصة وفعالة من خلال الاحتفاظ بتفضيلات المستخدم والتكيف المستمر بمرور الوقت. تُعد Mem0 مثالية لروبوتات الدردشة الآلية والأدوات التي تعتمد على الذكاء الاصطناعي، فهي تُنشئ تجارب سلسة مدركة للسياق.

في هذا البرنامج التعليمي، سنغطي في هذا البرنامج التعليمي العمليات الأساسية لإدارة ذاكرة Mem0 - إضافة واسترجاع وتحديث والبحث والحذف وتتبع سجل الذاكرة - باستخدام Milvus، وهي قاعدة بيانات متجهة مفتوحة المصدر عالية الأداء ومفتوحة المصدر تعمل على تشغيل التخزين والاسترجاع الفعال. ستوجهك هذه المقدمة العملية خلال عمليات الذاكرة التأسيسية لمساعدتك في بناء تفاعلات ذكاء اصطناعي مخصصة مع Mem0 وMilvus.

التحضير

تنزيل المكتبات المطلوبة

$ pip install mem0ai pymilvus

إذا كنت تستخدم Google Colab، لتمكين التبعيات المثبتة للتو، قد تحتاج إلى إعادة تشغيل وقت التشغيل (انقر على قائمة "وقت التشغيل" في أعلى الشاشة، وحدد "إعادة تشغيل الجلسة" من القائمة المنسدلة).

تكوين Mem0 مع ميلفوس

سنستخدم OpenAI باعتباره LLM في هذا المثال. يجب عليك إعداد مفتاح api OPENAI_API_KEY كمتغير بيئة.

import os

os.environ["OPENAI_API_KEY"] = "sk-***********"

والآن، يمكننا تهيئة Mem0 لاستخدام Milvus كمخزن للمتجهات

# Define Config
from mem0 import Memory

config = {
    "vector_store": {
        "provider": "milvus",
        "config": {
            "collection_name": "quickstart_mem0_with_milvus",
            "embedding_model_dims": "1536",
            "url": "./milvus.db",  # Use local vector database for demo purpose
        },
    },
    "version": "v1.1",
}

m = Memory.from_config(config)
  • إذا كنت تحتاج فقط إلى قاعدة بيانات متجهات محلية للبيانات الصغيرة الحجم أو النماذج الأولية، فإن تعيين uri كملف محلي، على سبيل المثال./milvus.db ، هو الطريقة الأكثر ملاءمة، حيث يستخدم تلقائيًا Milvus Lite لتخزين جميع البيانات في هذا الملف.
  • إذا كان لديك حجم كبير من البيانات، على سبيل المثال أكثر من مليون ناقل، يمكنك إعداد خادم Milvus أكثر أداءً على Docker أو Kubernetes. في هذا الإعداد، يُرجى استخدام عنوان الخادم والمنفذ كـ uri، على سبيل المثالhttp://localhost:19530. إذا قمت بتمكين خاصية المصادقة على Milvus، استخدم "<your_username>: <your_password>" كرمز مميز، وإلا فلا تقم بتعيين الرمز المميز.
  • إذا كنت تستخدم Zilliz Cloud، الخدمة السحابية المدارة بالكامل لـ Milvus، اضبط uri و token ، والتي تتوافق مع نقطة النهاية العامة ومفتاح واجهة برمجة التطبيقات في Zilliz Cloud.

إدارة ذكريات المستخدم مع Mem0 و Milvus

إضافة ذاكرة

تقوم الدالة add بتخزين نص غير منظم في ميلفوس كذاكرة، وربطه بمستخدم معين وبيانات وصفية اختيارية.

هنا، نقوم بإضافة ذاكرة أليس، "أعمل على تحسين مهاراتي في التنس"، إلى جانب البيانات الوصفية ذات الصلة بالسياق إلى ملفوس.

# Add a memory to user: Working on improving tennis skills
res = m.add(
    messages="I am working on improving my tennis skills.",
    user_id="alice",
    metadata={"category": "hobbies"},
)

res
{'results': [{'id': '77162018-663b-4dfa-88b1-4f029d6136ab',
   'memory': 'Working on improving tennis skills',
   'event': 'ADD'}],
 'relations': []}

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

يمكننا استخدام قيمة إرجاع الدالة add لاسترداد معرّف الذاكرة، مما يسمح لنا بتحديث هذه الذاكرة بمعلومات جديدة عبر update.

# Get memory_id
memory_id = res["results"][0]["id"]

# Update this memory with new information: Likes to play tennis on weekends
m.update(memory_id=memory_id, data="Likes to play tennis on weekends")
{'message': 'Memory updated successfully!'}

الحصول على كل الذاكرة لمستخدم

يمكننا استخدام الدالة get_all لعرض جميع الذكريات المدرجة أو التصفية حسب user_id في ميلفوس.

لاحظ أنه يمكننا أن نرى أن الذاكرة قد تغيرت الآن من "العمل على تطوير مهارات التنس" إلى "يحب لعب التنس في عطلات نهاية الأسبوع".

# Get all memory for the user Alice
m.get_all(user_id="alice")
{'results': [{'id': '77162018-663b-4dfa-88b1-4f029d6136ab',
   'memory': 'Likes to play tennis on weekends',
   'hash': '4c3bc9f87b78418f19df6407bc86e006',
   'metadata': None,
   'created_at': '2024-11-01T19:33:44.116920-07:00',
   'updated_at': '2024-11-01T19:33:47.619857-07:00',
   'user_id': 'alice'}]}

عرض سجل تحديث الذاكرة

يمكننا أيضًا عرض سجل تحديث الذاكرة من خلال تحديد الذاكرة_المعرف التي نهتم بها عبر الدالة history.

m.history(memory_id=memory_id)
[{'id': '71ed3cec-5d9a-4fa6-a009-59802450c0b9',
  'memory_id': '77162018-663b-4dfa-88b1-4f029d6136ab',
  'old_memory': None,
  'new_memory': 'Working on improving tennis skills',
  'event': 'ADD',
  'created_at': '2024-11-01T19:33:44.116920-07:00',
  'updated_at': None},
 {'id': 'db2b003c-ffb7-42e4-bd8a-b9cf56a02bb9',
  'memory_id': '77162018-663b-4dfa-88b1-4f029d6136ab',
  'old_memory': 'Working on improving tennis skills',
  'new_memory': 'Likes to play tennis on weekends',
  'event': 'UPDATE',
  'created_at': '2024-11-01T19:33:44.116920-07:00',
  'updated_at': '2024-11-01T19:33:47.619857-07:00'}]

البحث في الذاكرة

يمكننا استخدام الدالة search للبحث عن الذاكرة الأكثر ارتباطًا بالمستخدم.

لنبدأ بإضافة ذاكرة أخرى لـ أليس.

new_mem = m.add(
    "I have a linear algebra midterm exam on November 20",
    user_id="alice",
    metadata={"category": "task"},
)

والآن، نتصل بـ get_all مع تحديد user_id للتحقق من أن لدينا بالفعل إدخالات ذاكرة 2 للمستخدم أليس.

m.get_all(user_id="alice")
{'results': [{'id': '77162018-663b-4dfa-88b1-4f029d6136ab',
   'memory': 'Likes to play tennis on weekends',
   'hash': '4c3bc9f87b78418f19df6407bc86e006',
   'metadata': None,
   'created_at': '2024-11-01T19:33:44.116920-07:00',
   'updated_at': '2024-11-01T19:33:47.619857-07:00',
   'user_id': 'alice'},
  {'id': 'aa8eaa38-74d6-4b58-8207-b881d6d93d02',
   'memory': 'Has a linear algebra midterm exam on November 20',
   'hash': '575182f46965111ca0a8279c44920ea2',
   'metadata': {'category': 'task'},
   'created_at': '2024-11-01T19:33:57.271657-07:00',
   'updated_at': None,
   'user_id': 'alice'}]}

يمكننا إجراء search الآن من خلال توفير query و user_id. لاحظ أننا نستخدم افتراضيًا مقياس L2 للبحث عن التشابه، لذا فإن أصغر score يعني تشابهًا أكبر.

m.search(query="What are Alice's hobbies", user_id="alice")
{'results': [{'id': '77162018-663b-4dfa-88b1-4f029d6136ab',
   'memory': 'Likes to play tennis on weekends',
   'hash': '4c3bc9f87b78418f19df6407bc86e006',
   'metadata': None,
   'score': 1.2807445526123047,
   'created_at': '2024-11-01T19:33:44.116920-07:00',
   'updated_at': '2024-11-01T19:33:47.619857-07:00',
   'user_id': 'alice'},
  {'id': 'aa8eaa38-74d6-4b58-8207-b881d6d93d02',
   'memory': 'Has a linear algebra midterm exam on November 20',
   'hash': '575182f46965111ca0a8279c44920ea2',
   'metadata': {'category': 'task'},
   'score': 1.728922724723816,
   'created_at': '2024-11-01T19:33:57.271657-07:00',
   'updated_at': None,
   'user_id': 'alice'}]}

حذف الذاكرة

يمكننا أيضًا delete ذاكرة من خلال توفير الذاكرة المقابلة memory_id.

سنقوم بحذف الذاكرة "يحب لعب التنس في عطلات نهاية الأسبوع" حيث تم استرجاع memory_id الخاص بها بالفعل، واستدعاء get_all للتحقق من نجاح عملية الحذف.

m.delete(memory_id=memory_id)

m.get_all("alice")
{'results': [{'id': 'aa8eaa38-74d6-4b58-8207-b881d6d93d02',
   'memory': 'Has a linear algebra midterm exam on November 20',
   'hash': '575182f46965111ca0a8279c44920ea2',
   'metadata': {'category': 'task'},
   'created_at': '2024-11-01T19:33:57.271657-07:00',
   'updated_at': None,
   'user_id': 'alice'}]}

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟