آموزش هوش مصنوعی

سیستم چند ایجنتی چیست؟ تقسیم کار بین ایجنت‌ها با smolagents

پیشرفته مطالعه در ۱۰ دقیقه
mahdyar

سیستم چند ایجنتی همان کاری را با ایجنت‌ها می‌کند که یک تیم خوب با آدم‌ها. به‌جای اینکه یک ایجنت همه‌کاره همه‌چیز را انجام دهد، کار میان ایجنت‌هایی با توانایی‌های متفاوت تقسیم می‌شود. نتیجه سیستمی ماژولارتر، مقیاس‌پذیرتر و مقاوم‌تر است.

در این قسمت از مجموعه‌ی «از پرامپت تا دستیار هوش مصنوعی» یک تیم ایجنتی با smolagents می‌سازیم. اول یک ایجنت تنها را روی یک کار پیچیده امتحان می‌کنیم و محدودیت‌هایش را می‌بینیم. بعد همان کار را میان یک ایجنت مدیر و یک ایجنت جستجوگر تقسیم می‌کنیم.

سیستم چند ایجنتی چیست؟

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

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

ساختار سیستم چند ایجنتی با ایجنت مدیر، مفسر کد و ایجنت جستجوی وب

نمونه؛ RAG چندایجنتی

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

همه‌ی این ایجنت‌ها زیر نظر یک هماهنگ‌کننده کار می‌کنند که تقسیم کار و تعامل میان آن‌ها را مدیریت می‌کند. این همان ایده‌ی Agentic RAG قسمت پانزدهم است؛ این بار با چند ایجنت به‌جای یک ایجنت با چند ابزار.

مسئله‌ی پیچیده؛ جایگزین بت‌موبیل

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

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

ابزار محاسبه‌ی زمان سفر

اول ابزاری می‌سازیم که زمان سفر هواپیمای باری را بین دو نقطه حساب کند. این ابزار فاصله‌ی دایره‌ی عظیمه را با فرمول هاورساین محاسبه می‌کند:

python
import math
from typing import Optional, Tuple
from smolagents import tool

@tool
def calculate_cargo_travel_time(origin_coords: Tuple[float, float], destination_coords: Tuple[float, float], cruising_speed_kmh: Optional[float] = 750.0) -> float:
    """
    Calculate the travel time for a cargo plane between two points on Earth using great-circle distance.
    Args:
        origin_coords: Tuple of (latitude, longitude) for the starting point
        destination_coords: Tuple of (latitude, longitude) for the destination
        cruising_speed_kmh: Optional cruising speed in km/h (defaults to 750 km/h)
    """
    lat1, lon1, lat2, lon2 = map(math.radians, (*origin_coords, *destination_coords))
    a = math.sin((lat2 - lat1) / 2) ** 2 + math.cos(lat1) * math.cos(lat2) * math.sin((lon2 - lon1) / 2) ** 2
    distance = 6371.0 * 2 * math.asin(math.sqrt(a)) * 1.1  # +10% for indirect routes
    return round(distance / cruising_speed_kmh + 1.0, 2)  # +1h for takeoff and landing

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

ایجنت تنها به‌عنوان مبنا

قبل از ساخت تیم، یک ایجنت تنها را امتحان می‌کنیم. این ایجنت ابزار جستجوی گوگل، بازدید صفحه و محاسبه‌ی زمان سفر دارد و مجاز است از pandas استفاده کند:

python
agent = CodeAgent(
    model=InferenceClientModel(model_id="Qwen/Qwen2.5-Coder-32B-Instruct", provider="together"),
    tools=[GoogleSearchTool("serper"), VisitWebpageTool(), calculate_cargo_travel_time],
    additional_authorized_imports=["pandas"],
    max_steps=20,
)
result = agent.run(task)

ایجنت جدولی با شانزده مکان برمی‌گرداند؛ از گورستان نکروپلیس گلاسگو تا خیابان وال‌استریت نیویورک، همراه زمان سفر هر کدام. برای جستجوی گوگل به کلید Serper یا SerpAPI نیاز دارید. اگر ندارید، از DuckDuckGoSearchTool استفاده کنید؛ فقط محدودیت تعداد درخواست دارد.

بهبود با گام برنامه‌ریزی

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

planning_interval و پرامپت دقیق‌تر

با agent.planning_interval = 4 ایجنت هر چهار قدم یک بار برنامه‌ریزی می‌کند. پرامپت را هم دقیق‌تر می‌کنیم: «تو تحلیلگری هستی که پس از بازدید از وب‌سایت‌های متعدد گزارش جامع می‌نویسد. برای هر داده، به آدرس منبع برو و عددها را تأیید کن.»

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

مشکل پنجره‌ی زمینه

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

راه‌حل، بهبود ساختار سیستم است. این دقیقاً جایی است که سیستم چند ایجنتی وارد بازی می‌شود.

تقسیم کار بین دو ایجنت

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

ایجنت جستجوگر

اول یک ایجنت اختصاصی جستجوی وب می‌سازیم. دو پارامتر name و description در اینجا حیاتی‌اند؛ چون ایجنت مدیر بر اساس همین توضیح تصمیم می‌گیرد کی از این ایجنت کمک بگیرد:

