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

تفاوت ایجنت با workflow: چه زمانی مدل خودش ترتیب ابزار را تعیین می‌کند؟#

ایجنت هوش مصنوعی (AI Agent) سیستمی است که در آن مدل زبانی به‌صورت dynamic تصمیم می‌گیرد کدام ابزار را، در چه ترتیبی، و چند بار فراخوانی کند. workflow اما ترتیب ابزارها را از پیش ثابت نگه می‌دارد. این یک تفاوت سلیقه‌ای نیست؛ تفاوت در هزینه‌ی ساخت، debug و نگهداری است.

این تمایز ظریف به‌نظر می‌رسد اما در عمل هزینه‌ی ساخت، نگهداری و debugging را چند برابر می‌کند. بسیاری از پروژه‌های فارسی‌زبان که با عنوان «ایجنت» معرفی می‌شوند، در واقع یک چت‌بات با چند tool call هستند که ترتیب آن‌ها در system prompt هاردکد شده. اگر کسی به شما گفت «ایجنت ساختم» ولی مدل هیچ‌وقت خودش تصمیم نگرفته قدم بعدی چیست، workflow ساخته است نه ایجنت.

اضافه کردن Memory به یک چت‌بات، ایجنت‌سازی نیست. Memory بدون تصمیم dynamic درباره‌ی ترتیب اقدامات، صرفاً context window بزرگ‌تری است. ایجنت واقعی وقتی است که مدل در هر حلقه بین Reason → Act → Observe حرکت می‌کند و خروجی هر حلقه ورودی حلقه‌ی بعدی را تغییر می‌دهد.

مفهومتصمیم ترتیب ابزارتصمیم تعداد حلقهپیچیدگی
چت‌بات سادهبدون ابزاریک پاسخکم
RAGثابت: retrieve → generateیک حلقهکم
Workflowثابت از پیش تعریف‌شدهثابتمتوسط
ایجنتDynamic در زمان اجراDynamicبالا

نمونه‌ی واقعی: فرض کنید می‌خواهید هر روز خلاصه‌ی اخبار یک حوزه را بسازید. ترتیب ابزارها ثابت است — fetch خبرها، extract، summarize. این یک workflow است. اگر ایجنت بسازید، مدل ممکن است تصمیم بگیرد یک بار دیگر fetch کند، یا خلاصه را دوباره بنویسد. این رفتار در این تسک نه‌فقط بی‌فایده، بلکه هزینه و latency اضافه می‌کند.

معماری‌های اصلی: ReAct، Plan-and-Execute و Reflexion#

ReAct برای تسک‌هایی مناسب است که مدل باید بین هر اقدام و مشاهده تصمیم بگیرد؛ Plan-and-Execute برای تسک‌هایی که ساختار کلی قابل‌پیش‌بینی است اما جزئیات نیاز به تطبیق دارد. Reflexion برای تسک‌هایی است که یک بار اجرا کافی نیست و مدل باید خروجی خود را ارزیابی و اصلاح کند. انتخاب بین این سه، اولویت‌بندی بین انعطاف‌پذیری و هزینه است.

الگوی ReAct — حلقه‌ی Reason → Act → Observe#

ReAct مخفف Reasoning and Acting است. الگوریتم اصلی در مقاله‌ی Yao et al. (2022) معرفی شد. مدل در هر حلقه یک thought تولید می‌کند، یک action انتخاب می‌کند، نتیجه‌ی action را به‌عنوان observation دریافت می‌کند، و دوباره thought بعدی را می‌سازد.

مزیت ReAct انعطاف‌پذیری است. ضعف آن: مصرف توکن بالا، latency زیاد، و ریسک infinite loop. هر حلقه شامل reasoning و action و observation است، بنابراین مصرف توکن به‌طور قابل‌توجهی بالاتر از یک فراخوانی ساده است. اگر تسک شما حداکثر دو یا سه ابزار نیاز دارد و ترتیبشان تقریباً همیشه یکی است، ReAct بیش از حد پیچیده است.

الگوی Plan-and-Execute — جداسازی برنامه‌ریزی از اجرا#

در Plan-and-Execute، ابتدا یک planner کل تسک را به زیرمرحله‌ها تقسیم می‌کند، سپس executor هر زیرمرحله را اجرا می‌کند. تفاوت کلیدی با ReAct: مدل در هر حلقه دوباره برنامه‌ریزی نمی‌کند.

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

الگوی Reflexion — بازخورد درونی و اصلاح خودکار#

