Mem0 · Claude API · Claude Code · مفتوح المصدر

تطبيقك بينسى المستخدم كل محادثة؟ Mem0 بيعطيه ذاكرة: الكود الكامل مع Claude، التركيب، وربطه بمشروعك من Claude Code

Mem0 طبقة ذاكرة مجانية ومفتوحة المصدر (حوالي 69 ألف نجمة): بتستخلص المهم من كل محادثة (الاسم، التفضيلات، شو بيشتغل عليه)، بتحفظه لكل مستخدم، وبترجّعه بالمحادثة الجاية. تحت: الفكرة بثلاث أسطر، التركيب (pip أو Docker أو المستضاف)، الكود الكامل لمساعد Claude بذاكرة جاهز للنسخ، إعداد Claude كنموذج الاستخلاص، وأمر Claude Code اللي بيربط Mem0 بمشروع موجود عندك.

ثلاث أسطر: search قبل الرد، add بعده

قبلالمستخدم بيحكي للبوت «اسمي أحمد وعندي متجر قهوة». بالمحادثة الجاية البوت بيسأل: «شو اسمك؟ شو شغلك؟». وإذا بعتت كل المحادثات القديمة مع كل رسالة، الكلفة بتطير والنموذج بيضيع.
بعدMem0 بيستخلص من المحادثة الحقائق بس («اسمه أحمد»، «عنده متجر قهوة إلكتروني»)، بيحفظها باسم المستخدم، وقبل كل رد بيرجّع أقرب 3 حقائق للسؤال. البوت بيعرفه، والكلفة أسطر مش صفحات.

الفكرة كلها بثلاث استدعاءات:

01
Memory()
بتنشئ الذاكرة مرة وحدة. افتراضياً بتخزّن محلياً على جهازك (قاعدة متجهات Qdrant على القرص).
02
search قبل الرد
«شو بنعرف عن هالمستخدم بخصوص هالسؤال؟» بترجع أقرب الذكريات بدرجة تشابه.
03
add بعد الرد
بتعطيه رسالة المستخدم ورد المساعد، وهو بيقرر شو يستحق الحفظ، وبيدمج أو يحدّث لو الحقيقة تغيّرت.

الـ user_id هو مفتاح كل شي: ذاكرة لكل مستخدم لحاله، وما بتختلط.

من pip لمساعد بيتذكّر

Python. في نسخة JavaScript بنفس الأسماء (npm install mem0ai).

1

التركيب: pip أو Docker أو المستضاف

المكتبة (الأسهل، كل شي على جهازك):

pip install mem0ai anthropic

بتحتاج مفتاحين بالبيئة: ANTHROPIC_API_KEY للرد والاستخلاص، وOPENAI_API_KEY لأن الـ embeddings الافتراضية (تحويل النص لأرقام للبحث) من OpenAI. بدك تستغني عن OpenAI؟ شوف القسم 3.

خادم كامل بواجهة (للفريق أو أكثر من تطبيق):

git clone https://github.com/mem0ai/mem0.git cd mem0/server make bootstrap

أمر واحد بيشغّل الحزمة بـ Docker، بيعمل حساب أدمن، وبيعطيك أول مفتاح API. الواجهة على http://localhost:3000. (البديل اليدوي: docker compose up -d من نفس المجلد وبتكمّل الإعداد من المتصفح.)

مستضاف عندهم (بدون تركيب):

حساب على app.mem0.ai ومفتاح API، وبتستعمل MemoryClient بدل Memory بنفس الفكرة. فيه خطة مجانية وخطط مدفوعة. الكود تحت للنسخة المفتوحة المصدر.

2

الكود الكامل: مساعد Claude بذاكرة

احفظه باسم memory_chat.py وشغّله. المرة الثانية بيتذكّر القهوة والمتجر بدون ما تعيد:

memory_chat.py

