المستوى: متوسط — يفترض إنك بتشتغل على Claude API أو OpenAI، وعندك chatbot شغّال في إنتاج بيواجه مشكلة "النسيان" بعد كل جلسة، وعارف الـ basics بتاعة الـ embeddings و vector search.
لو chatbot شركتك بيرد على نفس العميل في يوم 1 و يوم 30 وكأنه شخص جديد، انت بتدفع ضريبة دلوقتي: العميل بيكرّر بياناته كل مرة، CSAT بينزل، والـ retention بيقع. Mem0 بيدّي Claude ذاكرة طويلة المدى بـ 35 سطر كود وتكلفة إضافية $0.0023 لكل تفاعل بس.
المشكلة باختصار
الـ LLM stateless بطبيعته. كل request بيوصل للنموذج بدون أي معلومة عن المحادثات السابقة. الحل التقليدي اللي بيستخدمه أغلب الناس: تحط الـ history كلها في الـ context window. ده بيشتغل لـ 50 رسالة الأولى، بعدها بتدخل في 3 مشاكل بتظهر مع بعض.
التكلفة بتزيد خطّياً مع طول التاريخ (300K token system prompt بيكلفك $0.90 لكل request في Claude Sonnet 4.6). الـ context window بيمتلي ومينفعش تحط معلومات السيستم الأهم. والنموذج بيبدأ يفقد التركيز على الأهم وسط الحشو ("lost in the middle" problem - ورقة Liu et al. 2023).
Mem0 بيحل المشكلة بإنه يفصل الذاكرة عن الـ context. بيستخرج "حقائق" من المحادثة (مثلاً: العميل اسمه أحمد، عنده شركة fintech، بيفضّل الردود الفنية المختصرة)، يخزّنها في vector store، وقت السؤال الجديد بيرجع 5 حقائق relevant بس بدل ما يبعت كل التاريخ.
إيه هو Mem0 من غير لف ودوران؟
قبل ما ندخل في التفاصيل التقنية، خلّيني أوريك المفهوم بمثال بسيط. تخيل سكرتيرة في عيادة دكتور. كل مريض بيدخل، السكرتيرة بتكتب في الملف 3-4 حاجات بس: "المريض ده اسمه إيه، بياخد إيه أدوية، عنده حساسية من إيه". لما المريض يرجع تاني بعد شهرين، السكرتيرة بتفتح الملف، تقرأ السطرين دول في 5 ثواني، وتدّي للدكتور صورة كاملة من غير ما المريض يحكي قصته من جديد.
السكرتيرة مش بتفتكر كل كلمة قالها المريض في الزيارة اللي فاتت. هي بتفتكر الحقائق المهمة اللي هتنفع في الزيارة الجاية. ده بالظبط اللي Mem0 بيعمله، بس بطريقة آلية في 4 خطوات:
- Extraction: بعد كل محادثة، Mem0 بيمرّر النص على Claude Haiku 4.5 ويسأله "إيه أهم 3-5 حقائق هنا تستحق التذكر؟"
- Embedding: بيحوّل كل حقيقة لـ vector (مصفوفة 1536 رقم) بـ OpenAI text-embedding-3-small.
- Storage: بيخزّن الحقيقة + الـ vector + الـ user_id في Qdrant أو Pinecone أو Weaviate.
- Retrieval: لما العميل يسأل سؤال جديد، Mem0 بيحوّل السؤال لـ vector ويدوّر على أقرب 5 حقائق بـ cosine similarity، ويحقنها في الـ system prompt قبل ما تبعت للنموذج.
الفرق الجوهري بين ده وبين "حط الـ history في الـ context" إن Mem0 بيرجّع الحقائق المرتبطة بالسؤال الحالي بس، مش كل التاريخ. لو العميل بيسأل عن caching في Redis، Mem0 مش هيرجّعلك إن العميل قال يوم الأربعاء اللي فات إن عنده قطة اسمها لولو.
الكود الكامل في 35 سطر
الكود ده شغّال على mem0ai 0.1.30+ مع Claude Sonnet 4.6 و Qdrant محلي. مفترض إنك ثبّت Qdrant بـ قبل كده.