ساختن حافظهی بلندمدت برای ایجنتها روی Elasticsearch
خلاصهٔ کاملتر
به گفتهی نویسنده، راهحل رایج برای حافظهی ایجنت اینه که همهی کانتکست قبلی رو بریزی تو پنجرهی کانتکست، ولی این از نظر هزینه، تأخیر و اثر «گمشدن در وسط» شکست میخوره. پنجرهی کانتکست حافظهی کوتاهمدته؛ چیزی که کم داریم یه حافظهی بلندمدتِ ماندگاره که بعد از پایان نشست هم بمونه و بشه فکت رو بر اساس محتوا، زمان و کاربر پیداش کرد.
اولین تصمیم طراحی اینه که چه نوع حافظهای ذخیره بشه. با الگوگیری از علوم شناختی، سه نوع حافظه تعریف میشه که به سه ایندکس Elasticsearch نگاشت میشن: رویدادی (episodic) یعنی رخدادهای زماندار مثل هر پیام کاربر؛ معنایی (semantic) یعنی فکتهای پایدار دربارهی کاربر؛ و رویهای (procedural) یعنی دستورالعملهای چندمرحلهای که شمارندهی موفقیت و شکست دارن. هر کدوم چرخهی عمر و قانون بهروزرسانی خودشو داره.
بازیابی دو مرحلهایه: اول یه جستوجوی هیبریدی که با RRF نتایج BM25 (تطبیق لغوی مثل شمارهی نسخه و کد خطا) و بردارهای متراکم (شکل معنایی سؤال) رو با هم ادغام میکنه، بعد یه cross-encoder reranker کاندیدها رو دقیقتر رتبهبندی میکنه. یه بار نوشتن، هم متن خام به ایندکس BM25 میره و هم با copy_to به یه فیلد برداری، پس فضای ذخیره ثابت میمونه.
هر پیام کاربر یه رویداد episodic مینویسه، و یه مرحلهی consolidation اینها رو به فکتهای semantic و playbookهای procedural تبدیل میکنه که بعد از پاکشدن تاریخچه هم میمونن. سیگنالِ «چه راهحلی جواب داد» هم از خود مکالمه گرفته میشه؛ مثلاً «مرسی، درست شد» شمارندهی موفقیت رو زیاد میکنه.
نویسنده میگه حافظهای که فقط اضافه کنه و هیچوقت حذف نکنه، آخرش غلط میشه. راهحل supersession ه: بهجای حذف فکت قدیمی، جدید رو مینویسه و قدیمی رو با superseded_by علامت میزنه تا ردِ ممیزی بمونه. مثلاً وقتی کاربر میگه از بریستول به ادینبرا رفته:
write_memory(text="Sarah lives in Edinburgh", supersedes_id="abc", contradiction="natural")بعدش هر بازیابی با یه فیلتر، فکت قدیمی رو مخفی میکنه ولی برای پرسش «کجاها زندگی کردم؟» بازم قابل بازیابیه. رتبهبندی هم با دو ضریب تنظیم میشه: افت زمانی (فکت تازهتر بالاتر) و بوستِ تعداد استفاده. ایزولهسازی چندکاربره هم با Document-Level Security انجام میشه؛ کلید هر کاربر فقط سندهای خودش (بهعلاوهی کاتالوگ مشترک) رو میبینه و این تضمین سمت سروره. کل لایه هم از طریق MCP به هر ایجنتی وصل میشه. تو یه ارزیابی روی ۱۶۸ سؤال، R@10 میانگین ۰٫۸۹ بوده بدون هیچ نشت بین کاربرها.
نکات کلیدی:
- پنجرهی کانتکست حافظهی کوتاهمدته؛ ایجنت به حافظهی بلندمدت ماندگار نیاز داره.
- سه نوع حافظهی رویدادی، معنایی و رویهای تو سه ایندکس جدا نگه داشته میشن.
- بازیابی هیبریدی (BM25 + بردار با RRF) بهعلاوهی یه cross-encoder reranker.
- تناقضها با supersession جایگزین میشن و ایزولهسازی کاربرها با DLS انجام میشه.




