Pi چطور کانتکست رو فشرده میکنه
خلاصهٔ کاملتر
تو یه پست از تیم مهندسی Earendil اومده که هر جلسهٔ طولانی با ایجنتهای کدنویسی مثل Pi، Claude Code یا Codex دیر یا زود به کامپکشن (compaction) میرسه، یعنی فشردهکردن تاریخچهٔ گفتگو. دلیلش سادهست: مدلهای زبانی context window محدودی دارن — یعنی همون مقدار متنی که مدل موقع تولید جواب میتونه ببینه. هر درخواست شامل سیستمپرامپت، تعریف ابزارها، فایلهایی مثل AGENTS.md و کل تاریخچهست، و این تاریخچه با هر تِرن بزرگتر میشه تا جایی که درخواست با خطای سرریز رد میشه.
از اینجا به بعد فقط دو راه داری. یا یه گفتگوی جدید و خالی شروع میکنی که همهٔ تصمیمها و کارهای نیمهتموم رو دور میریزه — به گفتهٔ نویسنده گاهی همین بهترین کاره، چون کیفیت خروجی مدل با بزرگشدن کانتکست افت میکنه — یا یه نمایش کوچیکتر از همون گفتگو میسازی. کار دوم همون کامپکشنه: بخشی از تاریخچه با یه خلاصه جایگزین میشه و جا برای پیامها و ابزارهای بعدی باز میشه.
تو Pi کامپکشن وقتی فعال میشه که مصرف کانتکست به سقف پنجره نزدیک شه، و با دستور /compact هم میشه دستی اجراش کرد. Pi بعد از تمومشدن هر تِرن چک میکنه، ولی اگه وسط تِرن به خطای سرریز بخوره همونجا هم فشرده میکنه. یه بودجهٔ توکنی قابل تنظیم داره که پیشفرضش ۲۰ هزار توکنه؛ یعنی تقریباً ۵ تا ۲۰ تِرن آخر دستنخورده میمونن و هرچی قبل از اون نقطهست سریالایز و خلاصه میشه.
جالبترین بخش طراحیش اینه که درخواست کامپکشن یه درخواست کاملاً مستقله. سیستمپرامپتش عوض میشه — بهجای «تو یه دستیار کدنویسی خبرهای» میگه «تو یه دستیار خلاصهسازی کانتکستی» — و پیام کاربر یه خلاصهٔ ساختاریافته با بخشهای هدف، پیشرفت و تصمیمهای کلیدی میخواد. چون هیچی از تاریخچهٔ فعلی همراهش نیست، میشه با یه مدل ارزونتر اجراش کرد. نویسنده خروجی خوب رو مثل تحویل شیفت توصیف میکنه: فقط چیزی که برای ادامهٔ کار لازمه.
هزینهای که بابتش میدی prompt caching ـه، یعنی همون کشی که درخواستهای تکراری یه گفتگو رو ارزونتر میکنه. این کش به تطابق دقیق پیشوند نیاز داره، پس بهمحض اینکه خلاصه جای تاریخچه رو میگیره، تِرنهای نگهداشتهشده هم چون بعد از یه پیشوند جدید قرار گرفتن دوباره باید پردازش شن. Pi خلاصه رو بهصورت متن ساده تو سشن ذخیره میکنه تا خوانا بمونه و بشه با عوضکردن مدل هم ادامه داد.
نکات کلیدی:
- رد شدن از سقف کانتکست، درخواست رو با خطایی مثل Request exceeds the maximum size برمیگردونه
- بودجهٔ پیشفرض پیامهای نگهداشتهشده تو Pi ۲۰ هزار توکنه، تقریباً معادل ۵ تا ۲۰ تِرن آخر
- درخواست کامپکشن مستقله و میتونه روی یه مدل ارزونتر اجرا شه
- کامپکشن کش پرامپت رو میشکنه، چون کش به تطابق دقیق پیشوند نیاز داره
- خلاصه بهصورت متن ساده تو سشن ذخیره میشه، پس بین مدلهای مختلف قابل استفادهست
- با نوشتن یه اکستنشن میشه پرامپت کامپکشن دلخواه خودت رو جایگزین کرد