Reflexion یک مرحله‌ی self-evaluation به انتهای اجرا اضافه می‌کند. مدل خروجی خود را نقد می‌کند و اگر کیفیت کافی نیست، دوباره اجرا می‌کند. این الگو برای تسک‌های کدنویسی یا نوشتن محتوا که نیاز به چند بار اصلاح دارند مناسب است.

موضع Anthropic در مقاله‌ی Building Effective Agents این است که بسیاری از کاربردها با workflowهای ساده قابل‌حله‌اند و ایجنت فقط جایی لازم است که مدل باید تصمیم dynamic بگیرد. این موضع در پروژه‌های واقعی تأیید می‌شود: الگوی تکرارشونده در پروژه‌های اعضای کامیونیتی این است که اولین نسخه‌ی ایجنت که ساخته می‌شود، معمولاً باید یک workflow باشد و بعداً به ایجنت ارتقا پیدا کند.

اجزای سازنده و پیش‌نیازهای فنی ساخت ایجنت#

یک ایجنت حداقل به چهار جزء نیاز دارد: Planning، Tool Use، Memory و Reflection. پیش‌نیاز فنی اصلی، توانایی تعریف دقیق ابزارها و stop condition است نه دانش عمیق مدل‌سازی. بدون stop condition صریح، هر ایجنتی پتانسیل تبدیل‌شدن به یک حلقه‌ی بی‌پایان را دارد.

Planning — مدل چگونه تسک را به زیرمرحله‌ها تقسیم می‌کند#

Planning می‌تواند implicit باشد (مدل در هر حلقه خودش تصمیم می‌گیرد قدم بعدی چیست) یا explicit (مدل اول لیست مراحل را تولید می‌کند). در ReAct، planning implicit است. در Plan-and-Execute، explicit. انتخاب بین این دو، انتخاب بین «مدل هر لحه فکر کند» و «مدل یک‌بار فکر کند و بعد اجرا کند» است.

Tool Use (Function Calling) — نوشتن schema دقیق ابزار#

Function Calling (Tool Use) قابلیت مدل برای صدا زدن توابع خارجی است. مدل‌هایی که از این قابلیت پشتیبانی می‌کنند، انتخاب اول ساخت ایجنت هستند. GPT-4o، Claude، و مدل‌های متن‌باز مانند Llama 3 از این قابلیت برخوردارند.

نکته‌ی حیاتی: schema ابزار باید آنقدر دقیق باشد که مدل نتواند آن را تفسیر اشتباه کند. یک tool description مبهم، اولین ریشه‌ی infinite loop است. در کلاس‌ها و پروژه‌های آموزشی، اشتباه رایج این است که توسعه‌دهنده description را برای خودش می‌نویسد نه برای مدل.

Memory و Reflection — چه زمانی لازم است و چه زمانی overhead#

Memory برای تسک‌هایی لازم است که چند حلقه اجرا دارند و مدل باید نتیجه‌ی حلقه‌های قبلی را به‌خاطر بیاورد. Reflection برای تسک‌هایی لازم است که کیفیت خروجی مهم است و یک بار اجرا کافی نیست. اگر تسک شما تک‌حلقه‌ای است، Memory و Reflection فقط overhead هستند.

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

while iterations < MAX_ITERATIONS: response = llm.chat(system_prompt, messages, tools) if response.has_tool_call: result = execute_tool(response.tool_call) messages.append(result) elif response.is_final: return response.content else: return "failed: no valid action"

پیش‌نیازهای دانشی: درک token، temperature، system prompt، و stop sequence. بدون این‌ها، debugging ایجنت عملاً غیرممکن است.

چه زمانی ایجنت گزینه‌ی مناسبی نیست؟#

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

الگوی «ایجنت‌سازی به‌عنوان fallback»: اول workflow خطی بسازید. فقط جایی که مدل باید تصمیم dynamic بگیرد، ایجنت اضافه کنید. این رویکرد هم هزینه‌ی توسعه را کاهش می‌دهد، هم debugging را ساده‌تر می‌کند.

سه حالت که ایجنت فقط هزینه و عدم‌قطعیت اضافه می‌کند:

  • تسک‌هایی که ورودی و خروجی‌شان کاملاً مشخص است (مثلاً ترجمه‌ی یک پاراگراف)
  • فرآیندهایی که ترتیب مراحل در هر اجرا یکسان است (مثلاً ETL ساده)
  • کاربردهایی که فقط یک tool call نیاز دارند (مثلاً جست‌وجوی قیمت و نمایش نتیجه)

