چیت‌شیت

سیستم‌های چندایجنت

Multi-Agent Systems

ایجنت‌ها، تحویل وظیفه، وضعیت مشترک و هماهنگ‌کننده‌ها. الگویی انتخاب کنید، رأی‌گیری کنید، چک‌پوینت بگیرید و خطاهای شناخته‌شده را حل کنید.

  • ۱۲ بخش
  • ۱۲ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. چهار جزء سازنده
  2. هماهنگ‌سازی ایجنت‌ها
  3. رأی‌گیری، ماندگاری داده و محافظت
  4. یک بار اجرای سرپرست (supervisor)
  5. حلقه‌ی تحویل وظیفه (سبک Swarm)
  6. رأی‌گیری وزن‌دار بر اساس اطمینان
  7. انتخاب الگو
  8. پیش‌فرض‌ها در کد
  9. عیب‌یابی
  10. واژه‌نامه
  11. پرسش و پاسخ
  12. نکات کاربردی

چهار جزء سازنده

معماری
اجراهاهر گامتحویل وظیفهتحویل وظیفهالحاق (append)انتشارخواندنهماهنگ‌کنندهایستا، تحویل وظیفه، انتخاب‌گرCheckpointStorethread_id، super_stepایجنت: محققپرامپت + ابزارهاایجنت: نویسندهبی‌وضعیتایجنت: بازبینبی‌وضعیتSharedStateاستخر پیامتخته‌سیاه (Blackboard)انتشار/اشتراک موضوعیمدل اعتبارسنجفقط خواندنی

هماهنگ‌سازی ایجنت‌ها

کار و کد
وظیفهکد
به اشتراک‌گذاری استخر پیام`state = SharedState()` then `state.append(<msg>)`
اجرای ترتیبی ثابتStaticOrchestrator(<order>).run(team, state)
اجازه به ایجنت برای انتخاب بعدیHandoffOrchestrator("<start>").run(team, state)
اجازه به انتخاب‌گر برای انتخاب بعدیLLMSelectorOrchestrator("<start>", round_robin_selector)
تحویل وظیفه با یک ابزارdef transfer_to_refunds() -> "Agent": return refund_agent
اجرای چت گروهیrun_groupchat(AGENTS, <selector>, max_rounds=8, label="<label>")
توزیع موازی ورکرهاthreading.Thread(target=w.run, args=(sq, results, i))
انتشار در یک موضوعbb.publish("<writer>", "<topic>", "<content>", "<prompt>")

رأی‌گیری، ماندگاری داده و محافظت

کار و کد
وظیفهکد
شمارش آراplurality(votes)
وزن‌دهی به آرا بر اساس اطمینانcp_wbft(votes, threshold=0.5)
انتخاب بدون لیدرdecentllms(votes)
ذخیره‌ی یک چک‌پوینتstore.write(thread_id, super_step, dict(state))
ادامه‌ی کار پس از کرشstore.latest(thread_id)
اختصاص یک صف به ایجنتAgentQueue("<agent_id>").enqueue(<msg>)
توقف طوفان تلاش مجدد`if not breaker.allow(): ...` then `breaker.record(ok)`

یک بار اجرای سرپرست (supervisor)

گام‌به‌گام
  1. لیدرplan(query) کوئری را به چند پرسش فرعی تقسیم می‌کند.
  2. لیدربرای هر پرسش فرعی، یک ترد Worker آغاز می‌کند.
  3. ورکرکار را از یک بافتار تازه با پرسشی مشخص و محدود شروع می‌کند.
  4. ورکریک WorkerResult شامل خلاصه و tokens_spent می‌نویسد.
  5. لیدرهمه‌ی تردها را الحاق می‌کند. زمان واقعی کل معادل کُندترین ورکر است.
  6. لیدربا synthesize(query, results) پاسخ‌ها را merge می‌کند.
  7. لیدرمقادیر wall_clock_seconds، total_tokens و worker_count را گزارش می‌دهد.

حلقه‌ی تحویل وظیفه (سبک Swarm)

کد
python
def run_swarm(start_agent: Agent, user_messages: list[str]) -> list[Msg]:
    history: list[Msg] = []
    active = start_agent                     # نگهدارنده‌ی چت
    for user in user_messages:
        history.append(Msg(role="user", content=user))
        out = scripted_router(active, user)  # جایگزین LLM
        if isinstance(out, Agent):           # ابزاری که یک ایجنت برگرداند
            history.append(
                Msg(role="assistant", content=f"(handoff to {out.name})", sender=active.name)
            )
            active = out                     # تعویض ایجنت فعال
            out = scripted_router(active, user)
        history.append(Msg(role="assistant", content=str(out), sender=active.name))
    return history                           # چیزی ذخیره نمی‌شود

رأی‌گیری وزن‌دار بر اساس اطمینان

کد
python
def cp_wbft(votes: list[Vote], threshold: float = 0.5):
    weights: dict[str, float] = {}
    rep: dict[str, str] = {}
    for v in votes:
        key = v.canonical()   # خوشه‌بندی پاسخ‌های یکسان
        weights[key] = weights.get(key, 0.0) + v.confidence
        rep.setdefault(key, v.answer)
    total = sum(weights.values()) or 1.0
    winner_key = max(weights, key=weights.get)
    if weights[winner_key] / total < threshold:
        return None, weights  # بسیار ضعیف: تلاش مجدد یا ارجاع به بالاتر
    return rep[winner_key], weights

انتخاب الگو

