منطق ایجنت‌ها › M6 — ساختن سیستم بدون کد
۶.۳ پایدار تدریسی ~۳۰ دقیقه

MD به‌عنوان حافظه و رابط

قبل از این فصل: فصل ۶.۱ · فصل ۱.۴

در یک نگاه

۶.۳.۱

فایل حافظه: چه چیزی داخلش

در فصل ۱.۴.۱ گفتیم پیش‌فرض این است که هیچ حافظه‌ای وجود ندارد — هر session از صفر شروع می‌شود. فایل حافظه جوابِ همان مسئله است، و حالا می‌خواهیم درست بنویسیمش.

سؤال درست این نیست «چه چیزی را نگه دارم؟» — که جوابش «همه‌چیز» می‌شود و به فایلی می‌رسی که کسی نمی‌خواندش. سؤال درست این است:

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

پس چه چیزهایی می‌مانند:

و چه چیزی نباید داخلش باشد: هر چیزی که از خودِ سیستم قابل دیدن است. فهرست فایل‌ها، محتوای پوشه‌ها، چیزهایی که با یک نگاه معلوم‌اند — نوشتنشان یعنی دو نسخه‌ی حقیقت داری که از هم جدا می‌افتند. و البته هیچ رمز و کلیدی (فصل ۵.۳.۵).

۶.۳.۲

لینک بین فایل‌ها

یک فایل حافظه‌ی بزرگ، خیلی زود به فایلی تبدیل می‌شود که خودت هم نمی‌خوانی‌اش. راه‌حل، شکستن است — ولی شکستنی که تکه‌ها را گم نکند. یعنی لینک.

در Markdown دو شکل رایج دارد:

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

و یک قاعده که فایل حافظه را زنده نگه می‌دارد: یک فایل فهرست داشته باش که به بقیه لینک می‌دهد. آن یکی را همیشه می‌خوانی؛ بقیه را وقتی لازم شد. این همان کاری است که context engineering توصیه می‌کند — کوچک‌ترین مجموعه‌ی پرسیگنال، نه همه‌چیز یک‌جا (فصل ۲.۷.۲).

۶.۳.۳

فایل وضعیت: کجا بودیم

حالا مهم‌ترین تفکیک این فصل. حافظه و وضعیت دو چیز جدا هستند، و اگر یکی‌شان کنی، هر دو را از دست می‌دهی:

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

یک فایل وضعیت خوب چهار چیز دارد و کوتاه است:

  1. کجا هستیم — یک جمله.
  2. چه چیزی تمام شد — از آخرین دفعه.
  3. قدم بعدی چیست — مشخص و قابل‌شروع، نه «ادامه‌ی کار».
  4. چه چیزی گیر است — و منتظر چه کسی.

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

۶.۳.۴

یک فایل، یک مسئولیت

این قاعده‌ی جمع‌بندیِ فصل است، و آزمونش یک سؤال است: «این فایل کِی عوض می‌شود؟» اگر دو جواب داشت، باید دو فایل باشد.

مثال روشن:

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

یک فایده‌ی جانبی هم دارد که به M1 برمی‌گردد: می‌توانی فقط همان فایلی را به ایجنت بدهی که به کار این کار می‌آید. سه فایل کوچک، سه انتخاب؛ یک فایل بزرگ، فقط یک انتخابِ گران (فصل ۱.۳.۴).

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

تمرین (ساختنی)

برای سیستمی که در فصل ۶.۲ طراحی کردی، دو فایل واقعی بنویس:

  1. _حافظه.md — با حداقل دو تصمیم و دلیلشان، و یک چیزی که امتحان شد و جواب نداد.
  2. _وضعیت.md — با همان چهار بخش بالا.
  3. بعد آزمون فراموشی: فایل وضعیت را به ایجنت بده و بگو «فقط با خواندن این، بگو قدم بعدی چیست.» اگر نتوانست، فایل ناقص است.
پاسخنامه — دو نمونه، و چرا آزمون فراموشی سخت‌گیر است

_حافظه.md (تکه‌ای از آن):

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

_وضعیت.md: «کجا هستیم: ساختار پوشه‌ها ساخته شد و قانون نام‌گذاری نوشته شد. · تمام شد: انتقال ۱۲ پرونده‌ی قدیمی. · قدم بعدی: پرونده‌های خرداد را منتقل کن؛ از فایل ۱۴۰۵-۰۳-... شروع کن. · گیر: سه پرونده تاریخ ندارند — باید از خودِ مشتری بپرسم.»

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

ذخیره شد