spinny:~/writing $ vim agentic-ai-frameworks-comparison.md
1~2AI agents از دموهای تحقیقاتی به سیستمهای production منتقل شدهاند. انتظار میرود تا 2026 بیش از 60 درصد برنامههای AI سازمانی شامل اجزای agentic باشند. اما ساختن agents از صفر - مدیریت tool loops، state، memory، error handling و هماهنگی multi-agent - پیچیده است. اینجاست که فریمورکها وارد میشوند.3~4چهار فریمورک در 2026 غالب هستند: **LangGraph**، **CrewAI**، **OpenAI Agents SDK** و **Claude Agent SDK**. هر کدام رویکردی اساسا متفاوت به یک مسئله دارند: دادن توانایی استدلال، برنامهریزی، استفاده از ابزار و همکاری به LLMها.5~6## در یک نگاه7~8| جنبه | LangGraph | CrewAI | OpenAI Agents SDK | Claude Agent SDK |9|--------|-----------|--------|-------------------|-----------------|10| **سازنده** | LangChain | CrewAI Inc. | OpenAI | Anthropic |11| **Architecture** | Graph-based | Role-based | Handoff-based | Autonomous loop |12| **فلسفه** | حداکثر کنترل | Team collaboration | حداقل abstraction | کامپیوتر را به agent بدهید |13| **زبانها** | Python, TypeScript | Python | Python | Python, TypeScript |14| **Model support** | هر کدام (OpenAI, Claude, local) | هر کدام | هر کدام (علیرغم نام) | فقط Claude |15| **GitHub stars** | ~29k | ~40k | ~21k | ~6k |16| **بهترین برای** | Complex stateful workflows | Multi-agent specialization | Routing و triage | Coding و file-heavy tasks |17~18## LangGraph: سازنده گراف19~20LangGraph جریانهای کاری agent را به صورت **directed cyclic graphs** مدل میکند. شما nodeها (توابعی که کار انجام میدهند) و edgeها (انتقالهای بین آنها، به صورت اختیاری شرطی) تعریف میکنید. State از طریق گراف جریان مییابد و از طریق checkpointing ذخیره میشود.21~22این صریحترین و قابل کنترلترین فریمورک است - شما هر مرحله را خودتان سیمکشی میکنید.23~24```mermaid25graph LR26 Start --> Router[Router Node]27 Router -->|needs research| Research[Research Node]28 Router -->|needs code| Code[Code Node]29 Research --> Synthesize[Synthesize Node]30 Code --> Synthesize31 Synthesize --> End32```33~34### مفاهیم اصلی35~36- **StateGraph**: تعریف گراف با typed state37- **Nodes**: توابع Python که state را تبدیل میکنند38- **Edges**: اتصالات بین nodeها، میتوانند شرطی باشند39- **Checkpointing**: persistence داخلی برای جریانهای کاری طولانیمدت40~41### Code Example42~43```python44from langgraph.graph import StateGraph, MessagesState, START, END45from langchain_openai import ChatOpenAI46~47llm = ChatOpenAI(model="gpt-4o")48~49def call_agent(state: MessagesState):50 response = llm.invoke(state["messages"])51 return {"messages": [response]}52~53def should_continue(state: MessagesState):54 last = state["messages"][-1]55 if last.tool_calls:56 return "tools"57 return END58~59def call_tools(state: MessagesState):60 # Execute tool calls and return results61 results = []62 for tool_call in state["messages"][-1].tool_calls:63 result = execute_tool(tool_call)64 results.append(result)65 return {"messages": results}66~67graph = StateGraph(MessagesState)68graph.add_node("agent", call_agent)69graph.add_node("tools", call_tools)70graph.add_edge(START, "agent")71graph.add_conditional_edges("agent", should_continue, {"tools": "tools", END: END})72graph.add_edge("tools", "agent")73~74app = graph.compile()75result = app.invoke({"messages": [{"role": "user", "content": "What's the weather?"}]})76```77~78### نقاط قوت79~80- کنترل دقیق روی هر مرحله و انتقال81- Checkpointing و human-in-the-loop داخلی82- برابری کامل با TypeScript83- با هر LLM provider کار میکند84- بهترین برای جریانهای کاری پیچیده با شاخهبندی شرطی و حلقهها85~86### نقاط ضعف87~88- منحنی یادگیری تند - باید مفاهیم graph theory را بفهمید89- پرگو برای use caseهای ساده - یک agent پایه به boilerplate بیشتری نسبت به فریمورکهای دیگر نیاز دارد90- اشکالزدایی جریانهای گراف بدون LangSmith میتواند چالشبرانگیز باشد91~92### قیمتگذاری93~94Open-source (MIT). LangSmith (پلتفرم observability مدیریتشده) سطوح پولی برای نظارت production دارد.95~96## CrewAI: تشکیلدهنده تیم97~98CrewAI از یک استعاره انسانی استفاده میکند: شما یک **خدمه** از agents تخصصی جمع میکنید، هر کدام با یک **role**، **goal** و **backstory**. agents با استفاده از **tools** روی **tasks** همکاری میکنند، که توسط یک **process** (sequential، hierarchical یا consensual) هماهنگ میشوند.99~100آن را مثل استخدام یک تیم در نظر بگیرید که هر عضو عنوان شغلی و تخصص مشخصی دارد.101~102```mermaid103graph TD104 Crew[Crew Manager] --> R[Researcher\nRole: Find data\nTools: WebSearch]105 Crew --> W[Writer\nRole: Write content\nTools: FileWrite]106 Crew --> E[Editor\nRole: Review quality\nTools: FileRead]107 R --> Task1[Research Task]108 W --> Task2[Writing Task]109 E --> Task3[Review Task]110 Task1 --> Task2 --> Task3111```112~113### مفاهیم اصلی114~115- **Agent**: شخصیتی با role، goal، backstory و tools116- **Task**: تکلیفی با description، expected output و agent اختصاصیافته117- **Crew**: گروهی از agents که با هم کار میکنند118- **Process**: استراتژی اجرا (sequential، hierarchical، consensual)119- **Flow**: لایه orchestration رویدادمحور برای اتصال چندین crew120~121### Code Example122~123```python124from crewai import Agent, Task, Crew, Process125~126researcher = Agent(127 role="Senior Research Analyst",128 goal="Find comprehensive data about the given topic",129 backstory="You have 10 years of experience in technology research. "130 "You are thorough and always verify facts from multiple sources.",131 tools=[web_search_tool],132 verbose=True,133)134~135writer = Agent(136 role="Technical Writer",137 goal="Create clear, engaging technical content",138 backstory="You write for a developer audience. "139 "Your articles are practical and include code examples.",140 tools=[file_tool],141 verbose=True,142)143~144research_task = Task(145 description="Research the latest developments in WebAssembly in 2026. "146 "Focus on WASI, Component Model, and production use cases.",147 expected_output="A structured research document with key findings and sources.",148 agent=researcher,149)150~151writing_task = Task(152 description="Write a blog post based on the research. "153 "Include code examples and Mermaid diagrams.",154 expected_output="A complete blog post in Markdown format.",155 agent=writer,156 context=[research_task], # Writer receives researcher's output157)158~159crew = Crew(160 agents=[researcher, writer],161 tasks=[research_task, writing_task],162 process=Process.sequential,163 verbose=True,164)165~166result = crew.kickoff()167print(result.raw)168```169~170### نقاط قوت171~172- Role-based abstraction شهودی - درک آن آسان است173- بیش از 100 tool integration داخلی174- حافظه مشترک بین agents (کوتاهمدت، بلندمدت، entity)175- بزرگترین community (~40k GitHub stars)176- فرآیند سلسلهمراتبی با یک agent "مدیر" که تفویض و اعتبارسنجی میکند177~178### نقاط ضعف179~180- کنترل کمتر از LangGraph - شما roleها تعریف میکنید، نه مسیرهای اجرای دقیق181- فرآیند سلسلهمراتبی وقتی agents مخالف باشند میتواند غیرقابل پیشبینی باشد182- اشکالزدایی مکالمات multi-agent سختتر از جریانهای تکagent است183~184### قیمتگذاری185~186Open-source core (رایگان). CrewAI Platform: $99/ماه (Teams) تا $120k/سال (Enterprise). قیمتگذاری بر اساس crewهای فعال و اجراهای ماهانه.187~188## OpenAI Agents SDK: مسیریاب189~190OpenAI Agents SDK (جانشین معنوی Swarm) روی **handoffs** تمرکز دارد - agents مکالمات را به agents تخصصی دیگر منتقل میکنند. این مینیمالترین فریمورک است: agents، tools، handoffs و guardrails. همین.191~192```mermaid193graph LR194 User --> Triage[Triage Agent]195 Triage -->|billing question| Billing[Billing Agent]196 Triage -->|refund request| Refund[Refund Agent]197 Triage -->|technical issue| Support[Support Agent]198 Billing --> Response[Response]199 Refund --> Response200 Support --> Response201```202~203### مفاهیم اصلی204~205- **Agent**: model + instructions + tools + handoffs206- **Handoff**: انتقال به agent دیگر (به عنوان ابزاری که LLM میتواند فراخوانی کند مدل شده)207- **Guardrail**: اعتبارسنجی ورودی/خروجی که به صورت موازی با agent اجرا میشود208- **Runner**: حلقه agent را اجرا میکند209- **Tracing**: observability داخلی برای تمام فراخوانیهای LLM، فراخوانی ابزار و handoffها210~211### Code Example212~213```python214from agents import Agent, Runner, handoff, InputGuardrail, GuardrailFunctionOutput215from pydantic import BaseModel216~217class SafetyCheck(BaseModel):218 is_safe: bool219 reason: str220~221async def content_safety(ctx, agent, input_text):222 result = await Runner.run(223 Agent(name="Safety", instructions="Check if input is safe. No PII."),224 input_text,225 context=ctx,226 )227 output = SafetyCheck.model_validate_json(result.final_output)228 return GuardrailFunctionOutput(229 output_info=output, tripwire_triggered=not output.is_safe230 )231~232billing_agent = Agent(233 name="Billing Agent",234 instructions="You handle billing inquiries. Be precise with numbers.",235 tools=[lookup_invoice, process_payment],236)237~238refund_agent = Agent(239 name="Refund Agent",240 instructions="You process refund requests. Always verify the order first.",241 tools=[lookup_order, issue_refund],242)243~244triage_agent = Agent(245 name="Triage Agent",246 instructions="Route the customer to the right specialist. "247 "Ask clarifying questions if needed.",248 handoffs=[billing_agent, refund_agent],249 input_guardrails=[InputGuardrail(guardrail_function=content_safety)],250)251~252result = await Runner.run(triage_agent, "I need a refund for order #4521")253print(result.final_output)254# The triage agent routes to refund_agent, which processes the refund255```256~257### نقاط قوت258~259- الگوی handoff تمیز - طبیعی برای جریانهای کاری routing/triage260- Guardrails به صورت موازی با اجرا کار میکنند (fail-fast، مسدودکننده نیست)261- داشبورد tracing داخلی برای اشکالزدایی262- علیرغم نام، modelهای غیر OpenAI را پشتیبانی میکند263- Abstraction حداقلی - درک و گسترش آن آسان است264~265### نقاط ضعف266~267- مدیریت state کمتر بالغ نسبت به LangGraph268- بدون persistence یا checkpointing داخلی269- اکوسیستم ابزارهای شخص ثالث کوچکتر است270- طراحی handoff-محور ممکن است به هر architecture نخورد271~272### قیمتگذاری273~274Open-source (MIT). برای هر model که استفاده میکنید per-token پرداخت میکنید.275~276## Claude Agent SDK: توسعهدهنده277~278Claude Agent SDK رویکرد متفاوتی دارد: به جای تعریف جریانهای کاری یا roleها، به agent **مجموعهای از ابزارها میدهید و میگذارید خودش بفهمد چطور کار را انجام دهد**. از همان حلقه خودمختار استفاده میکند که Claude Code را نیرو میدهد - خواندن، عمل، تایید، تکرار.279~280```mermaid281graph TD282 Prompt[User Prompt] --> Loop[Autonomous Agent Loop]283 Loop --> Reason[Reason about next step]284 Reason --> Act[Execute tool]285 Act --> Verify[Check result]286 Verify -->|not done| Loop287 Verify -->|done| Output[Final output]288```289~290### مفاهیم اصلی291~292- **query()**: نقطه ورود اصلی که حلقه agent را شروع میکند293- **Built-in tools**: Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch294- **ابزارهای سفارشی از طریق MCP**: ابزارها را به عنوان in-process MCP servers تعریف کنید295- **Sub-agents**: agents تخصصی که والد میتواند به آنها تفویض کند296- **Sessions**: حفظ context در تعاملات متعدد297~298### Code Example299~300```typescript301import { tool, createSdkMcpServer, query } from "@anthropic-ai/claude-agent-sdk";302import { z } from "zod";303~304const searchDocs = tool(305 "search_docs",306 "Search the internal documentation for relevant information",307 { query: z.string().describe("Search query") },308 async ({ query }) => {309 const results = await vectorStore.similaritySearch(query, 5);310 return {311 content: [{ type: "text", text: results.map(r => r.pageContent).join("\n\n") }],312 };313 }314);315~316const docsServer = createSdkMcpServer({317 name: "docs",318 version: "1.0.0",319 tools: [searchDocs],320});321~322for await (const message of query({323 prompt: "Find how authentication works in our system and write a summary",324 options: {325 mcpServers: { docs: docsServer },326 allowedTools: ["Read", "Glob", "Grep", "mcp__docs__search_docs"],327 },328})) {329 if (message.type === "result" && message.subtype === "success") {330 console.log(message.result);331 }332}333```334~335### نقاط قوت336~337- یکپارچگی MCP درجهیک - به هر اکوسیستم MCP server متصل شوید338- ابزارهای داخلی برای عملیات فایل، ترمینال و دسترسی وب339- فشردهسازی خودکار context برای codebaseهای بزرگ340- موازیسازی sub-agent برای کارهای پیچیده341- همان موتور Claude Code - در جریانهای کاری توسعه واقعی آزموده شده342~343### نقاط ضعف344~345- فقط modelهای Claude - بدون پشتیبانی از ارائهدهندگان متعدد346- فریمورک جدیدتر با community کوچکتر347- حتی برای Python SDK نیاز به Node.js runtime دارد348- کنترل کمتر صریح روی جریان کار در مقایسه با LangGraph349~350### قیمتگذاری351~352Open-source. نرخهای استاندارد Claude API token. Managed Agents (نسخه میزبانیشده): $0.08 به ازای هر session-hour علاوه بر هزینههای token.353~354## چه زمانی کدام را انتخاب کنید355~356```mermaid357graph TD358 Start{What's your priority?}359 Start -->|Full control over workflow| LG[LangGraph]360 Start -->|Multi-agent collaboration| CA[CrewAI]361 Start -->|Routing and triage| OA[OpenAI Agents SDK]362 Start -->|Coding and file automation| CS[Claude Agent SDK]363~364 LG --> LGU[Complex stateful workflows\nConditional branching\nHuman-in-the-loop]365 CA --> CAU[Team of specialized agents\nResearch + writing pipelines\nContent generation]366 OA --> OAU[Customer service routing\nMulti-step handoffs\nInput validation]367 CS --> CSU[Code generation and review\nFile-heavy automation\nMCP tool ecosystem]368```369~370### LangGraph را انتخاب کنید اگر:371- به کنترل دقیق روی هر مرحله جریان کار نیاز دارید372- use case شما شامل منطق شرطی پیچیده و حلقهها است373- به persistence داخلی و نقاط بازرسی human-in-the-loop نیاز دارید374- باید چندین LLM provider در یک جریان کار استفاده کنید375~376### CrewAI را انتخاب کنید اگر:377- یک abstraction شهودی مبتنی بر نقش میخواهید378- کار شما شامل agents متعدد با تخصصهای متمایز است379- به همکاری agents و رد و بدل context بین آنها نیاز دارید380- بزرگترین community و بیشترین integrationهای داخلی را میخواهید381~382### OpenAI Agents SDK را انتخاب کنید اگر:383- الگوی اصلی شما مسیریابی مکالمات به متخصصان است384- به guardrails نیاز دارید که ورودی/خروجی را به صورت موازی اعتبارسنجی کنند385- سادهترین abstraction ممکن با حداقل boilerplate را میخواهید386- tracing و observability داخلی مهم هستند387~388### Claude Agent SDK را انتخاب کنید اگر:389- agents شما باید کد بخوانند، بنویسند و اجرا کنند390- یکپارچگی MCP server درجهیک میخواهید391- به agents خودمختار نیاز دارید که تکرار و خوداصلاح کنند392- از قبل Claude استفاده میکنید و عمیقترین یکپارچگی را میخواهید393~394## آیا میتوانید فریمورکها را ترکیب کنید؟395~396بله. یک الگوی رایج استفاده از یک فریمورک برای orchestration و دیگری برای agents فردی است:397~398- **LangGraph** برای گراف جریان کار کلی399- **CrewAI** برای یک node خاص که نیاز به همکاری multi-agent دارد400- **Claude Agent SDK** برای وظایف فرعی مرتبط با کدنویسی از طریق MCP401- **OpenAI Agents SDK** برای triage و routing رو به مشتری402~403فریمورکها متقابلا انحصاری نیستند. آنچه برای هر بخش سیستم شما مناسب است استفاده کنید.404~405## نتیجهگیری406~407هر فریمورک شرط روشنی میبندد:408~409- **LangGraph** برای کنترل بهینهسازی میکند - شما هر انتقال را تعیین میکنید410- **CrewAI** برای همکاری بهینهسازی میکند - agents به عنوان یک تیم کار میکنند411- **OpenAI Agents SDK** برای سادگی بهینهسازی میکند - حداقل abstraction، handoffهای تمیز412- **Claude Agent SDK** برای خودمختاری بهینهسازی میکند - ابزارها را بدهید و بگذارید کار کند413~414انتخاب درست به جریان کار، تیم و stack فعلی شما بستگی دارد. آن را که با use case اصلیتان همخوانی دارد انتخاب کنید، خوب یاد بگیرید، و وقتی به نقطه قوت دیگران رسیدید آنها را وارد کنید.415~
NORMAL · agentic-ai-frameworks-comparison.md [readonly]415 lines · :q to close