حافظهٔ ایجنت رو بیشازحد مهندسی نکن
خلاصهٔ کاملتر
Eris یک ایجنت لوکال نوشتهشده با Rust ـه که حافظهٔ بلندمدتش فایلهای Markdown روی دیسکه. نویسنده میگه از اول قبول نداشته که کل چت رو بهعنوان حافظه نگه داره، چون به نظرش اون یادآوری نیست، انبار کردنه. برای همین رفت سراغ شبیهسازی حافظهٔ انسان بهعنوان یک رفتار واقعی: چیزی که دوباره بهش اشاره میشه بالا بیاد و چیزی که کسی سراغش نمیره کمکم محو بشه.
هر خاطرهٔ استیجشده یک promotion_score از نوع f64 داشت. یک پاس پسزمینه هر دو دقیقه بیدار میشد، یک مقدار ثابت از نمره کم میکرد (همون زوال) و بعد ممکن بود ورودی رو یک پله بالا یا یک پله پایین ببره. پلهها این سهتا بودن:
pub enum EphemeralTier {
Session, // just staged, short TTL
Scratch, // "getting interesting"
Promote, // eligible for memory:commit_all
}مشکل از جایی شروع میشد که commit_all فقط ورودیهای Promote رو به والت مینوشت. به گفتهٔ نویسنده مدلهای کوچک لوکال تو این دفترداری چندمرحلهای خوب نیستن، پس مدل یک چیز واقعاً مفید استیج میکرد، بعد commit_all میزد، هر چیزی که هنوز به Promote نرسیده بود بیصدا رد میشد و از دید مدل تولکال موفق بود ولی چیزی تو والت نمینشست. مدل دوباره تلاش میکرد، دوباره استیج میکرد و نوبتها میسوخت.
بخش بدتر اینه که این منحنی فراموشی اصلاً اهمیت رو نمیسنجید. هوک اشاره، پیام کاربر رو به کلمههای سهحرفی به بالا میشکست و با توکنهای اسم کلید مقایسه میکرد، بدون هیچ embedding ای. یعنی اگه coffee_preference استیج شده بود و کاربر میگفت «espresso order» یا «همون همیشگی»، هیچ امتیازی اضافه نمیشد. جملههای اشارهای مثل «اینو نگه دار» هم عملاً هیچوقت این هوک رو فعال نمیکردن، یعنی دقیقاً همونجایی که کاربر واضحترین اشاره رو میکرد.
نویسنده میگه برای همین سیستم مجبور شده قانون خودش رو بشکنه و یک AtomicBool مشترک بین دیمن و ارکستراتور بذاره تا موقع اجرای step() زوال با کامیت مدل مسابقه نده. جمعبندیاش یک وارونگیه: موقع نوشتن کمتر تصمیم بگیر و موقع خوندن بیشتر رتبهبندی کن، چون موقع نوشتن نمیدونی سه هفته بعد چی مهم میشه. با این حال میگه فعلاً پاکش نمیکنه و فقط یک // TODO: kill the ladder تو ریپو گذاشته.
نکات کلیدی:
- یک پاس پسزمینه هر دو دقیقه اجرا میشد و از promotion_score کم میکرد
- سه پله بود: Session، Scratch و Promote؛ فقط Promote با commit_all به والت میرفت
- بوست استیج ۳.۵ بود و آستانهٔ Session به Scratch ۳.۰، پس عملاً پلهٔ Scratch خودکار رد میشد
- افت نمره به زیر نصف آستانهٔ پلهٔ فعلی یعنی برگشت به پلهٔ قبلی
- هوک اشاره فقط همپوشانی رشتهای بود، پس مترادف و اشارههای زبانی رو نمیگرفت
- پیشنهاد نهایی نویسنده: دو حالت Staged و Committed کافیه و رتبهبندی موقع خوندن انجام بشه




