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