Knaph

پنجره‌ی زمینه10 از 375 دقیقه مطالعه

مدل هیچ چیز را به یاد ندارد

لیلا در پیام دهمِ یک گفت‌وگو دوباره به نامش اشاره می‌کند و دستیار می‌گوید: «بله لیلا، همان‌طور که گفتید...». پس یادش بود. ولی کافی است یک گفت‌وگوی تازه باز کند تا ببیند دستیار هیچ نمی‌داند او کیست. آن حافظه کجا رفت، و اصلاً از اول کجا بود؟


لیلا پس مدل حافظه دارد. نامم را از ده پیام قبل یادش بود.

امید چیزی یادش بود، این که درست است. ولی اول یک سؤال. فکر می‌کنی همین الان چند نفر دارند با همین مدل حرف می‌زنند؟

لیلا لابد میلیون‌ها نفر.

امید و برای همه‌شان همین یک مدل است، با همان میلیاردها عدد. اگر نامِ تو درون مدل ذخیره شده بود، برای بقیه چه معنایی داشت؟

لیلا اینکه وقتی آن‌ها هم با مدل حرف می‌زنند، نامم را بداند. که عجیب است. و کمی نگران‌کننده.

امید درست است. عددهای درونِ مدل با گفت‌وگوی تو تغییر نمی‌کنند. آخرِ آموزش ثابت شده‌اند. پس نامت کجا می‌تواند باشد؟

لیلا پس در برنامه. برنامه گفت‌وگو را نگه می‌دارد.

امید بله، و همه‌ی ماجرا همین است. هر بار که پیامی می‌فرستی، برنامه کل گفت‌وگو تا آن لحظه را برای مدل می‌فرستد: پیام اولت، پاسخ اولِ مدل، پیام دومت و همین‌طور تا آخر، و تازه‌ترین پیامت در انتها. مدل همه را می‌خواند، یک پاسخ می‌نویسد و همه‌چیز را فراموش می‌کند.

لیلا هر بار؟ حتی وقتی گفت‌وگو طولانی است؟

امید هر بار. مدل هیچ‌وقت گفت‌وگو را «ادامه» نمی‌دهد. یک متنِ تازه می‌خواند که اتفاقاً کل گفت‌وگو در آن است، و می‌نویسد بعدش چه می‌آید.

لیلا پس گفت‌وگو یادش است، نه مدل. برای همین یک گفت‌وگوی تازه خالی شروع می‌شود: برنامه آن گفت‌وگوی قدیمی را نمی‌فرستد.

امید دقیقاً.


هر بار یک درخواست

هر بار که برنامه از مدل پاسخی می‌خواهد، یک درخواست (request) می‌فرستد: یک بسته متن با همه‌ی چیزهایی که مدل لازم دارد. در یک گفت‌وگو، بیشترِ این بسته تاریخچه‌ی گفت‌وگو (conversation history) است، یعنی همه‌ی پیام‌های تا آن لحظه. مدل درخواست را می‌خواند، پاسخش را می‌نویسد و هیچ چیزی نگه نمی‌دارد. درخواستِ بعدی باید دوباره همه‌چیز را با خود بیاورد.

سه درخواست به مدل در یک گفت‌وگو. اولی یک پیام دارد؛ دومی پیامِ اول، پاسخ و یک پیامِ تازه را دارد؛ سومی همه‌ی این‌ها و یکی بیشتر. مدل در فاصله‌ی آن‌ها چیزی نگه نمی‌دارد.

به برنامه‌ای که از یک درخواست تا درخواست بعدی هیچ چیزی نگه نمی‌دارد بی‌حافظه (stateless) می‌گویند. مدل‌های زبانی بی‌حافظه‌اند. شاید این ضعف به نظر برسد، ولی طراحیِ معقولی است:

  • یک مدل می‌تواند هم‌زمان به میلیون‌ها نفر خدمت کند، چون هیچ گفت‌وگویی درونش ذخیره نمی‌شود. هر درخواستی می‌تواند به هر نسخه‌ای از مدل، روی هر کامپیوتری برود.
  • چیزی از شما در مدل نمی‌ماند. حرف‌های شما در گفت‌وگوی ذخیره‌شده‌ی برنامه است که می‌توانید آن را ببینید و معمولاً پاکش کنید.
  • اختیارِ آنچه مدل می‌بیند با برنامه است. برنامه می‌تواند تاریخچه را کوتاه کند، بخش‌هایی را کنار بگذارد یا چیزهایی به آن اضافه کند. درس‌های بعدی بیشتر درباره‌ی این است که عامل‌ها از این آزادی چطور استفاده می‌کنند.

مدل در وسط است و هیچ چیزی درونش نگه داشته نمی‌شود. درخواست‌هایی از آدم‌های مختلف می‌رسند، هر کدام با گفت‌وگوی خودش، و هر کدام پاسخِ خودش را می‌گیرد.