مفهوم‌ها
پایپ‌لاین
هر ایجنت داده را تبدیل کرده و انتقال می‌دهد. شکست در یک مرحله کل مراحل را مسدود می‌کند.
توزیع موازی / تجمیع
تقسیم بین ایجنت‌های موازی و سپس merge. مناسب برای خرده‌وظایف مستقل.
سرپرست (Supervisor)
لیدر برنامه‌ریزی می‌کند، تفویض می‌نماید و ترکیب می‌کند. برای وظایف ترتیبی اشتباه است.
سلسله‌مراتبی
سرپرست‌ها بالای سرپرست‌ها. فقط برگ‌ها کار انجام می‌دهند.
چت گروهی
طرف‌های ارتباط یک استخر مشترک دارند. انتخاب‌گر گوینده‌ی بعدی را برمی‌گزیند.
تحویل وظیفه
ایجنت فعال ابزاری را فراخوانی می‌کند که ایجنت بعدی را برمی‌گرداند.
تخته‌سیاه (Blackboard)
انتشار/اشتراک موضوعی. در تعداد بالای ایجنت‌ها و اجراهای طولانی بهترین است.
تک‌ایجنتی
زیر 20 فراخوانی ابزار و 100k توکن، از یک ایجنت استفاده کنید.

پیش‌فرض‌ها در کد

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
max_steps10هر run هماهنگ‌کننده
max_rounds8سقف دمو چت گروهی
TERMINATETERMINATEتوکنی که چت گروهی را خاتمه می‌دهد
threshold0.5سهم پذیرش cp_wbft
rounds2دورهای مناظره در توپولوژی گراف
failure_threshold0.5مدارشکن بالای این نرخ خطا فعال (open) می‌شود
window_size20نتایج مدارشکن در بازه‌ی زمانی
open_cooldown_s0.5ثانیه‌های قبل از وضعیت نیمه‌باز (half open)

عیب‌یابی

عیب‌یابی
  • یک ایجنت در هر نوبت صحبت می‌کند

    علت
    گوینده‌ی غالب در انتخاب‌گر
    راه‌حل
    تعادل در نوبت صحبت به انتخاب‌گر اضافه کنید
  • افزایش بافتار در هر نوبت گفت‌وگو

    علت
    همه‌ی ایجنت‌ها همه‌ی پیام‌ها را می‌خوانند
    راه‌حل
    به ایجنت‌ها تصویرها (projections) اختصاص دهید
  • دو ایجنت مدام وظیفه را به هم واگذار می‌کنند

    علت
    حلقه‌ی تحویل وظیفه
    راه‌حل
    مقدار max_steps را روی هماهنگ‌کننده محدود کنید
  • یک عدد اشتباه به همه منتقل می‌شود

    علت
    مسموم‌سازی حافظه در وضعیت مشترک
    راه‌حل
    منشأ و سندیت، فقط الحاق (append-only)، مدل اعتبارسنج فقط خواندنی
  • اکثریت با هم به خطا می‌روند

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

    علت
    دریفت تقسیم‌بندی مدیر از هدف اصلی
    راه‌حل
    یک ورکر با پرسش قناری اضافه کنید
  • ورکرها اختلاف نظر دارند، یک طرف برنده می‌شود

    علت
    تعارض در ترکیب بی‌صدا
    راه‌حل
    دوباره بپرسید یا اختلاف نظر را گزارش دهید
  • بار بخش‌های پایینی سیستم 10 برابر می‌شود

    علت
    طوفان تلاش مجدد
    راه‌حل
    مدارشکن، تعیین سقف برای تلاش‌های مجدد

واژه‌نامه

اصطلاح‌ها
BFT
تحمل خطای بیزانس. تحمل خطای f < n/3 نود معیوب.
CP-WBFT
الگوریتم BFT وزن‌دار با آزمون ارزیابی اطمینان. رأی‌ها بر اساس اطمینان وزن‌دهی می‌شوند.
MAST
رده‌بندی خطاها. مشخصات، هماهنگی، اعتبارسنجی.
MARBLE
بنچمارک چندایجنت. توپولوژی‌های ستاره‌ای، زنجیره‌ای، درختی و گرافی.
Super-step
ابرگام؛ واحد کار بین دو چک‌پوینت.
الگوی اوت‌باکس
ابتدا نیت اثر جانبی ثبت می‌شود. یک اجراکننده‌ی مجزا آن را اجرا می‌کند.

پرسش و پاسخ

پرسش و پاسخ
هزینه‌ی سیستم چندایجنت چقدر است؟
حدود 15 برابر توکن‌های یک سیستم تک‌ایجنتی.
چرا مدل اعتبارسنج امکان نوشتن ندارد؟
تا استخر مسموم نتواند آن را مسموم کند.
چه آستانه‌ای برای 5 تا 7 رأی‌دهنده مناسب است؟
0.5 تا 0.67. پایین‌تر از آن، ارجاع به بالاتر.
ایجنت‌های بیشتر یا مدل‌های متفاوت؟
مدل‌های متفاوت. سه مدل مختلف بهتر از پنج نسخه از یک مدل عمل می‌کنند.
رایج‌ترین خطا چیست؟
مشکلات مشخصات، 41.77٪ از خطاهای رده‌بندی MAST.

نکات کاربردی

نکته‌ها
  • تنها بخش دارای وضعیت، وضعیت مشترک است. برای باگ‌ها اول آنجا را بررسی کنید.
  • عمق سلسله‌مراتب را روی 2 یا کمتر نگه دارید.
  • دورهای مناظره را به 2 یا 3 محدود کنید.
  • فراتر از حدود 4 ایجنت در یک گراف، مالیات هماهنگی افزایش می‌یابد.
  • برای فراخوانی‌های LLM از I/O غیرهمگام استفاده کنید. هر ترد حدود 1MB مصرف دارد.
  • در هر فراخوانی اثر جانبی، یک کلید حذف تکراری (dedup) قرار دهید.