چیت‌شیت

مقایسه‌ی فریم‌ورک‌های ایجنت

Agent Frameworks Compared

انتخاب بین LangGraph، CrewAI، AutoGen، Agno، Mastra، یک SDK ایجنت یا پایتون خالص بر اساس ساختار مسئله، وضعیت و هزینه‌ی مسیریابی.

  • ۱۲ بخش
  • ۶ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. مقایسه‌ی شانه به شانه‌ی فریم‌ورک‌های ارکستراسیون
  2. مقایسه‌ی شانه به شانه‌ی SDKها و محیط‌های اجرای ایجنت
  3. چه زمانی از چه ابزاری استفاده کنیم
  4. درخت تصمیم: (recommend(p
  5. محیط اجرای اکتور (ساختار AutoGen v0.4)
  6. وظایف SDK در قالب کد
  7. تعلیق و ادامه‌ی اجرا در Mastra
  8. اجرای پروژه‌ها
  9. آنچه پروژه‌ها می‌سازند و بررسی می‌کنند
  10. پیش‌فرض‌ها و محدودیت‌ها
  11. عیب‌یابی
  12. پرسش‌ها

مقایسه‌ی شانه به شانه‌ی فریم‌ورک‌های ارکستراسیون

مقایسه
معیارLangGraphCrewAIAutoGenAgno
انتزاع اصلیStateGraphCrewجفت ConversableAgentAgent
مدل ذهنیماشین وضعیتتیمی از متخصصانچتایجنت مجهز و آماده‌ی استفاده (batteries included)
وضعیتوضعیت نوع‌دار، چک‌پوینتررشته‌های متنی از طریق contextتاریخچه‌ی چتSession store through storage=
تعیین‌کننده‌ی انشعابشما، با یال‌های شرطیمدیر، یا شما در زمان ساختایجنت‌ها، از طریق چتفراخوانی ابزار بعدی
توکن‌های مسیریابیفقط جایی که llm.invoke می‌نویسیدمدیر سلسله‌مراتبی توکن مصرف می‌کندGroupChatManager توکن مصرف می‌کندمسیر تک‌ایجنتی سبک
بهترین کاربردوضعیت نوع‌دار، وقفه برای تایید انسانیبرنامه‌های کوتاهِ نقش‌محورگفت‌وگوی پیشنهاددهنده-ناقدتک‌ایجنت، نشست‌ها، حافظه
بدترین کاربردتوپولوژی نامشخصانشعاب‌های پیچیدهDAG مشخص، وضعیت پایدارگراف‌های با انشعاب عمیق

مقایسه‌ی شانه به شانه‌ی SDKها و محیط‌های اجرای ایجنت

مقایسه
معیارOpenAI Agents SDKClaude Agent SDKAutoGen v0.4Mastra
اجزای سازندهAgent، Handoff، Guardrail، Session، Tracingابزارها، MCP، هوک‌ها، ساب‌ایجنت‌ها، ذخیره‌ساز نشستCore، AgentChat، Extensionsایجنت‌ها، ابزارها، جریان‌های کاری
واگذاریTool named transfer_to_<agent_name>ساب‌ایجنت‌ها با زمینه‌ی مستقل خودارسال پیام به صندوق دریافت اکتورگام‌های جریان کاری
وضعیتSession در SQLite، Redis، سفارشیappend، load، delete با آبشار حذفیوضعیت خصوصی اکتورذخیره‌سازی ترکیبی
ردگیری محاسباتفعال به‌صورت پیش‌فرضزمینه‌ی ردگیری محاسبات W3C به CLIیک اسپن برای هر پیامMastra Studio
مناسب برایمحصولات متکی بر OpenAIمحصولات متکی بر Claudeهمزمانی با مدل اکتور، تفکیک خطاTypeScript، Next.js یا Vercel

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

مفهوم‌ها
LangGraph
وضعیت نوع‌دار، تاییدها، ادامه‌ی اجرا، توزیع موازی با Send.
CrewAI
a Flow that calls Crew.kickoff() in a step.
AutoGen
گفت‌وگوی پیشنهاددهنده-ناقد.
Agno
تعداد زیادی ایجنت پایتونی کوتاه‌عمر، FastAPI.
Mastra
برای TypeScript، Next.js یا Vercel و ابزارهای نوع‌دار با Zod.
پایتون خالص
دو فراخوانی LLM و یک ابزار.

درخت تصمیم: (recommend(p

گام‌به‌گام
  1. پایتون خالصمقدار total_llm_calls برابر 2 یا کمتر. بدون نقش‌ها، گفت‌وگو، ادامه‌ی اجرا، توزیع موازی یا وقفه‌ی انسانی.
  2. langgraphشرط needs_resume، needs_human_interrupt یا has_parallel_fanout برقرار باشد.
  3. autogenشرط has_dialogue بدون has_typed_state برقرار باشد.
  4. crewaiشرط has_roles بدون has_typed_state برقرار باشد.
  5. agnoشرط needs_session_memory برقرار باشد، بدون نقش‌ها، بدون گفت‌وگو.
  6. langgraphشرط has_typed_state برقرار باشد، و طرح پشتیبان.

محیط اجرای اکتور (ساختار AutoGen v0.4)

معماری
sendstartreviewreviewreview_resultخطای crash_me raises__user__ارسال startصف محیط اجراصف دوطرفه‌ی پیام‌هاChecklistAgentارسال سه reviewdead_lettersپیام‌های ناموفقReviewerAgentارسال review_result

وظایف SDK در قالب کد

کار و کد
وظیفهکد
درخواست از پیشنهاددهندهpython main.py --ask
تحویل وظیفه به یک ایجنتtransfer_to_<agent_name>
غیرفعال کردن ردگیری محاسباتOPENAI_AGENTS_DISABLE_TRACING=1
ارسال اسپن‌ها به بک‌اند شماadd_trace_processor(processor)
اجرا با تاریخچه‌ی ذخیره‌شدهRunner.run(agent, input, session=session)
اجبار خروجی وظیفه به شکل نوع‌دارoutput_pydantic=MyModel
فهرست نشست‌های ساب‌ایجنتlist_subkeys(session_id)

تعلیق و ادامه‌ی اجرا در Mastra

کد
typescript
const workflow = createWorkflow({ id: "ticket-triage", inputSchema: ticketSchema, outputSchema: resultSchema })
  .then(classifyStep)                                               // نیت خواندن یا نوشتن
  .then(planStep)                                                   // عملیات جستجو یا به‌روزرسانی
  .then(executeStep)                                                // پیش از به‌روزرسانی معلق می‌شود
  .commit();
if (!resumeData?.approved)
  return suspend({ ticketId: plan.ticket.id, planHash: digest });   // digest = planHash(plan)
const { workflow, storage } = await persistentWorkflow(tool, "file:" + resolve(args["--db"]));
const run = await workflow.createRun({ runId: args["--resume"] });  // فرایند تازه، همان فایل
result = await run.resume({ step: "execute", resumeData });         // approved، ticketId، planHash

اجرای پروژه‌ها

دستورها
دستورعملکرد
python3 scripts/project_test.py <project> --stage 1 --path <dir> --strictامتیازدهی به یک مرحله
python3 scripts/project_test.py <project> --all --solution --optional --strictتست‌های واقعی SDK را اجرا کنید. یک مورد SKIP خطا محسوب می‌شود
node --experimental-strip-types cli.ts --ticket fixtures/ticket.json --out workflow-outputجریان کاری اولیه. هنگام نیاز به تایید یک چک‌پوینت ذخیره می‌کند
node --experimental-strip-types optional-mastra/cli.ts --ticket fixtures/ticket.json --db ./runs.db --out pending-outputاجرای پایدار Mastra. یک runId گزارش می‌دهد
python3 main.py --ticket fixtures/ticket.json --out support-outputبررسی آفلاین پشتیبانی در index.html
main.py --ticket YOUR_TICKET.json --adk --out support-adk-outputبررسی همان تیکت با ایجنت‌های واقعی ADK

آنچه پروژه‌ها می‌سازند و بررسی می‌کنند

مفهوم‌ها
آنچه Mastra می‌سازد
جریان کاری تایید نوع‌دار. پیش از به‌روزرسانی معلق شده و از SQLite ادامه می‌یابد.
خروجی Mastra
فایل workflow.json به همراه approval.json با approved=false.
بررسی Mastra
تایید تطبیق‌یافته منجر به یک فراخوانی ابزار می‌شود. هش نادرست صفر فراخوانی دارد.
آنچه ADK می‌سازد
پاسخ پشتیبانی با پاک‌سازی داده‌های حساس یا ارجاع به انسان، سپس همان قوانین در ایجنت‌های واقعی ADK.
خروجی ADK
یک صفحه‌ی بررسی HTML و support.json.
بررسی ADK
ورود فاکتور، صورت‌حساب و دسترسی را مرتبط می‌کند، بنابراین ارجاع به انسان رخ می‌دهد.

پیش‌فرض‌ها و محدودیت‌ها

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
Runner `max_hops`3شمارنده‌ی گام برای مقابله با انحراف در تحویل وظیفه
Runtime `max_messages`100پیام‌ها برای هر run_until_idle
HierarchicalCrew `max_steps`5دورهای مدیر قبل از توقف
Guardrail modeParallelتاخیر دنباله کمتر، توکن‌ها در رفت‌وبرگشت هدر می‌روند
`executePlan` `maxCalls`3محدوده‌ی مجاز 1 تا 100
`executePlan` `maxAttempts`2محدوده‌ی مجاز 1 تا 10

عیب‌یابی

عیب‌یابی
  • A کار را به B تحویل می‌دهد، B به A برمی‌گرداند

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

    علت
    گاردریل‌های ابزار فقط روی ابزارهای تابعی فعال می‌شوند
    راه‌حل
    یک شیوه‌نامه‌ی مجزا بیفزایید
  • وظیفه‌ی N+1 روی متن آزاد بداهه‌پردازی می‌کند

    علت
    تحویل وظیفه‌ی شکننده
    راه‌حل
    مقدار output_pydantic را روی وظیفه‌ی N تنظیم کنید
  • Crew بیش از حد توکن مصرف می‌کند

    علت
    هزینه‌ی توکن ناشی از مدیر LLM
    راه‌حل
    به Sequential تغییر دهید
  • زمینه پیش از نخستین فراخوانی ابزار از بین می‌رود

    علت
    پیش‌داستان‌های طولانی
    راه‌حل
    پیش‌داستان‌ها را زیر 200 کلمه نگه دارید
  • سربار بر وظایف کوچک غلبه می‌کند

    علت
    تولید بیش از حد ساب‌ایجنت
    راه‌حل
    وظایف را دسته‌بندی کنید
  • نشست‌ها بدون محدودیت رشد می‌کنند

    علت
    افزایش حجم نشست
    راه‌حل
    از list_sessions و یک شیوه‌نامه‌ی انقضا استفاده کنید
  • ادامه‌ی اجرا قبل از ابزار شکست می‌خورد

    علت
    تیکت یا خلاصه‌ی نادرست در تایید
    راه‌حل
    مقادیر ticketId و planHash را بدون تغییر نگه دارید

پرسش‌ها

پرسش و پاسخ
چرا تحویل وظیفه یک ابزار است؟
مدل تابع transfer_to_billing_agent را فراخوانی می‌کند. محیط اجرا ایجنت‌ها را جابه‌جا می‌کند.
Why do actors isolate faults?
send(agent_b, msg) only queues. The runtime catches handler crashes.
آیا مدل می‌تواند مسیر ADK را تغییر دهد؟
خیر. خطای ValueError ایجاد می‌کند.