رفتن به محتوا

تاریخچهٔ گفتگو

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

این‌ها چندان جانشین یکدیگر نیستند؛ بیشتر نردبانی‌اند که ارزان‌ترین پله اول آن است.

مکانیزم هزینه حفظ می‌کند از دست می‌دهد
حذف هیچ هر واژهٔ روایت نتایج قدیمی و معمولی ابزارها
ریزش تصویر هیچ متن پیرامون‌شان تصاویر قدیمی صفحه‌نمایش
عکس‌های فوری هیچ هر واژه، به‌صورت پیکسل خوانایی برای یک مدل بدون بینایی
خلاصه یک فراخوانی مدل یک روایت جزئیاتی که برنگزیده است

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

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

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

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

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

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

شکل بازسازی چنین است: سرِ واژه‌به‌واژه، میانهٔ تصویری، دُم واژه‌به‌واژه. سر، همان وظیفه و قیدهایی است که هر چیزی پایین‌تر به آن‌ها ارجاع می‌دهد؛ دُم، جایی است که کار همین حالا آنجاست. میانه همان بخشی است که کمترین بازخوانی و بیشترین هزینه را دارد.

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

یک اجرا واقعاً از چه چیزی ازسر گرفته می‌شود

بخش با عنوان “یک اجرا واقعاً از چه چیزی ازسر گرفته می‌شود”

در گذشته هر اجرای هارنس از تاریخچه‌ای خالی شروع می‌شد و پیوستگی را از یک بلوک <context> در پرامپت بازمی‌ساخت — یعنی خلاصه‌ای از گفتگو، نه خود گفتگو. سه چیز از این وضعیت نتیجه می‌شد:

  • ازسرگیری یعنی بازگویی از نو. مدل هرگز استدلال قبلی خودش یا بایت‌های واقعیِ برگشته از ابزارهایش را نمی‌دید؛ فقط توصیفی از آن‌ها را می‌دید.
  • عقبگرد با فرایند از بین می‌رفت. checkpoint یک اندیس در فهرست زندهٔ پیام‌هاست، پس راه‌اندازی دوباره همهٔ برچسب‌هایی را که مدل گذاشته بود از دست می‌داد.
  • تلاش دوباره نمی‌توانست «چیزی برای تلاش دوباره نیست» را از «چیزی بارگذاری نشده» تشخیص دهد. پس از راه‌اندازی دوباره، نوبت ناموفق در هر دو حالت از وضعیت زنده حذف شده است.

هر سه با ماندگار کردن رونوشت حل می‌شوند. رونوشت در هر مرز نوبت ذخیره می‌شود و هرگز میان نوبت ذخیره نمی‌شود: تاریخچه‌ای که بین یک فراخوانی ابزار و نتیجه‌اش ثبت شود، تاریخچه‌ای است که هیچ ارائه‌دهنده‌ای نمی‌پذیرد؛ پس خرابی در همان لحظه، نوبت قبل را بازیابی می‌کند، نه نیمهٔ نوبتی را که قابل بازپخش نیست.

اجرای ازسرگرفته‌شده به تازه‌ترین پیام‌هایش بریده می‌شود، آن هم در مرزی که نتیجهٔ ابزار یتیم نباشد — نتیجه‌ای که فراخوانی‌اش بریده شده، درخواستی است که ارائه‌دهنده‌ها یکسره ردش می‌کنند، و رونوشتی که فرستادنی نیست، از رونوشت کوتاه بدتر است.

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

شاخه‌کردن چیزی نمی‌نویسد. اشاره‌گر را جابه‌جا می‌کند. مسیری که ترک کرده‌اید هنوز آنجاست، پس بازگشت به آن جابه‌جایی دوبارهٔ اشاره‌گر است، نه بازیابی — و ویرایش یک پرامپت برای اجرای دوبارهٔ آن، دیگر به قیمت از دست دادن پاسخی که در حال مقایسه با آن بودید تمام نمی‌شود.

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

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

فورک، مسیر را با شناسه‌های تازه کپی می‌کند، نه با اشتراک سطرها. دو گفتگویی که سطرهای مشترک داشته باشند، پیام‌های بعدی یکدیگر را نشان می‌دهند، و این تنها کاری است که یک فورک نباید بکند.

عقبگرد روی همان اشاره‌گر سوار می‌شود

بخش با عنوان “عقبگرد روی همان اشاره‌گر سوار می‌شود”

جفت checkpoint / rewind درون اجرا، یک مرز نوبتِ پاک را علامت می‌زند، پس از یک کاوش به آن بازمی‌گردد و چکیده‌ای نگه می‌دارد. چون چک‌پوینت‌ها همراه رونوشت ماندگار می‌شوند، برچسبی که مدل پیش از راه‌اندازی دوباره گذاشته است هنوز همان‌جا که گذاشته شده فرود می‌آید. چک‌پوینتی که هدفش از یک برش جان سالم به در نبرده باشد حذف می‌شود، نه اینکه به نزدیک‌ترین مرز محدود شود — عقبگرد «تا برچسب» و فرود آمدن جایی دیگر، دقیقاً همان شکستی است که برچسب برای پیشگیری از آن وجود دارد.