رفتن به محتوا

ارکستراسیون

یک عامل تنها در یک کار خوب است. برخی درخواست‌ها از این بزرگ‌ترند: «بازار X را پژوهش کن و یک سند جایگاه‌یابی بنویس»، «این قابلیت را از صفر تا صد تحویل بده»، «این ماژول را حسابرسی کن و هر چه یافتی درست کن». یک ارکستراسیون شیوه‌ای است که Control Center با همین کارها روبه‌رو می‌شود: یک ارکستراسر (معمولاً عامل CEO شما) برنامه‌ای برای کل تیم پیشنهاد می‌دهد، شما آن را یک‌بار تأیید می‌کنید و یک ماده‌ساز قطعی آن را به پایپ‌لاینی تبدیل می‌کند که کار را انجام می‌دهد.

ارکستراسیون میان دو شیوهٔ موجود انجام کار می‌نشیند:

وقتی می‌خواهید… به کار ببرید
یک کار را به یک عامل بسپارید یک پیام در یک فضا
فرایندی را که از قبل می‌شناسید، به‌صورت دستی بنویسید یک قالب پایپ‌لاین
هدف را بگویید و بگذارید تیم برنامه را پیدا کند یک ارکستراسیون

وقتی به ارکستراسر هدفی می‌دهید، یک OrchestrationProposal ساخت‌یافته برمی‌گرداند: برنامه‌ای نوع‌دار که اپلیکیشن می‌تواند اعتبارسنجی و اجرا کند، نه نثر آزاد. یک پیشنهاد این‌ها را دارد:

  • هدف: درخواست سطح‌بالای شما، بازنویسی‌شده.
  • نقش‌ها: چه کسی کار را انجام می‌دهد. هر نقش یا یک عامل موجود است که خودتان انتخاب می‌کنید، یا یک استخدام جدید که ارکستراسیون هنگام تأیید می‌سازد.
  • زیرتیکت‌ها: کار، شکسته‌شده به یک DAG از تیکت‌ها.
  • پژوهش (اختیاری): فاز پژوهشی‌ای که نخست اجرا می‌شود و خوراک بقیه را تأمین می‌کند.
  • بحث (اختیاری): دوره‌ای کران‌دار که در آن هر نقش پیش از آغاز کار یک موضع ساخت‌یافته منتشر می‌کند.
  • ترکیب: گام نهایی که محصول تحویلی را تولید می‌کند.
  • بودجه: سقف هزینه‌ای که اعلام شده است.

دو نما همان ارکستراسیون را نشان می‌دهند.

کارت پیشنهاد در همان گفتگویی می‌ماند که برنامه را تولید کرده است. یک پیام است که در سراسر چرخهٔ عمر — پیشنهادشده، در حال اجرا، کامل‌شده — دوباره رندر می‌شود و کنش‌های تأیید و لغو روی آن قرار دارند.

Plan Studio ویرایشگر است: یک بوم DAG، یک بازرس گره، یک کشوی بازبینی و دیف و نوار تأییدی که برآورد را حمل می‌کند. مستقیماً از همان کارت، به‌صورت یک زبانهٔ ویرایشگر باز می‌شود. عمداً هیچ موردی به نام «برنامه‌ها» در نوار کناری وجود ندارد؛ /plans و /plans/:kind/:id به‌عنوان پیوندهای عمیق برای اشتراک‌گذاری موجودند.

تأیید فقط در اختیار اپراتور است. ابزار MCPای برای آن وجود ندارد: یک عامل می‌تواند پیشنهاد بدهد (propose_orchestration)، برنامه‌ای ارسال کند (submit_plan) یا کتابچه‌ای را نمونه‌سازی کند (run_playbook)، اما تنها یک انسان تأیید می‌کند. بازبینی‌های آغازشده از سوی عامل، افزون بر این، با یک دورهٔ خنک‌سازی دو دقیقه‌ای محدود شده‌اند تا یک حلقهٔ برنامه‌ریزی مجدد به‌جای سرریز کردن خوراک شما، یکپارچه شود.

آنچه پیش از تأیید می‌توانید تغییر دهید همان است که بازرس گره در معرض می‌گذارد: تغییر عنوان یا بازنویسی یک زیرتیکت، تغییر اینکه کدام نقش مالک آن است، بازسیم‌کشی وابستگی‌هایش، ویرایش شِمای خروجی‌اش یا حذف کامل گره. گره‌های ساختاری (پژوهش، بحث، ترکیب) و گره‌هایی که پیش‌تر اجرا شده‌اند فقط‌خواندنی‌اند. از داخل ویرایشگر نمی‌توانید نقشی را به یک عامل مشخص و نام‌دار سنجاق کنید و نمی‌توانید بودجه را ویرایش کنید.

دو ویرایشگر روی یک برنامه با هم‌روندی خوش‌بینانه حل می‌شود، نه با ادغام. هر ویرایش base_revisionای را حمل می‌کند که در برابر آن انجام شده است؛ ویرایشی که بر پایهٔ یک بازبینی قدیمی باشد، به‌جای اینکه بی‌صدا روی کار دیگری بنویسد، با پیام «برنامه جلوتر رفته است» رد می‌شود. عقب‌بردن هم حذف نیست — پیشنهاد قدیمی‌تر را به‌عنوان بازبینی‌ای تازه می‌افزاید، بنابراین خط زمانی بازبینی‌ها فقط رشد می‌کند.

