وقتی چند ایجنت هوش مصنوعی را همزمان به کار میگیرید، سرعت توسعه در نگاه اول شگفتانگیز به نظر میرسد؛ اما اگر مرز کارها مشخص نباشد، خیلی زود به جای کد تمیز با تعارضهای پیچیده در فایلها و بازنویسیهای بیپایان روبرو میشوید. موازیسازی تنها زمانی زمان اجرای واقعی را کاهش میدهد که وظایف واقعاً مستقل باشند.
در این درس میآموزید که چطور وظایف را به واحدهای کاریِ دارای قرارداد، مالکیت مشخص و شواهد راستیآزمایی تفکیک کنید. همچنین با لایههای سهگانهی ایزولهسازی و نقش ادغامکننده آشنا میشوید تا کدهای تولیدشده توسط ایجنتها بدون از بین بردن یکدیگر به شکلی ایمن ادغام شوند.
اجرای موازی ایجنتها تنها زمانی در زمان صرفهجویی میکند که کارها مستقل باشند. در غیر این صورت، یک کار سرراست را به مسئلهای در هماهنگی تبدیل میکنید که نرخ شکست سریعتری دارد.
اهداف یادگیری
- تصمیمگیری دربارهی اینکه آیا استقلال واقعی، واگذاری کار را توجیه میکند یا نه.
- تعیین مالکیت انحصاری فایلها و الزام ارائهی شواهد صریح برای هر مجری.
- محاسبهی موجهای اجرایی بر اساس وابستگیها.
- طراحی یک قرارداد merge برای ترکیب ایمن کار ایجنتها.
آزمون موازیسازی
فقط به این دلیل که ایجنتهای بیشتری در اختیار دارید، کار را واگذار نکنید. تنها زمانی کار را به دیگری بسپارید که حداقل یکی از شرایط زیر برقرار باشد:
- دو بررسی بتوانند بهطور مستقل به مجهولات متفاوتی پاسخ دهند؛
- دو پیادهسازی، فایلها و قراردادهای کاملاً مجزایی در اختیار داشته باشند؛
- یک بازبین بتواند یک دستسازه (Artifact) نهایی را بدون تغییر دادنش بررسی کند؛
- یک اعتبارسنجی خارجیِ کُند بتواند همزمان با ادامهی کارهای محلی اجرا شود.
اگر ایجنتها به فایلهای یکسان، تصمیمی بلاتکلیف و مشترک، یا محیط تغییرپذیرِ یکسانی نیاز دارند، کار را حتماً ترتیبی پیش ببرید.
هر واحد کاری یک قرارداد است
هر واحد کاریِ واگذارشده به این موارد نیاز دارد:
| فیلد | مفهوم |
|---|---|
| هدف | یک نتیجهی قابلمشاهده |
| مسئول | یک مجریِ پاسخگو |
| مسیرها | مالکیت انحصاری برای نوشتن روی فایلها |
| وابستگیها | واحدهای تکمیلشدهای که پیش از شروع لازماند |
| شواهد | شواهد دقیقی که باید به ادغامکننده برگردانده شوند |
| تحویل کار | فایلهای تغییریافته، تصمیمهای گرفتهشده و ریسکهای باقیمانده |
عبارت «بخش بکاند را دست بگیر» یک واحد کاری نیست. اما «بررسی تکراری بودن را در app/accounts.py پیادهسازی کن و درستیاش را با تستِ متمرکز حسابها ثابت کن» یک واحد کاری است.
ایزولهسازی سه لایه دارد
- ایزولهسازی فایلسیستم: ورکتریهای (Worktree) مجزا یا ساندباکسها (محیطهای ایزوله) جلوی ویرایشهای اشتراکی و تصادفی را میگیرند.
- ایزولهسازی مالکیت: قراردادها مانع از آن میشوند که دو مجری عمداً یک مسیر مشترک را ویرایش کنند.
- ایزولهسازی وضعیت: لاگها و خروجیهای جداگانه مانع از این میشوند که یک مجری شواهد مجری دیگر را بازنویسی کند و از بین ببرد.
ایزولهسازی فایلسیستم مسئلهی مالکیت را حل نمیکند. دو ورکتری تمیز هم ممکن است در نهایت طراحیهای متناقضی بسازند. قرارداد merge باید پیش از شروع کار، تکلیف رابطهای (Interface) مشترک را روشن کند.
ادغامکننده کار را از اول نمیسازد
ادغامکننده باید:
- تأیید کند که هر موردِ تحویلی با دامنهی (Scope) تعیینشدهاش مطابقت دارد؛
- خروجیِ شواهد را بخواند، نه فقط خلاصهی مجری را؛
- تغییرات را به ترتیب وابستگیها ترکیب کند؛
- گیت کاملِ بینواحدی را اجرا کند؛
- گسترش پنهانی دامنهی کار را رد کند؛
- تعارضها را بهصورت تصمیمهای جدید ثبت کند، نه ویرایشهای بیسروصدا.
اگر ادغام کارها نیازمند بازنویسی بخش بزرگی از دستاورد مجری باشد، یعنی خرد کردن اولیهی کار اشتباه بوده است.
نقش انسان و ایجنت
واگذاری کار قضاوت انسانی را حذف نمیکند. مسئولیت انتخابهایی که رفتار بیرونی، ریسک، حدود اختیارات یا هزینههای بازگشتناپذیر را تغییر میدهند، همچنان با انسان است. ایجنتها میتوانند مسئولیت بررسیهای محدود، پیادهسازی، راستیآزمایی و بازبینی را بر عهده بگیرند.
این یعنی خودمختاری تنظیمشده (Calibrated Autonomy): سیستم در جایی که شواهد و امکان بازگشت (Rollback) قوی باشند آزادی عمل میدهد، و در جایی که پیامدها سنگین باشند، وجود یک چکپوینت (Checkpoint) را الزامی میکند.
آن را بسازید
محیط آزمایشگاهی تداخل مسیرها را بررسی میکند، وابستگیها را میسنجد، موجهای اجرایی ایمن را محاسبه میکند و در نهایت فایل outputs/delegation-plan.json را مینویسد.
اجرا کنید:
python3 code/main.py
python3 -m unittest discover code/tests -v
واحد مستندات را طوری تغییر دهید که مالک app/ باشد. برنامه باید جلوی طرح را بگیرد؛ چون این مسیر والد با واحد API همپوشانی دارد.
تمرینها
- یک تغییر واقعی را به دو واحد کاری مستقل و یک ادغامکننده خرد کنید.
- نمونهای از یک تقسیمبندی موازی پیدا کنید که فقط در ظاهر مستقل به نظر میرسد. تصمیم مشترکِ میان آنها را مشخص کنید.
- یک مجریِ پژوهشیِ فقطخواندنی (Read-only) اضافه کنید که خروجیاش یک جدول فکت باشد.
- یک گیت merge اضافه کنید که مجموعهی نهاییِ فایلهای تغییریافته را با قرارداد تمام واحدها بسنجد.
- یک قانون لغو کار تعریف کنید تا اگر وابستگیِ یک مجری نامعتبر شد، کار متوقف شود.
مطالعهی بیشتر
- مقالهی The Contract Net Protocol اثر Reid Smith، برای آشنایی با یکی از نخستین رویکردهای رسمی در تخصیص وظایف توزیعشده و گزارش نتایج.
- مقالهی Principles of Mixed-Initiative User Interfaces اثر Eric Horvitz، برای تصمیمگیری دربارهی اینکه اتوماسیون چه زمانی باید دست به کار شود و چه زمانی کنترل را به انسان بازگرداند.
چیزی که پیش خود نگه میدارید
فایل outputs/delegation-plan.json را پیش خود نگه دارید. این فایل ثبت میکند که چرا این تقسیمبندی ایمن است، چه کسی مالک هر مسیر است و مرحلهی ادغام باید چه شواهدی را تحویل بگیرد.
