spinny:~/writing $ less agentic-ai-frameworks-comparison.md
12انتقلت AI agents من العروض البحثية إلى أنظمة الإنتاج. من المتوقع أن تتضمن أكثر من 60% من تطبيقات AI المؤسسية مكونات agentic بحلول 2026. لكن بناء agents من الصفر - إدارة tool loops و state و memory و error handling والتنسيق متعدد agents - أمر معقد. هنا تأتي الأطر.34أربعة أطر تهيمن في 2026: **LangGraph** و **CrewAI** و **OpenAI Agents SDK** و **Claude Agent SDK**. كل منها يتبع نهجا مختلفا جذريا لنفس المشكلة: منح LLMs القدرة على التفكير والتخطيط واستخدام الأدوات والتعاون.56## نظرة سريعة78| الجانب | 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 |1718## LangGraph: بانّي الرسوم البيانية1920يُنمذج LangGraph سير عمل agent كـ **directed cyclic graphs**. تُعرّف العقد (functions التي تؤدي العمل) والحواف (الانتقالات بينها، اختياريا مشروطة). تتدفق الحالة عبر الرسم البياني وتستمر عبر checkpointing.2122هذا هو الإطار الأكثر صراحة وقابلية للتحكم - أنت تربط كل خطوة بنفسك.2324```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```3334### المفاهيم الأساسية3536- **StateGraph**: تعريف الرسم البياني مع typed state37- **Nodes**: Python functions التي تحول الحالة38- **Edges**: الاتصالات بين العقد، يمكن أن تكون مشروطة39- **Checkpointing**: persistence مدمج لسير العمل طويل التشغيل4041### Code Example4243```python44from langgraph.graph import StateGraph, MessagesState, START, END45from langchain_openai import ChatOpenAI4647llm = ChatOpenAI(model="gpt-4o")4849def call_agent(state: MessagesState):50 response = llm.invoke(state["messages"])51 return {"messages": [response]}5253def should_continue(state: MessagesState):54 last = state["messages"][-1]55 if last.tool_calls:56 return "tools"57 return END5859def 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}6667graph = 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")7374app = graph.compile()75result = app.invoke({"messages": [{"role": "user", "content": "What's the weather?"}]})76```7778### نقاط القوة7980- تحكم دقيق في كل خطوة وانتقال81- Checkpointing و human-in-the-loop مدمجان82- تكافؤ كامل مع TypeScript83- يعمل مع أي LLM provider84- الأفضل لسير العمل المعقد مع التفرع المشروط والحلقات8586### نقاط الضعف8788- منحنى تعلم حاد - تحتاج لفهم مفاهيم graph theory89- مطول لحالات الاستخدام البسيطة - agent أساسي يتطلب boilerplate أكثر من الأطر الأخرى90- تصحيح أخطاء تدفقات الرسم البياني قد يكون صعبا بدون LangSmith9192### التسعير9394Open-source (MIT). LangSmith (منصة observability مُدارة) لها مستويات مدفوعة لمراقبة الإنتاج.9596## CrewAI: مُجمّع الفريق9798يستخدم CrewAI استعارة بشرية: تجمع **طاقما** من agents المتخصصين، لكل منهم **role** و **goal** و **backstory**. تتعاون agents على **tasks** باستخدام **tools**، منسقة بواسطة **process** (sequential أو hierarchical أو consensual).99100فكر في الأمر كتوظيف فريق حيث لكل عضو مسمى وظيفي وتخصص محدد.101102```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```112113### المفاهيم الأساسية114115- **Agent**: شخصية بـ role و goal و backstory و tools116- **Task**: مهمة بـ description و expected output و agent معيّن117- **Crew**: مجموعة من agents تعمل معا118- **Process**: استراتيجية التنفيذ (sequential، hierarchical، consensual)119- **Flow**: طبقة orchestration مدفوعة بالأحداث لربط عدة crews120121### Code Example122123```python124from crewai import Agent, Task, Crew, Process125126researcher = 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)134135writer = 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)143144research_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)150151writing_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)158159crew = Crew(160 agents=[researcher, writer],161 tasks=[research_task, writing_task],162 process=Process.sequential,163 verbose=True,164)165166result = crew.kickoff()167print(result.raw)168```169170### نقاط القوة171172- Role-based abstraction بديهي - سهل الفهم173- أكثر من 100 tool integration مدمج174- ذاكرة مشتركة بين agents (قصيرة المدى، طويلة المدى، كيانات)175- أكبر مجتمع (~40k GitHub stars)176- عملية هرمية مع agent "مدير" يفوّض ويتحقق177178### نقاط الضعف179180- تحكم أقل دقة من LangGraph - تُعرّف الأدوار لا مسارات التنفيذ الدقيقة181- العملية الهرمية قد تكون غير متوقعة عندما تختلف agents182- تصحيح أخطاء محادثات agents المتعددة أصعب من التدفقات أحادية agent183184### التسعير185186Open-source core (مجاني). CrewAI Platform: $99/شهر (Teams) إلى $120k/سنة (Enterprise). التسعير مبني على crews النشطة والتنفيذات الشهرية.187188## OpenAI Agents SDK: الموجّه189190يركز OpenAI Agents SDK (الخلف الروحي لـ Swarm) على **handoffs** - agents تنقل المحادثات إلى agents متخصصة أخرى. إنه الإطار الأكثر بساطة: agents و tools و handoffs و guardrails. هذا كل شيء.191192```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```202203### المفاهيم الأساسية204205- **Agent**: model + instructions + tools + handoffs206- **Handoff**: نقل إلى agent آخر (مُنمذج كأداة يمكن لـ LLM استدعاؤها)207- **Guardrail**: التحقق من المدخلات/المخرجات يعمل بالتوازي مع agent208- **Runner**: ينفذ حلقة agent209- **Tracing**: observability مدمج لجميع استدعاءات LLM واستدعاءات الأدوات والتسليمات210211### Code Example212213```python214from agents import Agent, Runner, handoff, InputGuardrail, GuardrailFunctionOutput215from pydantic import BaseModel216217class SafetyCheck(BaseModel):218 is_safe: bool219 reason: str220221async 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 )231232billing_agent = Agent(233 name="Billing Agent",234 instructions="You handle billing inquiries. Be precise with numbers.",235 tools=[lookup_invoice, process_payment],236)237238refund_agent = Agent(239 name="Refund Agent",240 instructions="You process refund requests. Always verify the order first.",241 tools=[lookup_order, issue_refund],242)243244triage_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)251252result = 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```256257### نقاط القوة258259- نمط handoff نظيف - طبيعي لسير عمل routing/triage260- Guardrails تعمل بالتوازي مع التنفيذ (fail-fast، غير مُعطّلة)261- لوحة tracing مدمجة لتصحيح الأخطاء262- رغم الاسم، يدعم models غير OpenAI263- Abstraction أدنى - سهل الفهم والتوسيع264265### نقاط الضعف266267- إدارة حالة أقل نضجا من LangGraph268- لا persistence أو checkpointing مدمج269- نظام أدوات الطرف الثالث أصغر270- التصميم المرتكز على handoff قد لا يناسب كل architecture271272### التسعير273274Open-source (MIT). تدفع per-token لأي model تستخدمه.275276## Claude Agent SDK: المطوّر277278يتبع Claude Agent SDK نهجا مختلفا: بدلا من تعريف سير العمل أو الأدوار، تعطي agent **مجموعة من الأدوات وتتركه يكتشف كيف ينجز المهمة**. يستخدم نفس الحلقة المستقلة التي تشغل Claude Code - اقرأ، نفّذ، تحقق، كرر.279280```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```289290### المفاهيم الأساسية291292- **query()**: نقطة الدخول الرئيسية التي تبدأ حلقة agent293- **Built-in tools**: Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch294- **أدوات مخصصة عبر MCP**: عرّف الأدوات كـ in-process MCP servers295- **Sub-agents**: agents متخصصة يمكن للأب تفويضها296- **Sessions**: الحفاظ على السياق عبر تفاعلات متعددة297298### Code Example299300```typescript301import { tool, createSdkMcpServer, query } from "@anthropic-ai/claude-agent-sdk";302import { z } from "zod";303304const 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);315316const docsServer = createSdkMcpServer({317 name: "docs",318 version: "1.0.0",319 tools: [searchDocs],320});321322for 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```334335### نقاط القوة336337- تكامل MCP من الدرجة الأولى - اتصل بأي نظام MCP server338- أدوات مدمجة لعمليات الملفات والطرفية والوصول للويب339- ضغط سياق تلقائي لقواعد الكود الكبيرة340- توازي sub-agent للمهام المعقدة341- نفس محرك Claude Code - مُختبر في سير عمل التطوير الحقيقي342343### نقاط الضعف344345- Claude models فقط - لا دعم لمزودين متعددين346- إطار أحدث بمجتمع أصغر347- يتطلب Node.js runtime حتى لـ Python SDK348- تحكم أقل صراحة في سير العمل مقارنة بـ LangGraph349350### التسعير351352Open-source. أسعار Claude API token القياسية. Managed Agents (النسخة المُستضافة): $0.08 لكل session-hour بالإضافة إلى تكاليف tokens.353354## متى تختار أيا منها355356```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]363364 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```369370### اختر LangGraph إذا:371- كنت بحاجة لتحكم دقيق في كل خطوة من سير العمل372- حالة استخدامك تتضمن منطقا شرطيا معقدا وحلقات373- كنت بحاجة لـ persistence مدمج ونقاط تفتيش human-in-the-loop374- كنت بحاجة لاستخدام مزودي LLM متعددين في نفس سير العمل375376### اختر CrewAI إذا:377- كنت تريد abstraction بديهيا قائما على الأدوار378- مهمتك تتضمن agents متعددين بتخصصات مميزة379- كنت بحاجة لتعاون agents وتمرير السياق بينهم380- كنت تقدر أكبر مجتمع وأكثر integrations مدمجة381382### اختر OpenAI Agents SDK إذا:383- نمطك الأساسي هو توجيه المحادثات إلى المتخصصين384- كنت بحاجة لـ guardrails تتحقق من المدخلات/المخرجات بالتوازي385- كنت تريد أبسط abstraction ممكن بأقل boilerplate386- كان tracing و observability المدمجان مهمين387388### اختر Claude Agent SDK إذا:389- كانت agents تحتاج لقراءة وكتابة وتنفيذ الكود390- كنت تريد تكامل MCP server من الدرجة الأولى391- كنت بحاجة لـ agents مستقلة تتكرر وتصحح نفسها392- كنت تستخدم Claude بالفعل وتريد أعمق تكامل393394## هل يمكنك الجمع بين الأطر؟395396نعم. نمط شائع هو استخدام إطار واحد للتنسيق وآخر للـ agents الفردية:397398- **LangGraph** لرسم سير العمل الشامل399- **CrewAI** لعقدة محددة تتطلب تعاون agents متعددة400- **Claude Agent SDK** للمهام الفرعية المتعلقة بالكود عبر MCP401- **OpenAI Agents SDK** للتوجيه والفرز الموجه للعملاء402403الأطر ليست متنافية. استخدم ما يناسب كل جزء من نظامك.404405## الخلاصة406407كل إطار يراهن رهانا واضحا:408409- **LangGraph** يُحسّن للتحكم - أنت تقرر كل انتقال410- **CrewAI** يُحسّن للتعاون - agents تعمل كفريق411- **OpenAI Agents SDK** يُحسّن للبساطة - أقل abstraction، handoffs نظيفة412- **Claude Agent SDK** يُحسّن للاستقلالية - أعطه الأدوات ودعه يعمل413414الاختيار الصحيح يعتمد على سير عملك وفريقك ومكدسك الحالي. اختر الذي يتوافق مع حالة استخدامك الأساسية، تعلمه جيدا، واستعن بالآخرين عندما تصل لنقطة قوتهم.415
:مقارنة أطر Agentic AI: LangGraph مقابل CrewAI مقابل OpenAI Agents SDK مقابل Claude Agent SDKlines 1-415 (END) — press q to close