import os from anthropic import Anthropic from mem0 import Memory # needs ANTHROPIC_API_KEY (replies + memory extraction) and OPENAI_API_KEY (default embeddings) config = { "llm": { "provider": "anthropic", "config": {"model": "claude-sonnet-5-5", "temperature": 0.1, "max_tokens": 2000}, } } memory = Memory.from_config(config) client = Anthropic() def chat(user_id: str, message: str) -> str: # 1) before replying: what do we know about this user that relates to the message? found = memory.search(query=message, filters={"user_id": user_id}, top_k=3) notes = "\n".join(f"- {m['memory']}" for m in found.get("results", [])) system = "أنت مساعد ودود. ذكريات عن المستخدم:\n" + (notes or "- لا شيء بعد") # 2) the reply from Claude reply = client.messages.create( model="claude-sonnet-5-5", max_tokens=600, system=system, messages=[{"role": "user", "content": message}], ).content[0].text # 3) after replying: let Mem0 keep what matters from this exchange memory.add( [{"role": "user", "content": message}, {"role": "assistant", "content": reply}], user_id=user_id, ) return reply print(chat("ahmad", "اسمي أحمد وبشتغل على متجر إلكتروني للقهوة")) print(chat("ahmad", "اقترح لي اسم لحملة رمضان")) # remembers the coffee store
السطرشو بيعمل
Memory.from_config(config)ذاكرة بتستعمل Claude للاستخلاص بدل الافتراضي (OpenAI). بدون config، Memory() بتشتغل بس كلها على OpenAI.
memory.search(query=…, filters={"user_id": …}, top_k=3)أقرب 3 ذكريات لهالمستخدم. الصيغة الحالية بتاخد filters، مش user_id مباشرة (الإصدارات القديمة كانت تقبلها).
found["results"]قائمة، كل عنصر فيه memory (النص) وscore (درجة التشابه) وتاريخ الإنشاء.
system = …الذكريات بتروح بالـ system prompt، مش برسالة المستخدم، حتى Claude يعاملها كمعلومات مش كطلب.
memory.add([...], user_id=…)بتعطيه الرسالتين. هو بيستخلص الحقائق (مش الكلام كله)، وبيحدّث الموجود لو تغيّر.

جرّب بعدها: memory.get_all(filters={"user_id": "ahmad"}) وشوف شو حفظ بالضبط.

3

خلّي Claude هو اللي بيستخلص الذكريات

Mem0 بيستعمل نموذجين: LLM بيقرأ المحادثة وبيقرر شو يحفظ، وembedder بيحوّل النص لأرقام للبحث. الـ config اللي بالكود بيحط Claude بالدور الأول:

Anthropic as the LLM

config = { "llm": { "provider": "anthropic", "config": { "model": "claude-sonnet-5-5", "temperature": 0.1, "max_tokens": 2000, } } } memory = Memory.from_config(config)
  • الـ embedder: الافتراضي OpenAI (text-embedding-3-small) وبده OPENAI_API_KEY. Mem0 بيدعم بدائل بنفس مكان الـ config تحت مفتاح "embedder": Ollama (محلي ومجاني)، Hugging Face، Google، Vertex، Bedrock وغيرهم. القائمة والصيغة بالضبط على docs.mem0.ai/components/embedders.
  • التخزين: افتراضياً Qdrant على القرص بمجلد مؤقت. للإنتاج حط "vector_store" بالـ config على Qdrant أو Postgres (pgvector) أو غيرهم.
  • الموديل: claude-sonnet-5-5 توازن سعر وذكاء للاستخلاص. للرد نفسه بتختار اللي بدك بسطر messages.create.
الكلفة الحقيقية: Mem0 مجاني، بس كل add بيعمل نداء للنموذج عشان الاستخلاص، وكل search نداء embeddings. يعني كل رسالة بتكلّف نداء إضافي صغير. لسّا أرخص بكثير من إرسال المحادثة كلها كل مرة.
عندك تطبيق جاهز؟

ما تعيد كتابته. خلّي Claude Code يدخّل Mem0 فيه باختبارات.

4

ربطه بمشروع موجود من Claude Code

Mem0 ناشر skills رسمية لمساعدات البرمجة (Claude Code، Codex، Cursor…) بمجلد skills/ بالريبو. ركّبهم بأمرين من مجلد مشروعك:

npx skills add https://github.com/mem0ai/mem0 --skill mem0-integrate npx skills add https://github.com/mem0ai/mem0 --skill mem0-test-integration

