کالبدشکافی LLM؛ موجودِ نابغه اما آلزایمری!
یک تابع ریاضی احتمالاتی، بدون حالت و فاقد حافظه پیوسته
مدل زبانی بزرگ (LLM) در هسته مرکزی خود، هیچ شباهتی به یک موجود هوشیار با حافظه پیوسته ندارد؛ بلکه در واقع چیزی جز یک موجودِ آلزایمری و یک تابع ریاضی بدون حالت (Stateless) و احتمالاتی نیست که تعدادی توکن را به عنوان ورودی میگیرد و بر اساس محاسبات آماری، توکنهای بعدی را حدس میزند.
این موجودِ عجیب، نه به یاد میآورد ده ثانیه پیش چه گفته است، و نه اصلاً میداند کِی باید دهانش را ببندد! چون در دوران آموزشش تقریباً در هر موضوعی متون بشری را خوانده و از آنها الگو گرفته است، یک مقلد و تکمیلکننده الگوی بینقص است: از هر دری که با او وارد صحبت شوید و هر فازی که داشته باشید (فلسفی، علمی، صمیمی، رسمی یا کدنویسی)، دقیقاً از همان در و در همان فاز با شما همکلام میشود و جملات را ادامه میدهد.
اما مکانیزم بقا و فعالیت او لحظهای است: صرفاً با هر بار فراخوانی (API Call)، برای چند ثانیه بیدار میشود، نسبت به توکنهای ورودی، توکنهای خروجی را میسازد و آنقدر به تولید کلمه ادامه میدهد تا یا به توکنِ پایانِ جمله برسد و یا به سقف محدودیت توکن خروجی (max_tokens) که برایش ست شده برخورد کند؛ و بلافاصله بعد از آن برای همیشه خاموش میشود—طوری که انگار اصلاً هیچوقت روشن نبوده است!
۱. سیستمپرامپت (System Prompt) و فایلهای هویتی؛ نسخه بیداری
از آنجایی که این مدل در هر بار اجرا با ذهنی کاملاً پاکشده بیدار میشود، اولین ورودی مدل حیاتیترین بخش ماجراست. این ورودی اول همان چیزی است که به مدل شخصیت، چارچوب، لحن و جهت میدهد و در ادبیات فنی به آن سیستمپرامپت (System Prompt) گفته میشود.
در معماریهای امروزی، این سیستمپرامپتها بسته به نقشی که ایفا میکنند، اسمها و ساختارهای متنوعی به خود میگیرند و گاهی حتی به عنوان نوعی «حافظه مصنوعی» برای مدل استفاده میشوند تا مدل در لحظه بیدار شدن با هر پرامپت بداند که کیست و کجاست:
- فایلهای نقش و قوانین (ROLE.md یا SOUL.md یا RULES.md): به مدل میگویند اسمش چیست، چه شخصیتی دارد و چه قوانین و خط قرمزهایی برای گفتگو وجود دارد.
- فایلهای مهارت (SKILL.md): دستورالعملهای تخصصی و روش انجام کارهای خاص را به مدل یاد میدهند.
- فایلهای حافظه (MEMORY.md): خلاصهای از اتفاقات و دانستههای مهم قبلی را نگه میدارند.
۲. ترفندِ تاریخچه چت و برخورد به دیوارِ کانتکست
پس در یک چتبات معمولی چطور حس میکنیم مدل حرفهای دو دقیقه پیش ما را یادش هست؟ برای حل مشکل حافظه در چت، ما یک کلکِ مهندسی میزنیم: در هر نوبت، تمام ورودیها و خروجیهای قبلیِ گفتگو را برمیداریم و همراه با پیام جدیدِ کاربر، یکجا دوباره به مدل میفرستیم! وقتی مدل از خواب بیدار میشود، در کسری از ثانیه کلِ طومارِ مکالمه را از اول میخواند تا اول بفهمد بحث سر چه بوده، قبلاً چه جوابی داده، الان در کجای مکالمه ایستاده است، و بعد جوابِ بعدی را تولید کند.
این قضیه در هر پیام تکرار میشود و ادامه پیدا میکند؛ اما یک جای کار میلنگد: با طولانی شدن چت، این بستهٔ ورودی مدام حجیمتر میشود تا جایی که به محدودیت سقف ورودی مدل (Context Window Limit) میخورد. حتی خیلی قبلتر از اینکه ظرفِ ورودی کاملاً پر شود، شلوغیِ بیش از حدِ متن باعث میشود تمرکزِ ریاضیِ مدل به هم بریزد، جزئیات وسطِ مکالمه را گم کند (پدیدهای معروف به Context Rot یا پوسیدگی کانتکست) و دقت خروجی به شدت افت کند.
