وقتی در حال توسعه یک ایجنت هستید، بعد از چند پیام ابتدایی همهچیز عالی به نظر میرسد؛ اما با رسیدن به پیام پانزدهم، ناگهان تاخیر پاسخها از چند صد میلیثانیه به چند ثانیه میرسد و هزینه پردازش ابری چندین برابر میشود. دلیل آن ساده است: فرستادن کل تاریخچه چت در هر فراخوانی API.
دو راهکار دمدستی معمولاً برای حل این مشکل استفاده میشود:
• کوتاه کردن تاریخچه: کاهش هزینه به قیمت فراموشی سریع ایجنت و از دست رفتن زمینههای قبلی.
• تزریق ناشیانه حافظه در پرامپت سیستم: تغییر مداوم متن سیستم پرامپت که باعث نابودی کامل Prefix Cache در ارائهدهندگانی مثل OpenAI یا Anthropic میشود و هزینه تمام توکنها را به قیمت ۱۰۰٪ محاسبه میکند.
معماری حافظه در ایجنتهای سطح پروداکشن باید چند اصل کلیدی را رعایت کند:
• استخراج ناهمگام (Asynchronous): فرایند استخراج فکتها در پسزمینه اجرا شود تا درخواست کاربر معطل نماند.
• ساختار دومرحلهای پرامپت (Dual-Tier Architecture): قرار دادن اطلاعات ثابت کاربر بعد از سیستم پرامپت برای کش ماندن ۹۵٪ توکنها، و اضافه کردن حافظههای پویای استخراجشده در انتهای پرامپت.
• محدودیتهای منفی در استخراج: تعیین دقیق مواردی که نباید ذخیره شوند تا پایگاه حافظه با نویز پر نشود.
در پست جدید خبرنامه MLnotes، این معماری و نحوه پیادهسازی آن را به همراه جزئیات فنی و دیاگرام معماری بررسی کردهام:
🔗 https://mlnotes.substack.com/p/stop-dumping-chat-history-into-context
Post #501
216