بعدها افتح claude بنفس المجلد:

  1. إنت /mem0-integrate (للنسخة المفتوحة المصدر ضيف --product oss؛ الافتراضي المنصة المستضافة).
  2. Claude بيقرأ مشروعك، بيلاقي وين المحادثة بتصير، بيكتب اختبار أول، وبعدها بيضيف search قبل الرد وadd بعده بنفس أسلوب كودك.
  3. إنت /mem0-test-integration بيتحقق إن الذاكرة بتنحفظ وبترجع فعلاً.
  4. إنت راجع الـ diff قبل ما تعمل commit، خصوصاً مكان الـ user_id: لازم يكون معرّف المستخدم الحقيقي عندك مش قيمة ثابتة.
  • أول مرة تستعمل npx skills بيسألك لأي أداة تركّب: اختار Claude Code (أو ضيف -a claude-code للأمر).
  • ما بتحب أدوات طرف ثالث؟ انسخ مجلد skills/mem0-integrate من الريبو لـ .claude/skills/ بمشروعك، ونفس الأمر بيشتغل. تفاصيل الـ skills عموماً: دليل الـ skills.
  • شي ثاني بنفس الاسم: في plugin رسمي لـ Claude Code اسمه mem0 بيعطي Claude Code نفسه ذاكرة عن جلساتك (/mem0:remember، /mem0:search…) وبيحتاج مفتاح منصة Mem0. هذا لذاكرة Claude Code، مش لتطبيقك.
5

أخطاء شائعة

الغلطةالصح
بتمرّر user_id= لـ searchالإصدار الحالي بيرفضها: filters={"user_id": user_id}. وlimit= بتتجاهل بصمت، الصح top_k=.
نفس الـ user_id لكل الناسبتختلط ذكريات المستخدمين. استعمل معرّف المستخدم من نظام الدخول عندك.
بتحفظ بعد كل رسالة وبتدوّر بكل الذاكرةالحفظ بعد الرد صح، بس top_k=3 أو 5 بيكفي. ذكريات أكثر بالـ system prompt ما بتعني رد أحسن.
بتتوقع يحفظ كل الكلامMem0 بيحفظ حقائق مستخلصة («بيحب القهوة المختصة») مش النص كامل. بدك السجل الحرفي؟ احفظه بقاعدة بياناتك عادي.
بتنسى مفتاح الـ embeddingsالخطأ الأول اللي بيطلع لكل واحد. إما OPENAI_API_KEY بالبيئة، أو embedder محلي بالـ config.
Qdrant بالمجلد المؤقت بالإنتاجبينمسح مع إعادة التشغيل. حط vector_store على قاعدة دائمة قبل ما تطلّع التطبيق.
?

أسئلة شائعة

مجاني؟
المكتبة والخادم مفتوحين المصدر برخصة Apache-2.0، تشغّلهم عندك ببلاش. اللي بيكلّف هو نداءات النموذج (Claude + embeddings) حسب استعمالك. المنصة المستضافة إلها خطة مجانية وخطط مدفوعة.
وين بتنحفظ الذكريات؟
بالنسخة المفتوحة المصدر على جهازك أو خادمك (Qdrant أو القاعدة اللي بتحددها). ما بيطلع شي لـ Mem0 إلا إذا اخترت المنصة المستضافة.
بيشتغل بالعربي؟
إيه. الاستخلاص بيعمله Claude، وبيفهم العربي عادي. الذكريات المحفوظة ممكن تطلع بالإنجليزي أحياناً حسب النموذج، وهذا ما بيأثر على البحث.
شو الفرق عن إني أبعت المحادثات القديمة كلها؟
الكلفة والدقة. إرسال كل شي بيكبر مع الوقت وبيخلّي النموذج يضيع بين التفاصيل. Mem0 بيبعت أقرب 3 حقائق بس، فالرد أرخص وأدق، وبيشتغل حتى بعد مئات المحادثات.
بيحفظ أسرار المستخدمين؟
بيحفظ اللي بيقرر إنه مهم من المحادثة، وممكن يشمل معلومات شخصية. إنت المسؤول: خبّر المستخدمين، واعطيهم طريقة يمسحوا ذاكرتهم (في delete_all بالمكتبة).
لازم Python؟
لا، في نسخة JavaScript (npm install mem0ai) بنفس الأسماء: add وsearch مع userId، وconfig بنفس الشكل لـ Anthropic.
✓ تم النسخ

Get the next guide first

Leave your email and new guides reach you as soon as they are out. No spam.

Your email stays with me, and you can ask me to delete it any time.