حافظه ترکیبی: ویکتور + گراف + KV
Type: Build
Languages: Python (stdlib)
Prerequisites: Phase 14 · 07 (MemGPT), Phase 14 · 08 (Letta Blocks)
Time: ~75 minutes
اهداف یادگیری
- توضیح دهید که چرا یک ذخیره (تنها متری، فقط گراف، فقط KV) برای حافظه عامل کافی نیست.
- نام سه فروشگاه متوازي Mem0 و هرکدوم براي چي بهینه ميشه
- نمره های فیوژن Mem0 را شرح دهید ارتباط، اهمیت، تازه بودن و اینکه چرا این یک مبلغ وزن شده است و نه یک سلسله مراتب.
- یک حافظه ۳ طبقه ای با یک
add()که به هر سه و یک می نویسدsearch()که نتایج را ترکیب می کند.
مشکل
یک فروشگاه برای یکی از سه کلاس سوال اشتباه است:
- Semantic similarity"ما هفته گذشته درباره ی "آژانت درف" چه بحثی کردیم؟" "وکتور" برنده شد؛ "کوی" و "گراف" شکست خورد.
- Fact lookup "رقم تلفن کاربر چیست؟" KV برنده می شود؛ ویکتور ضایع کننده است، نمودار بیش از حد تلف شده است.
- Relationship reasoning "کدام مشتری ها یک واحد صورتحساب را به اشتراک می گذارند؟" نمودار برنده می شود؛ ویکتور و KV نمی توانند پاسخ دهند.
ماموران تولید همه سه تا را در یک جلسه منتشر می کنند. حافظه یک فروشگاه همیشه برای دو مورد اشتباه است. کمک Mem0 است که سه تا را به پشت یک واحد متصل کند.add-بله .searchسطح با یک تابع نمره ای که آنها را ادغام می کند.
مفهوم
سه مغازه در موازی
Mem0 (arXiv:2504.19413, آوریل 2025) در add(text, user_id, metadata):
- نکات کاندیدایی را از متن استخراج کنید (یک مرحله مبتنی بر LLM).
- هر واقعیت را به ذخیره ویکتور (درخشان) برای جستجوی معنوی بنویسید.
- هر واقعیت را به فروشگاه KV که روی (user_id، fact_type، entity) برای جستجوی O(1) کلیدگذاری شده است بنویسید.
- هر واقعیت را به ذخیره نمودار (Mem0g) به عنوان لبه های تایپ شده برای سوالات رابطه بنویسید.
.search(query, user_id):
- مغازه ویکتور با وارد کردن کوسینس top-k را باز می گرداند.
- ذخیره KV ضربه های مستقیم را که در کلید استناد به جستجو (user_id، نوع، نهاد) باز می گرداند.
- ذخیره نمودار زیر نمودار را که از اجزای جستجو قابل دسترسی است باز می کند.
- یک لایه نمره ای سه را ترکیب می کند.
امتیاز فیوژن
score = w_relevance * relevance(q, record)
+ w_importance * importance(record)
+ w_recency * recency(record)- Relevance ویکتور کوسین، KV دقیقا مطابق، وزن مسیر نمودار.
- Importance در زمان نوشتن یا آموخته شده (بعضی از حقایق مهم تر هستند: نام، شناسنامه، سیاست ها).
- Recency کاهش نمایی در طول زمان از آخرین نوشتن یا خواندن.
وزن ها به هر محصول تنظیم می شوند.w_recencyبرای ماموران چت؛ بالاترw_importanceبرای مامورین انطباق؛ بالاترw_relevanceبرای مامورین بازیافت
یادآوری و استدلال زمانی
Mem0g یک آشکارساز درگیری را اضافه می کند. هنگامی که یک واقعیت جدید با یک حاشیه موجود متناقض است، حاشیه موجود نامطابق است اما حذف نمی شود. سوالات زمانی ("شهر کاربر در ماه مارس چه بود؟") از زیرگراف معتبر در زمان عبور می کنند.
این رفتار درجه ی رعایت است که الگوی باطل سازی لتا به طور کلی بیان می کند.
شماره های مرجع
گزارش های Mem0 (2025):
- LoCoMo(تکبیر طولانی مدت مکالمه): 91.6
- LongMemEval(تذكر دوره ای بلندمعیاری): 93.4
- BEAM 1M(برخوردی از حافظه 1M-token): 64.1
خطوط پایه مقایسه (مکمل زمینه 128k LLM، فروشگاه ویکتور فلیٹ، KV فلیٹ) همه با 10+ امتیاز از دست می دهند. معیارها به تنهایی انتخاب را توجیه نمی کنند شکل عملیاتی انجام می دهد اما اعداد نشان می دهند طراحی فیوژن یک اشتباه گردآوری نیست.
طبقه بندی دامنه
Mem0 حافظه رو به واسطه دامنه تقسیم می کنه:
- User memory در طول جلسات ادامه دارد، روی کلید قرار می گیرد
user_id. . - Session memory در یک رشته باقی می ماند.
- Agent memory حالت نمونه هر عامل
هر نوشته یک دامنه را انتخاب می کند. بازیافت می تواند در سراسر دامنه با وزن هر دامنه جستجو کند. مخلوط کردن دامنه بدون فکر این است که چگونه شما "مساعد به آلیس در مورد پروژه باب" حوادث را دریافت کنید.
جایی که این الگوی اشتباه می شود
- Embedding drift.نتایج ویکتور که در صد سوال اول درست به نظر می رسد با رشد کورپوس کاهش می یابد. اضافه کردن دوره ای از نو وارد کردن نوارهای بالا N استفاده می شود.
- KV schema creep.
(user_id, type, entity)به نظر ساده مياد تا هر تيم خودش رو اضافه کنهtypeهر سه ماهه نوعي را بازرسي ميکنه - Graph explosion.یک استخراج کننده شور 50 لبه در هر پیام اضافه می کند.
addتماس بگیرید، حاشیهای کم اعتماد را رها کنید.
آن را بسازید
code/main.pyدر stdlib الگوی سه طبقه را پیاده سازی می کند:
VectorStoreشباهت ساده تر از همپوشانی توکن به عنوان یک جایگزین ادغامKVStoreدكت با کلید(user_id, fact_type, entity). .GraphStoreلبهای تایپ شده (موضوع، رابطه، شی، معتبر)Mem0نمای سطح بالا باadd()،search()، سنجش همگرايش و بازيافتي با توجه به دامنه- يه رد اثري از يک مکالمه چندتا استفاده کننده و چند جلسه
اجرا کن
python3 code/main.pyخروجی سه مسیر جدا از یادآوری را به همراه top-k مخلوط نشان می دهد. وزن های امتیاز در بالای main()و به تغییر رتبه بندی نگاه کنید.
ازش استفاده کن
- Mem0 (Apache 2.0) آماده تولید. خود میزبان با Postgres + Qdrant + Neo4j، یا از ابر مدیریت شده استفاده کنید.
- Letta سه سطح هسته/بازگیره/آرشیو؛ پس زمینه های ویکتور و نمودار خود را بیاورید.
- Zep جایگزین تجاری با KG زمانی و استخراج واقعیت.
- Custom builds وقتی که شما نیاز به کنترل دقیق بر روی استخراج کننده (امتثال) یا وزنه های فیوز (آژان های صوتی که در آن تازه برتری دارد) دارید.
-باده
outputs/skill-hybrid-memory.mdیک استفاد حافظه سه طبقه با یک سنجنده فیوژن، تکسونومی دامنه و اعتبار ناپذیری زمانی به کار گرفته شده است.
تمرینات
- جایگزین شباهت بردار اسباب بازی با یک مدل واقعی گنجانده (ترانسفارمرهای جمله، اولما، گنجانده های OpenAI) کنید. یادآوری@10 را در یک مکالمه طولانی مصنوعی اندازه گیری کنید. آیا رتبه بندی بیش از 1000 نوشته است؟
- یک سوال زمانی اضافه کنید:
search(query, as_of=timestamp)فقط پرونده هاي معتبر در زمان يا قبل از آن زمان رو برگردونيد. - یک آشکارساز درگیری را پیاده سازی کنید: اگر یک واقعیت درآمده با یک لبه نمودار متناقض باشد، لبه قدیمی را باطل کنید و هر دو را ثبت کنید. آزمون بر روی "کاربری در برلین زندگی می کند" -> "کاربری در لیزبن زندگی می کند".
- پورت کردن گلوله ی فیوژن تا شامل یک
user_feedbackاندازه (برابر دستان ثبت شده) چگونه از بازی جلوگیری کنید (آموز کننده فقط پرونده هایی را که قبلاً دوست داشته است باز می گرداند) ؟ - اسناد Mem0 را بخوانید (
docs.mem0.ai. اسباب بازي رو به اينجا ببرmem0تماس های مشتری. کیفیت بازیافت را در 20 سوال تست مشابه مقایسه کنید.
اصطلاحات کلیدی
| Term | What people say | What it actually means |
|---|---|---|
| Hybrid memory | "Vector plus graph plus KV" | Three stores written in parallel, fused on retrieval |
| Fact extraction | "Memory ingestion" | LLM step that breaks text into (entity, relation, fact) tuples |
| Fusion scoring | "Relevance ranking" | Weighted sum of relevance, importance, recency |
| Scope | "Memory namespace" | user / session / agent — determines who sees what |
| Mem0g | "Memory graph" | Typed edges with temporal validity for relationship queries |
| Temporal invalidation | "Soft delete" | Mark contradicted edges invalid; never delete |
| Embedding drift | "Retrieval rot" | Vector quality degrades as corpus grows; re-embed periodically |
خواندن بیشتر
- Chhikara et al., Mem0 (arXiv:2504.19413) کاغذ اصلی
- Mem0 docs API تولید، SDK ها، ابر مدیریت شده
- Packer et al., MemGPT (arXiv:2310.08560) پیشگام مجازی
- Letta, Memory Blocks blog طرح سه طبقه
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.