بعضی برنامه‌های گفت‌وگو قابلیتی به نام «حافظه» دارند و هفته‌ها بعد هم شغل یا شهرتان را می‌دانند. آن هم همین‌طور کار می‌کند: برنامه یادداشت‌های کوتاهی درباره‌ی شما ذخیره می‌کند و بی‌سروصدا آن‌ها را در هر درخواستِ تازه می‌گذارد. مدل همچنان هیچ چیز را به یاد ندارد. در درس «حافظه یک فایل است» می‌بینید عامل‌ها این کار را چطور انجام می‌دهند.

این برای شما یعنی چه

چون کل تاریخچه در هر درخواست می‌رود، سه نتیجه دارد.

یک گفت‌وگوی تازه واقعاً خالی است. هر چه دیروز در گفت‌وگویی توضیح دادید، امروز آنجا نیست، مگر اینکه شما یا برنامه دوباره بیاوریدش.

گفت‌وگوی طولانی یعنی درخواستِ طولانی. پیامِ پنجاهمِ شما چهل‌ونه پیامِ قبلی را هم با خود می‌برد. در درس‌های بعدی می‌بینید که این هم هزینه دارد و هم سقف.

اشتباه‌هایی که در تاریخچه مانده‌اند مدام علیه شما کار می‌کنند. فرض کنید دستیار در اولِ کار حرفتان را بد فهمیده و سه پاسخ درباره‌ی گزارشی اشتباه نوشته است. شما اصلاحش می‌کنید. ولی آن سه پاسخِ اشتباه هنوز در تاریخچه‌اند و با هر درخواستِ بعدی فرستاده می‌شوند. مدل هر بار آن‌ها را می‌خواند و همان‌ها مدام او را به سمتِ فکرِ اشتباه برمی‌گردانند.


لیلا این خیلی چیزها را توضیح می‌دهد. هفته‌ی پیش بیست دقیقه به یک دستیار می‌گفتم «نه، آن نه» و او باز برمی‌گشت سرِ همان.

امید هر «آن نه» کنارِ همه‌ی «آن»ها نشسته بود. چه کاری بهتر جواب می‌داد؟

لیلا لابد یک گفت‌وگوی تازه. ولی آن‌وقت همه‌ی توضیح‌هایم از دست می‌رفت.

امید آشفتگی از دست می‌رود، ولی چیزی که یاد گرفته‌ای می‌ماند. خلاصه‌ای کوتاه بنویس از آنچه واقعاً می‌خواهی، با چیزهایی که حالا می‌دانی، و با همان از نو شروع کن.


امتحان کنید

در یک دستیار گفت‌وگو بنویسید: «رنگ محبوب من فیروزه‌ای است.» چند سؤالِ دیگر بپرسید و بعد بپرسید: «رنگ محبوب من چیست؟» می‌داند. حالا یک گفت‌وگوی تازه باز کنید و همان سؤال را بپرسید. اگر قابلیتِ حافظه‌ی برنامه‌تان روشن نباشد، نمی‌داند. همان مدل، با تاریخچه‌ای دیگر.

درست به کار بردن

  1. وقتی گفت‌وگویی به بیراهه رفت، با یک خلاصه‌ی تمیز از نو شروع کنید. بیراهه‌های قدیمی در تاریخچه می‌مانند و مدام مدل را هدایت می‌کنند؛ شروعِ دوباره با سه جمله‌ی روشن معمولاً از ده بار اصلاح کردن بهتر است.
  2. در گفت‌وگوی تازه، چیزهای مهم را دوباره بگویید. مدل فقط آنچه را در درخواست هست می‌داند، پس دانسته‌ها، سندها یا تصمیم‌های اصلی را دوباره بچسبانید.
  3. اگر برنامه‌تان اجازه می‌دهد، به‌جای روی هم گذاشتنِ اصلاح‌ها ویرایش کنید. خیلی از برنامه‌های گفت‌وگو اجازه می‌دهند پیامی قبلی را ویرایش کنید و پاسخ را از همان‌جا دوباره بگیرید. این کار بیراهه را از تاریخچه پاک می‌کند، به‌جای اینکه اصلاحی رویش بگذارد.

واژه‌های این درس

  • درخواست (request) - یک بسته متن که برای گرفتنِ یک پاسخ به مدل فرستاده می‌شود و باید همه‌ی چیزهای لازم را داشته باشد
  • تاریخچه‌ی گفت‌وگو (conversation history) - همه‌ی پیام‌های یک گفت‌وگو تا آن لحظه، که برنامه با هر درخواست دوباره می‌فرستد
  • بی‌حافظه (stateless) - چیزی را از یک درخواست تا درخواست بعدی نگه نداشتن؛ مدل‌های زبانی بی‌حافظه‌اند

ایده‌ی اصلی

مدل بین درخواست‌ها هیچ چیز را به یاد ندارد. گفت‌وگو فقط به این دلیل به نظر می‌رسد که یادش هست که برنامه هر بار کل گفت‌وگو را می‌فرستد. پس آنچه مدل «می‌داند» دقیقاً همان چیزی است که در درخواست آمده است.

دانش خود را بسنجید

ورود برای سنجش دانش خود از این درس و پیگیری پیشرفتتان.