اشتباه رایج در پروژه‌های فارسی‌زبان: نمایش فقط happy path در دمو و نادیده گرفتن رفتار در شکست. ایجنتی که فقط وقتی همه‌چیز درست است کار می‌کند، در production بی‌ارزش است. سؤالی که مدام در گفتگوهای اعضا برمی‌گردد این است: «ایجنت من وقتی API جواب نمی‌دهد چه می‌کند؟» اگر پاسخ ندارید، هنوز آماده‌ی deploy نیستید.

مقایسه فریمورک‌ها: LangChain، CrewAI، AutoGen و LlamaIndex#

LangChain برای پروژه‌های بزرگ با نیاز به abstraction مناسب است اما در پروژه‌های کوچک overhead ایجاد می‌کند؛ CrewAI و AutoGen برای سناریوهای multi-agent طراحی شده‌اند؛ LlamaIndex تمرکزش بر RAG و داده است نه orchestration. انتخاب فریمورک نباید اولین تصمیم شما باشد — اول معماری، بعد ابزار.

LangChain — چه زمانی abstraction layer مفید و چه زمانی مضر است#

برای یادگیری معماری ایجنت، LangChain مفید است چون مفاهیم را به‌صورت استاندارد بسته‌بندی می‌کند. اما برای پروژه‌های کوچک، abstraction layer آن overhead اضافی ایجاد می‌کند. یک ایجنت تک‌فایل بدون فریمورک، هم ساده‌تر debug می‌شود و هم درک بهتری از زیرساخت می‌دهد. اگر بعد از سه ماه هنوز نمی‌توانید بگویید LangChain در کجا حلقه‌ی شما را می‌شکند، آن حلقه را خودتان بنویسید.

CrewAI — نقش‌محور و مناسب برای سناریوهای team-based#

CrewAI مدل «نقش» (Role) را به ایجنت‌ها نسبت می‌دهد. هر ایجنت یک persona دارد و ابزارهای خودش را می‌داند. این الگو برای سناریوهایی مناسب است که چند ایجنت باید با هم هماهنگ شوند — مثلاً یک ایجنت research، یک ایجنت writing، یک ایجنت review.

AutoGen (Microsoft) — مکالمه‌ی بین ایجنت‌ها برای حل تسک#

AutoGen از الگوی «مکالمه‌ی بین ایجنت‌ها» استفاده می‌کند. دو ایجنت با هم حرف می‌زنند تا مسئله را حل کنند. این الگو برای کدنویسی و تسک‌های چرخه‌ای مناسب است اما debugging آن به‌شدت سخت‌تر است.

LlamaIndex — تمرکز بر RAG و داده، نه orchestration#

LlamaIndex ابزار orchestration ایجنت نیست. اگر نیاز اصلی‌تان retrieval از داده‌های ساختاریافته است، LlamaIndex مناسب است. اما اگر باید ترتیب ابزارها dynamic باشد، LlamaIndex به‌تنهایی کافی نیست.

فریمورکپیچیدگیمناسب برایOverhead در پروژه‌ی کوچک
LangChainمتوسط تا بالاپروژه‌های بزرگ با نیاز به abstractionبالا
CrewAIمتوسطسناریوهای multi-agent نقش‌محورمتوسط
AutoGenبالامکالمه‌ی بین ایجنت‌هابالا
LlamaIndexمتوسطRAG و دادهکم (اگر فقط RAG نیاز دارید)

تک‌ایجنت یا چندایجنتی؟ overhead هماهنگی و تصمیم واقعی#

در پروژه‌های واقعی، ایجنت تک‌نفره با ابزارهای محدود اغلب قابل‌اعتمادتر از multi-agent است. debugging در چندایجنتی به‌شدت سخت‌تر می‌شود و latency و هزینه بدون بهبود کیفیت افزایش می‌یابد. الگوی مشاهده‌شده در پروژه‌های اعضای کامیونیتی: بیشتر تیم‌هایی که با multi-agent شروع می‌کنند، بعد از هفته‌ها debugging به تک‌ایجنت با ابزارهای بیشتر برمی‌گردند.

چند گره‌ی ایجنت با جریان‌های داده و سربار هماهنگی میان آن‌ها در محیط تیره‌ی سرور
هرچه ایجنت‌ها بیشتر، خطوط هماهنگی و هزینه‌ی سربار هم بیشتر می‌شود.

هزینه‌ی پنهان هماهنگی: هر ایجنت اضافه، توکن و latency اضافه می‌کند. پیام‌رسانی بین ایجنت‌ها، parsing خروجی، و مدیریت state مشترک — همه overhead هستند که در تک‌ایجنت وجود ندارند.

