من هذي الورقة بدا حبي لمجال الذاكرة في النماذج اللغوية.
واللي اشوفها مشكلة باقي ما انحلت والسبب لان حلها بيعتمد بشكل كبير على سياق مشكلتك.
فمثلًا هذي الورقة جت بالبداية ضرورة لحل مشكلة السياق فتخيل وقتها (اقول وقتها كانه قبل جيل وهي قبل ٣ سنين) كان حجم السياق ٨ الاف توكن. فكان مصيبة انك تقدر تكمل نقاش مع النموذج، ماتمشي شويتين الا وانت صاقع بجدار.
فاللي صار انهم حاولوا يسوون حل يعاملون النماذج اللغويه كانها نظام تشغيل وكيف تتعامل أنظمة التشغيل مع الذاكرة الافتراضية، فحنا مع عندنا الـRAM واللي هو ذاكرة صغيرة سريعة وشبهوا سياق النماذج اللغويه فيه وعندك ذاكرة بطيئة كبيرة واللي هو الدسك وفيه بينهم paging يتحكم بوش يطب الرام ووش يرجع للدسك.
وعلى هالاساس قسموا الذاكرة لطبقتين:
- السياق الاساسي واللي هو سياق النموذج الفعلي يكون مقسم مثل الصورة لثلاث اشياء واللي هي الـsystem prompt مساحته ثابته، والسياق الشغال وهذي مساحته صغيره وتكون قابله للتعديل وفيها النموذج يكتب ملاحظات وهو يمشي معك مثلًا (ممدوح يحب الزبدة ولايداني كثرة البربرة) والاخير طابور باخر الرسايل وكل ما امتلى انحذفت الرسايل الاقدم (فيه هنا خطوة تلخيص للرسايل اللي تنحذف وتنضاف بالسياق الشغال بس دقته تولي).
- السياق الخارجي وفيه مساحتين تخزينيه واحد تنضاف فيه كامل سجل المحادثه بدون اي اختصارات او شي والثاني تنضاف به اي معلومات او مستندات ممكن يحتاجها النموذج بعدين.
وطبعا هنا النموذج نفسه هو اللي يدير ذي الذاكرة، فمتوفرة له ادوات تخليه يعدل ويلعب بهذي الذاكرة مثل نظام التشغيل.
حل بسيط جدًا لكنه كان فعال لكن اكيد له مشاكل واجد واكبرها انه ماعنده تعقيد بالتعامل مع الذكريات.
فالمشكلة الاكبر مو انك منت قادر تبني حل، انت تقدر تبني حل "مخصص" ويكون كويس لك، لكن فيه صعوبة ببناء الحلول العامة.
وفيه مشاكل كثير لازم تتخذ قرارات فيها منها هل انك تسوي optimization للذكريات قصيرة المدى او البعيدة. طيب متى تقصقص (prune) الذكريات وتستغني عنها؟ طيب كيف ارتبها وادخلها للسياق؟ كيف تتعامل مع التناقضات؟ كيف تحافظ على المصادر؟ وهلّم جرا.
Infinite context: you heard it here first