پرش به محتوای اصلی

ارکستراسیون ایجنت به زمان‌بند نیاز دارد، نه ناظر

یک ناظر واحد، ازدحام را سریالیزه می‌کند و گلوگاه واقعی را پنهان می‌سازد: کنترل پذیرش، صف‌بندی و پیش‌دستی. با ایجنت‌ها مثل پردازش‌ها رفتار کنید تا حالت‌های شکست قابل مشاهده شوند.

نمای نزدیک از یک رک سرور با LEDهای وضعیت و کابل‌های مرتب، که نشان‌دهنده یک صفحه کنترل تحت بار است

الگوی ناظر به سقف می‌خورد

یک ایجنت ناظر در نمودار زیبا به نظر می‌رسد. یک برنامه‌ریز هدفی را دریافت می‌کند، آن را به زیرکارها تجزیه می‌کند و هر زیرکار را به یک کارگر مسیردهی می‌کند. کارگرها نتایج را برمی‌گردانند، ناظر آن‌ها را ادغام می‌کند و سیستم پاسخی صادر می‌کند. برای سه یا چهار کارگر این الگو خوب است. برای سی اجرای همزمان، یک روتر تک‌رشته‌ای است که لباس توزیع‌شده پوشیده است.

دو چیز همزمان می‌شکند. اولی سریالیزاسیون است: هر زیرکار قبل از رسیدن به کارگر از یک مرحله استدلال عبور می‌کند، بنابراین تأخیر ناظر به هر گام در گراف وابستگی اضافه می‌شود. دومی رشد پرامپت است. ناظری که باید بین N نقش کارگر تمایز قائل شود، N توصیف، N اسکیمای ابزار و N مثال مسیردهی را در کانتکست خود حمل می‌کند. دقت مسیردهی یک مسئله توجه است و توجه با رشد مجموعه کاندیدها تحلیل می‌رود. ناظر با صدای بلند شکست نمی‌خورد؛ شروع به مسیردهی اشتباه موارد حاشیه‌ای می‌کند، سپس موارد رایج.

قیاس با سیستم‌عامل واقعاً چه چیزی به دست می‌دهد

قیاس تزئینی نیست. سه مکانیزم را نام می‌برد که یک پرامپت ناظر نمی‌تواند بیان کند.

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

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

Close-up of a modern building facade with red steel beams in geometric patterns against a blue sky

انصاف بین مستأجرها. وقتی کار دسته‌ای یک تیم می‌تواند ایجنت تعاملی تیم دیگر را گرسنه نگه دارد، مسئله دیگر کیفیت استدلال نیست. تخصیص است. یک زمان‌بند با صف‌های به‌ازای هر مستأجر و یک سیاست سهم تعریف‌شده، گرسنگی را به یک تصمیم سیاستی تبدیل می‌کند نه یک تصادف نوظهور.

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

قواعد طراحی

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

plan -> DAG { node: { role, inputs, tools, budget } }
            |
            v
dispatcher: admit(node) if deps_done && budget_ok && quota_ok
            enqueue(node) by priority and tenant share
            lease(node) -> worker
            on timeout or preempt: release lease, persist state

هر مرحله ایجنت را idempotent کنید. مرحله‌ای که می‌تواند پیش‌دستی و دوباره تلاش شود باید هنگام اجرای مجدد با همان ورودی‌ها همان نتیجه را تولید کند، یا باید بتواند تشخیص دهد که اثرش قبلاً رخ داده است. Idempotency چیزی است که پیش‌دستی را به‌طور ساختاری ایمن می‌کند نه با مدیریت دقیق. فراخوانی‌های ابزار با اثرات جانبPower lines and electrical insulators against a vivid blue sky, stock photoنه از زمان ساعت دیواری.

Circuit board macro

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

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

چه چیزی را اندازه بگیریم

زمان در صف در مقابل زمان در استدلال، جداگانه ردیابی شوند. این‌ها مسائل متفاوتی با راه‌حل‌های متفاوت هستند. افزایش زمان استدلال به تغییرات مدل یا پرامپت اشاره دارد؛ افزایش زمان صف به ظرفیت یا سیاست پذیرش. تجمیع آن‌ها در یک عدد تأخیر سرتاسری پنهان می‌کند که کدام یک تغییر کرده است.

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

تغییر در چارچوب‌بندی

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

کار ناپدید نمی‌شود. از مهندسی پرامپت به مهندسی صفحه کنترل منتقل می‌شود، که همان جایی است که وقتی همزمانی محدودیت است به آن تعلق دارد.

اشتراک‌گذاریXLinkedInپیوند یکتا5 دقیقه مطالعه

خواندن مرتبط

پرسش‌هایی که این پاسخ می‌دهد

When does a supervisor pattern stop being sufficient?

When concurrency is high enough that contention is real: many concurrent runs, shared tool quotas, or multiple tenants competing for the same capacity. Below that threshold a supervisor is simpler and adds less operational overhead.

What does preemption require from an agent step?

Idempotency and persisted state at step boundaries. A step must be safe to re-execute with the same inputs, and a partially completed run must be resumable from the last completed step without re-paying for earlier work.

Why separate time-in-queue from time-in-reasoning?

They have different causes and different fixes. Reasoning time responds to model and prompt changes; queue time responds to capacity and admission policy. A single end-to-end latency number hides which one changed.

Is a scheduler always worth the added control plane?

No. A dispatcher introduces lease expiry, queue state and preemption logic that must be operated. It pays off when contention is the dominant failure mode, not before.