چه زمانی multi-agent واقعاً لازم است: تسک‌هایی با subtasks مستقل که هر subtask به domain expertise متفاوت نیاز دارد. مثلاً یک ایجنت برای database query و یک ایجنت برای frontend generation. اما حتی در این حالت، ابتدا با تک‌ایجنت و دو ابزار مختلف شروع کنید.

اشتباه رایج: «بیشتر ایجنت = بهتر». این فرضیه در اکثر پروژه‌های واقعی غلط است.

چرا ایجنت من در حلقه‌ی بی‌پایان گیر می‌کند؟#

ایجنت در حلقه‌ی بی‌پایان (infinite loop) گیر کردن سه ریشه‌ی اصلی دارد: tool description مبهم، نبود stop condition، و مدل به‌جای شکست صریح، retry نامحدود می‌کند. هر سه ریشه قابل‌پیشگیری‌اند، اما فقط اگر از اول طراحی‌تان stop condition و fallback داشته باشد.

ریشه‌ی اول — tool description مبهم و راه‌حل#

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

ریشه‌ی دوم — نبود stop condition در system prompt#

مدل باید بداند «چه زمانی متوقف شود» و «چه زمانی از کاربر بپرسد». بدون stop condition صریح در system prompt، مدل فرض می‌کند باید حتماً تسک را کامل کند و در حلقه می‌ماند.

ریشه‌ی سوم — retry بی‌حد به‌جای شکست صریح#

مدل‌ها به‌طور ذاتی retry می‌کنند. اگر retry بی‌حد باشد، ایجنت هرگز شکست را اعلام نمی‌کند. راه‌حل: MAX_ITERATIONS در حلقه‌ی اصلی و fallback message وقتی به حد مجاز رسید.

نمونه‌ی ساختار prompt با stop condition:

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

هزینه، latency و قابل‌اعتمادسازی ایجنت در production#

مصرف توکن ایجنت‌های ReAct به‌طور قابل‌توجهی بالاتر از یک فراخوانی ساده است. قابل‌اعتمادسازی یعنی تعریف صریح رفتار در حالت شکست، حد مجاز حلقه، و logging کامل هر observation. بدون این سه، ایجنت شما در production یک جعبه‌ی سیاه است.

مدل هزینه — توکن retry، observationهای اضافی، و مصرف پنهان#

هزینه‌ی ایجنت به تعداد حلقه‌ها، طول هر prompt، و مصرف توکن observationها بستگی دارد. در حالت ساده، یک ایجنت ReAct با چند حلقه، توکن چندین برابر یک فراخوانی مستقیم مصرف می‌کند. هزینه‌ی دقیق بر اساس مدل انتخابی و حجم تسک متفاوت است.

معیارهای ارزیابی — چه چیزی را اندازه بگیریم#

  • تعداد حلقه‌ها تا رسیدن به نتیجه‌ی نهایی
  • نرخ شکست (ایجنت نتوانست تسک را کامل کند)
  • نرخ infinite loop
  • میانگین توکن مصرفی per تسک
  • زمان پاسخ‌گویی (latency)

الگوهای قابل‌اعتمادسازی — max iterations، timeout، fallback#

تجربه‌ی میدانی: logging هر حلقه‌ی ReAct برای debugging ضروری است. بدون log کامل observationها، نمی‌توانید بفهمید چرا ایجنت در حلقه‌ی 4 گیر کرده و حلقه‌ی 3 را درست انجام داده.

چه کارهایی اصلاً نباید به ایجنت سپرد:

  • عملیات مالی بدون تأیید انسانی
  • حذف داده
  • ارسال ایمیل یا پیام بدون review
  • تصمیمات حقوقی یا پزشکی

نتیجه‌ی عملی: قبل از ساخت ایجنت، بپرسید «آیا مدل واقعاً باید در زمان اجرا تصمیم بگیرد؟» اگر پاسخ منفی است، workflow بسازید. اگر پاسخ مثبت است، با تک‌ایجنت و چند ابزار شروع کنید، stop condition تعریف کنید، و هر حلقه را log بگیرید.

اگر می‌خواهید این مرزهای تصمیم را در پروژه‌های واقعی تمرین کنید، دوره‌ی «ساخت Ai Agent با N8N» در کامیونیتی اسکول دقیقاً همین مسیر را پوشش می‌دهد — از تشخیص اینکه کجا ایجنت لازم است تا پیاده‌سازی و debugging در production.