سابایجنتها در لاراول؛ فقط وقتی که واقعاً لازمه
خلاصهٔ کاملتر
نویسنده با یه سناریوی آشنا شروع میکنه: یه سؤال ساده مثل استرداد وجه، به خاطر orchestratorی که پنج تا ایجنت متخصص و یه router روش داره، هشت ثانیه طول میکشه و سه تا API call میخوره. به گفتهٔ نویسنده، اضافه کردن یه لایه ایجنت اغلب سیستم رو کندتر، گرونتر و کماعتمادتر میکنه؛ دمو باحال به نظر میاد ولی production اهمیتی نمیده.
هستهٔ حرف اینه: تو Laravel AI SDK، یه سابایجنت رو فقط با برگردوندنش از متد tools() به یه ایجنت دیگه میدی. یعنی چند-ایجنتی یه روش جدید ساخت نرمافزار نیست، فقط یه tool call ئه که ابزارش یه LLM دیگهست. نویسنده میگه سابایجنت وقتی جاش درسته که متخصص چیزی لازم داشته باشه که والد نمیتونه بده: مدل خودش، provider خودش، دستورها و ابزار خودش. اگه همهٔ «سابایجنتهات» با همون مدل و همون ابزار کار کنن، تیم نساختی، فقط یه latency tax اضافه کردی.
class CustomerSupportAgent implements Agent, HasTools
{
use Promptable;
public function tools(): iterable
{
return [new RefundsAgent];
}
}به گفتهٔ نویسنده، interface بهاسم CanActAsTool کار مهمی میکنه: name() و description() رو تعیین میکنه که والد موقع تصمیم برای delegation میبینه. اگه ننویسیش، SDK به اسم کلاس و یه توضیح عمومی برمیگرده و routing بیاعتماد میشه. توصیهش اینه که description رو مثل توضیح یه tool بنویسی، نه مثل کامنت کد.
سه تا دام مهم رو باز میکنه. اول، سابایجنت کور اجرا میشه: تاریخچهٔ گفتگوی والد رو نمیبینه، پس والد باید یه task کامل و خودبسنده بهش تحویل بده. دوم، تو تصمیم نمیگیری کِی delegate بشه؛ خود LLMِ والد تصمیم میگیره و تو فقط از دو جا (دستورهای والد و description سابایجنت) روش اثر میذاری. برای جلوگیری از حلقهٔ بیپایان، attribute بهاسم #[MaxSteps(5)] رو مثل circuit breaker میذاری.
سوم، هر hop یه round-trip کامله، نه یه function call ساده؛ یه والد بهعلاوهٔ یه متخصص یعنی دو تا model call برای یه پیام. همین ریاضیه که پشت اون هشت ثانیهست. نویسنده پیشنهاد میکنه قبل از nest کردن ایجنتها، از خودت بپرسی آیا یه ایجنت واحد با دو تا tool همون کارو تو یه call انجام نمیده؛ که معمولاً میده. در آخر تأکید میکنه routing غیرقطعی هم قابل تست ئه: هر ایجنت رو جدا fake میکنی و hand-off رو اسکریپت میکنی تا مطمئن شی والد به متخصص درست وصل شده و task شمارهٔ سفارش رو با خودش برده.
نکات کلیدی:
- سابایجنت = یه ایجنت پشت یه tool call؛ فقط وقتی جداش کن که مدل/ابزار/دستور مخصوص خودشو لازم داره
- سابایجنت کور اجرا میشه، پس task باید کامل و خودبسنده باشه
- تصمیم delegation دست مدله؛ با MaxSteps جلوی حلقه رو بگیر
- هر delegation یه round-trip کامل با هزینه و تأخیر خودشه




