چیتشیت
مقایسهی فریمورکهای ایجنت
Agent Frameworks Compared
انتخاب بین LangGraph، CrewAI، AutoGen، Agno، Mastra، یک SDK ایجنت یا پایتون خالص بر اساس ساختار مسئله، وضعیت و هزینهی مسیریابی.
فهرست مطالب
- مقایسهی شانه به شانهی فریمورکهای ارکستراسیون
- مقایسهی شانه به شانهی SDKها و محیطهای اجرای ایجنت
- چه زمانی از چه ابزاری استفاده کنیم
- درخت تصمیم: (recommend(p
- محیط اجرای اکتور (ساختار AutoGen v0.4)
- وظایف SDK در قالب کد
- تعلیق و ادامهی اجرا در Mastra
- اجرای پروژهها
- آنچه پروژهها میسازند و بررسی میکنند
- پیشفرضها و محدودیتها
- عیبیابی
- پرسشها
مقایسهی شانه به شانهی فریمورکهای ارکستراسیون
مقایسه| معیار | LangGraph | CrewAI | AutoGen | Agno |
|---|---|---|---|---|
| انتزاع اصلی | StateGraph | Crew | جفت ConversableAgent | Agent |
| مدل ذهنی | ماشین وضعیت | تیمی از متخصصان | چت | ایجنت مجهز و آمادهی استفاده (batteries included) |
| وضعیت | وضعیت نوعدار، چکپوینتر | رشتههای متنی از طریق context | تاریخچهی چت | Session store through storage= |
| تعیینکنندهی انشعاب | شما، با یالهای شرطی | مدیر، یا شما در زمان ساخت | ایجنتها، از طریق چت | فراخوانی ابزار بعدی |
| توکنهای مسیریابی | فقط جایی که llm.invoke مینویسید | مدیر سلسلهمراتبی توکن مصرف میکند | GroupChatManager توکن مصرف میکند | مسیر تکایجنتی سبک |
| بهترین کاربرد | وضعیت نوعدار، وقفه برای تایید انسانی | برنامههای کوتاهِ نقشمحور | گفتوگوی پیشنهاددهنده-ناقد | تکایجنت، نشستها، حافظه |
| بدترین کاربرد | توپولوژی نامشخص | انشعابهای پیچیده | DAG مشخص، وضعیت پایدار | گرافهای با انشعاب عمیق |
مقایسهی شانه به شانهی SDKها و محیطهای اجرای ایجنت
مقایسه| معیار | OpenAI Agents SDK | Claude Agent SDK | AutoGen v0.4 | Mastra |
|---|---|---|---|---|
| اجزای سازنده | 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
گامبهگام- پایتون خالصمقدار
total_llm_callsبرابر 2 یا کمتر. بدون نقشها، گفتوگو، ادامهی اجرا، توزیع موازی یا وقفهی انسانی. - langgraphشرط
needs_resume،needs_human_interruptیاhas_parallel_fanoutبرقرار باشد. - autogenشرط
has_dialogueبدونhas_typed_stateبرقرار باشد. - crewaiشرط
has_rolesبدونhas_typed_stateبرقرار باشد. - agnoشرط
needs_session_memoryبرقرار باشد، بدون نقشها، بدون گفتوگو. - langgraphشرط
has_typed_stateبرقرار باشد، و طرح پشتیبان.
محیط اجرای اکتور (ساختار AutoGen v0.4)
معماریوظایف 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 mode | Parallel | تاخیر دنباله کمتر، توکنها در رفتوبرگشت هدر میروند |
`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ایجاد میکند.