منطق ایجنت‌ها › M1 — این سیستم‌ها چطور فکر می‌کنند
۱.۴ پایدار تدریسی ~۳۵ دقیقه

حافظه و فایل‌های متنی

قبل از این فصل: فصل ۱.۳

در یک نگاه

۱.۴.۱

پیش‌فرض: هیچ حافظه‌ای وجود ندارد

در فصل ۱.۳ دیدیم context هر چیزی است که مدل در این لحظه می‌بیند. حالا سؤال بعدی: وقتی session را می‌بندی، آن چیزها کجا می‌روند؟

جواب کوتاه است: هیچ‌جا. از بین می‌روند. مستندات رسمی همین را صریح می‌گویند — هر session با یک context خالی شروع می‌شود.

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

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

۱.۴.۲

حافظه‌ی session در برابر دائمی

دو چیز که راحت با هم اشتباه می‌شوند:

و کل ترفند همین است: حافظه‌ی دائمی هیچ سازوکار جادویی نیست. یک فایل متنی است. ایجنت در ابتدای کار می‌خواندش و محتوایش وارد context می‌شود — یعنی حافظه، در واقع «context ای است که خودکار پر می‌شود».

session دیروز بسته شد — خالی شد session امروز از صفر شروع شد session فردا باز هم از صفر یک فایل روی دیسک می‌ماند، و هر بار خوانده می‌شود می‌خواند session‌ها خط‌چین‌اند چون موقتی‌اند. فقط فایل است که می‌ماند.
حافظه‌ی session در برابر فایل. تنها چیزی که از یک روز به روز بعد می‌رسد، آن فایل است.
۱.۴.۳

MD چیست و چرا این‌قدر مهم شد

MD یا Markdown — که مارک‌داون خوانده می‌شود — یک فایل متنی ساده است با چند علامت کوچک: # برای عنوان، - برای فهرست، ستاره برای تأکید. همین.

چرا این قالبِ ساده این‌قدر مهم شد؟ سه دلیل:

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

۱.۴.۴

JSON و YAML و CSV در یک نگاه

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

قاعده‌ی ساده: برای چیزی که خودت می‌نویسی و می‌خوانی، MD. برای داده‌ی جدولی، CSV. آن دوتای دیگر معمولاً کارِ برنامه‌اند، نه تو.

۱.۴.۵

فایل حافظه‌ی مشترک

ساده‌ترین حافظه‌ی ممکن: یک فایل MD که چیزهایی را نگه می‌دارد که نمی‌خواهی هر بار دوباره توضیح بدهی.

چه چیزی داخلش می‌رود؟ هر چیزی که اگر ننویسی، دفعه‌ی بعد باید دوباره بگویی. مثلاً:

و چه چیزی نباید داخلش برود: رمز و کلید (درس ۷.۵) · چیزهایی که هر روز عوض می‌شوند · و هر چیزی که ایجنت خودش می‌تواند با نگاه‌کردن به فایل‌ها بفهمد.

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

۱.۴.۶

فایل قانون: حافظه‌ای که همیشه خوانده می‌شود

یک قدم جلوتر: بعضی ابزارها یک فایل مشخص دارند که در شروع هر session خودکار خوانده می‌شود. اسم عمومی‌اش در این دوره فایل قانون است.

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

و سه چیز که مستندات رسمی درباره‌اش می‌گویند و مهم‌اند:

ساختن یک فایل قانونِ خوب خودش یک درس کامل دارد (درس ۳.۴)، و در ماژول ۶ می‌بینی که همین فایل می‌تواند نقش «برنامه» را بازی کند.

۱.۴.۷

چه چیزی حافظه است، چه چیزی context

جمع‌بندی این ماژول در یک جدول ذهنی:

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

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

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

تمرین (ساختنی + توضیحی)

یک فایل MD کوچک بنویس، به ایجنت بده، و بگو چه تغییری در جوابش دیدی.

۱. در زمین بازی‌ات یک فایل بساز به اسم notes.md و پنج‌شش خط داخلش بنویس: من کی هستم، چه کاری می‌کنم، جواب‌ها را چطور می‌خواهم (کوتاه؟ با مثال؟ فارسی؟).

۲. یک session تازه باز کن و بدون دادن فایل، یک درخواست بده. جواب را نگه دار.

۳. session دیگری باز کن، این بار اول فایل را بده و بعد همان درخواست را بده.

۴. دو جواب را کنار هم بگذار و بنویس دقیقاً چه فرقی کردند.

پاسخنامه — یک نمونه‌ی خوب را ببین

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

«درخواست: از این فایل فروش یک خلاصه بده.»

«بدون فایل: یک خلاصه‌ی چهارده خطی داد با توضیح اینکه CSV چیست. عددها را داد بدون اینکه بگوید کدام ردیف‌ها را حساب کرده.»

«با فایل: پنج خط. توضیح CSV را نداد چون فهمید کارم حسابداری است. و زیر هر عدد نوشت از کدام ردیف‌ها آمده — چون در فایل خواسته بودم.»

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

برای عمق بیشتر

ذخیره شد