python
web_agent = CodeAgent(
    model=InferenceClientModel("Qwen/Qwen2.5-Coder-32B-Instruct", provider="together", max_tokens=8096),
    tools=[GoogleSearchTool(provider="serper"), VisitWebpageTool(), calculate_cargo_travel_time],
    name="web_agent",
    description="Browses the web to find information",
    max_steps=10,
)

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

ایجنت مدیر و بررسی پاسخ نهایی

ایجنت مدیر کار ذهنی سنگین‌تری دارد؛ باید برنامه‌ریزی کند، نتایج را جمع کند و نقشه بکشد. پس مدل قوی‌تری مثل DeepSeek-R1 به آن می‌دهیم. ایجنت جستجوگر با managed_agents معرفی می‌شود و کتابخانه‌های نقشه‌کشی مثل plotly و geopandas به importهای مجاز اضافه می‌شوند:

python
manager_agent = CodeAgent(
    model=InferenceClientModel("deepseek-ai/DeepSeek-R1", provider="together", max_tokens=8096),
    tools=[calculate_cargo_travel_time],
    managed_agents=[web_agent],
    additional_authorized_imports=["geopandas", "plotly", "shapely", "json", "pandas", "numpy"],
    planning_interval=5,
    final_answer_checks=[check_reasoning_and_plot],
    max_steps=15,
)

پارامتر final_answer_checks قابلیت جالبی است. تابع check_reasoning_and_plot نقشه‌ی ذخیره‌شده و خلاصه‌ی مراحل ایجنت را به یک مدل بینایی مثل GPT-4o می‌دهد. آن مدل قضاوت می‌کند آیا نقشه و استدلال درست‌اند یا نه. اگر پاسخ FAIL باشد، ایجنت مدیر باید کارش را اصلاح کند.

نتیجه‌ی کار تیمی

با متد manager_agent.visualize() می‌توانید ساختار تیم را ببینید؛ مدیر، ابزارهایش و ایجنت زیردست با ابزارهای خودش. بعد درخواست را اجرا می‌کنیم و از مدیر می‌خواهیم نتیجه را روی نقشه‌ی جهان با رنگ متناسب با زمان سفر نشان دهد.

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

نقشه خروجی سیستم چند ایجنتی با مکان‌ها و زمان انتقال هوایی تا گاتهام

کی سیستم چند ایجنتی بسازیم؟

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

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

تمرین عملی؛ تیم ایجنتی دستیار دوره‌ها

دستیار پروژه‌ی مشترک را به یک تیم دو ایجنتی تبدیل کنید:

  1. یک catalog_agent بسازید که فقط ابزارهای جستجو و مشخصات دوره را دارد.
  2. یک web_agent بسازید که نظرات و بازار کار هر فناوری را در وب جستجو می‌کند.
  3. یک ایجنت مدیر بسازید که هر دو را مدیریت کند و به پرسش «کدام دوره برای ورود به بازار کار هوش مصنوعی بهتر است؟» پاسخ دهد.

با visualize() ساختار تیم را ببینید و در گزارش اجرا دنبال کنید مدیر کدام زیرکار را به کدام ایجنت سپرد. یک تابع ساده در final_answer_checks هم اضافه کنید که مطمئن شود پاسخ نهایی دست‌کم نام یک دوره را دارد.

سخن پایانی

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

در قسمت هجدهم با LangGraph یک جریان تحلیل سند می‌سازیم که مسیرش کاملاً زیر کنترل ماست.

این آموزش بر پایه‌ی بخش Multi-Agent Systems از دوره‌ی آزاد Agents Course در Hugging Face (مجوز Apache-2.0) به فارسی بازنویسی و تکمیل شده است.

پرسش‌های پرتکرار

سیستم چند ایجنتی چه مزیتی نسبت به یک ایجنت دارد؟

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

ایجنت مدیر در سیستم چند ایجنتی چه می‌کند؟

کار اصلی را به زیرکارها می‌شکند، هر زیرکار را به ایجنت مناسب می‌سپارد، نتایج را جمع می‌کند و پاسخ نهایی را می‌سازد. در smolagents ایجنت‌های زیردست با پارامتر managed_agents به مدیر معرفی می‌شوند.

planning_interval چه کاربردی دارد؟

تعیین می‌کند ایجنت هر چند قدم یک بار مکث کند و برنامه‌ی کلی کار را بازنگری کند. این گام برنامه‌ریزی در کارهای پیچیده و چندمرحله‌ای کیفیت نتیجه را بالا می‌برد.

final_answer_checks چیست؟

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

دیدگاه‌ها

هنوز دیدگاهی ثبت نشده است. شروع‌کننده باشید — پرسش و اصلاح را با آغوش باز می‌پذیریم.

دیدگاه بگذارید

برای **پررنگ**، *مورب*، `کد` و لینک از Markdown استفاده کنید. لینک‌ها nofollow هستند.

پنج رقم داخل تصویر را وارد کنید. اعداد فارسی و انگلیسی پذیرفته می‌شوند.

تصویر کد امنیتی پنج‌رقمی

در حال دریافت کد امنیتی…

مهلت کد تمام شد. روی «کد جدید» بزنید.