برآورد روی نوار تأیید از تاریخچهٔ واقعی اجراهای کامل‌شده برای هر نقش ساخته می‌شود، به‌صورت یک بازهٔ چارکی میانی (p25–p75). هزینهٔ کل، گره‌های قابل‌برآورد را جمع می‌کند؛ اما مدت، مسیر بحرانی در DAG است، نه جمع آن (شاخه‌های موازی هم‌پوشانی دارند).

گره‌ای که نقشش هیچ تاریخچه‌ای از اجرای کامل‌شده ندارد، sampleSize: 0 و بازه‌های تهی گزارش می‌دهد. این دقیقاً همان‌گونه نمایش داده می‌شود — ناشناخته — و هرگز به‌شکل یک مقدار نقطه‌ای ساختگی، چون برآوردی که نتوانید به آن اعتماد کنید از نبود برآورد بدتر است. وقتی برخی گره‌ها تاریخچه دارند و برخی ندارند، جمع به‌صورت جزئی علامت می‌خورد. شعاع اثر تنها زمانی پدیدار می‌شود که گرهی ارجاع‌های منشأ symbol یا file را اعلام کرده باشد؛ گرهی بدون آن‌ها به‌جای استنباط از نثر، «ناشناخته» می‌ماند.

ایدهٔ اصلی همین است: عامل برنامه‌ریزی می‌کند؛ یک تابع قطعی اجرا می‌کند. وقتی تأیید می‌کنید، OrchestrationMaterializer — تابعی خالص بدون LLM و بدون I/O — پیشنهاد را به یک پایپ‌لاین واقعی تبدیل می‌کند. با پیشنهاد یکسان و نقش‌های حل‌شدهٔ یکسان، همیشه همان DAG را تولید می‌کند. این مهم است چون پایپ‌لاین تولیدشده هر چیزی را که موتور از قبل به‌رایگان انجام می‌دهد به ارث می‌برد: تعلیق و ازسرگیری در بازراه‌اندازی‌ها، بازیابی پس از سقوط، جمع‌بندی هزینه و توکن هر اجرا و رابط جزئیات اجرا.

تأیید همچنین داربستی را می‌سازد که کار به آن نیاز دارد:

  • نقش‌هایی را که به‌عنوان جدید علامت خورده‌اند استخدام می‌کند (و شناسه‌های عامل‌های استخدام‌شده را ثبت می‌کند تا سقوطی در میانهٔ تأیید بتواند بدون استخدام تکراری ادامه دهد)
  • یک تیم که نقش‌ها را گروه‌بندی می‌کند
  • یک پروژه که تیکت والد را در خود جای می‌دهد
  • قالب پایپ‌لاین + اجرا که همهٔ این‌ها را به پیش می‌برد
proposed → approved → executing → synthesizing → completed
↘ ↘ failed
↘ ↘ cancelled
وضعیت معنا
proposed برنامه آماده است و منتظر تنها تأیید پیشین شماست
approved آن را تأیید کرده‌اید؛ ماده‌سازی در جریان است (استخدام‌ها، تیم، پروژه، پایپ‌لاین)
executing پایپ‌لاین تولیدشده در حال اجراست: زیرتیکت‌ها، بحث، کار
synthesizing زیرتیکت‌ها تمام شده‌اند؛ گام ترکیب در حال تولید محصول تحویلی است
completed انجام شد: تیکت والد کامل علامت می‌خورد و محصول تحویلی در فضای مشترک منتشر می‌شود
failed ماده‌سازی شکست خورد، یا اجرای پایپ‌لاین تولیدشده شکست خورد
cancelled شما آن را لغو کردید

یک شمارهٔ بازبینی یکنوا پیشنهاد را دنبال می‌کند، همان‌طور که ارکستراسر آن را تا زمانی که هنوز proposed است بازنگری می‌کند؛ اپلیکیشن ثبت می‌کند که کدام بازبینی را تأیید کرده‌اید. propose_orchestration پس از آنکه وضعیت دیگر proposed نباشد، هر بازبینی را رد می‌کند.

ارکستراسیون همیشه در برابر یک تیکت والد باز می‌شود و یک فضای بحث مشترک دارد، بنابراین تمام تلاش به یک قلم کار واحد قابل ردیابی است و تیم در یک اتاق گفتگو می‌کند.

یک شنوندهٔ همیشه‌زنده پایپ‌لاین تولیدشده را می‌پاید و وضعیت پایانی آن را روی ارکستراسیون و تیکت والد برمی‌گرداند، بنابراین اتمام و شکست در همان جاهایی پدیدار می‌شوند که پیش‌تر هم می‌پاییدید. قابلیت ارکستراسیون به موتور اجرای جداگانهٔ خود نیازی ندارد.

می‌توانید ارکستراسیون را هر زمان لغو کنید؛ لغو کردن، کارهای در جریان را برمی‌چیند.