انتقلت AI agents من العروض البحثية إلى أنظمة الإنتاج. من المتوقع أن تتضمن أكثر من 60% من تطبيقات AI المؤسسية مكونات agentic بحلول 2026. لكن بناء agents من الصفر - إدارة tool loops و state و memory و error handling والتنسيق متعدد agents - أمر معقد. هنا تأتي الأطر.
أربعة أطر تهيمن في 2026: LangGraph و CrewAI و OpenAI Agents SDK و Claude Agent SDK. كل منها يتبع نهجا مختلفا جذريا لنفس المشكلة: منح LLMs القدرة على التفكير والتخطيط واستخدام الأدوات والتعاون.
نظرة سريعة
| الجانب | LangGraph | CrewAI | OpenAI Agents SDK | Claude Agent SDK |
|---|---|---|---|---|
| الشركة | LangChain | CrewAI Inc. | OpenAI | Anthropic |
| Architecture | Graph-based | Role-based | Handoff-based | Autonomous loop |
| الفلسفة | أقصى تحكم | Team collaboration | أقل abstraction | أعط agent الكمبيوتر |
| اللغات | Python, TypeScript | Python | Python | Python, TypeScript |
| Model support | أي (OpenAI, Claude, local) | أي | أي (رغم الاسم) | Claude فقط |
| GitHub stars | ~29k | ~40k | ~21k | ~6k |
| الأفضل لـ | Complex stateful workflows | Multi-agent specialization | Routing و triage | Coding و file-heavy tasks |
LangGraph: بانّي الرسوم البيانية
يُنمذج LangGraph سير عمل agent كـ directed cyclic graphs. تُعرّف العقد (functions التي تؤدي العمل) والحواف (الانتقالات بينها، اختياريا مشروطة). تتدفق الحالة عبر الرسم البياني وتستمر عبر checkpointing.
هذا هو الإطار الأكثر صراحة وقابلية للتحكم - أنت تربط كل خطوة بنفسك.
المفاهيم الأساسية
- StateGraph: تعريف الرسم البياني مع typed state
- Nodes: Python functions التي تحول الحالة
- Edges: الاتصالات بين العقد، يمكن أن تكون مشروطة
- Checkpointing: persistence مدمج لسير العمل طويل التشغيل
Code Example
from langgraph.graph import StateGraph, MessagesState, START, END from langchain_openai import ChatOpenAI llm = ChatOpenAI(model="gpt-4o") def call_agent(state: MessagesState): response = llm.invoke(state["messages"]) return {"messages": [response]} def should_continue(state: MessagesState): last = state["messages"][-1] if last.tool_calls: return "tools" return END def call_tools(state: MessagesState): # Execute tool calls and return results results = [] for tool_call in state["messages"][-1].tool_calls: result = execute_tool(tool_call) results.append(result) return {"messages": results} graph = StateGraph(MessagesState) graph.add_node("agent", call_agent) graph.add_node("tools", call_tools) graph.add_edge(START, "agent") graph.add_conditional_edges("agent", should_continue, {"tools": "tools", END: END}) graph.add_edge("tools", "agent") app = graph.compile() result = app.invoke({"messages": [{"role": "user", "content": "What's the weather?"}]})
نقاط القوة
- تحكم دقيق في كل خطوة وانتقال
- Checkpointing و human-in-the-loop مدمجان
- تكافؤ كامل مع TypeScript
- يعمل مع أي LLM provider
- الأفضل لسير العمل المعقد مع التفرع المشروط والحلقات
نقاط الضعف
- منحنى تعلم حاد - تحتاج لفهم مفاهيم graph theory
- مطول لحالات الاستخدام البسيطة - agent أساسي يتطلب boilerplate أكثر من الأطر الأخرى
- تصحيح أخطاء تدفقات الرسم البياني قد يكون صعبا بدون LangSmith
التسعير
Open-source (MIT). LangSmith (منصة observability مُدارة) لها مستويات مدفوعة لمراقبة الإنتاج.
CrewAI: مُجمّع الفريق
يستخدم CrewAI استعارة بشرية: تجمع طاقما من agents المتخصصين، لكل منهم role و goal و backstory. تتعاون agents على tasks باستخدام tools، منسقة بواسطة process (sequential أو hierarchical أو consensual).
فكر في الأمر كتوظيف فريق حيث لكل عضو مسمى وظيفي وتخصص محدد.
المفاهيم الأساسية
- Agent: شخصية بـ role و goal و backstory و tools
- Task: مهمة بـ description و expected output و agent معيّن
- Crew: مجموعة من agents تعمل معا
- Process: استراتيجية التنفيذ (sequential، hierarchical، consensual)
- Flow: طبقة orchestration مدفوعة بالأحداث لربط عدة crews
Code Example
from crewai import Agent, Task, Crew, Process researcher = Agent( role="Senior Research Analyst", goal="Find comprehensive data about the given topic", backstory="You have 10 years of experience in technology research. " "You are thorough and always verify facts from multiple sources.", tools=[web_search_tool], verbose=True, ) writer = Agent( role="Technical Writer", goal="Create clear, engaging technical content", backstory="You write for a developer audience. " "Your articles are practical and include code examples.", tools=[file_tool], verbose=True, ) research_task = Task( description="Research the latest developments in WebAssembly in 2026. " "Focus on WASI, Component Model, and production use cases.", expected_output="A structured research document with key findings and sources.", agent=researcher, ) writing_task = Task( description="Write a blog post based on the research. " "Include code examples and Mermaid diagrams.", expected_output="A complete blog post in Markdown format.", agent=writer, context=[research_task], # Writer receives researcher's output ) crew = Crew( agents=[researcher, writer], tasks=[research_task, writing_task], process=Process.sequential, verbose=True, ) result = crew.kickoff() print(result.raw)
نقاط القوة
- Role-based abstraction بديهي - سهل الفهم
- أكثر من 100 tool integration مدمج
- ذاكرة مشتركة بين agents (قصيرة المدى، طويلة المدى، كيانات)
- أكبر مجتمع (~40k GitHub stars)
- عملية هرمية مع agent "مدير" يفوّض ويتحقق
نقاط الضعف
- تحكم أقل دقة من LangGraph - تُعرّف الأدوار لا مسارات التنفيذ الدقيقة
- العملية الهرمية قد تكون غير متوقعة عندما تختلف agents
- تصحيح أخطاء محادثات agents المتعددة أصعب من التدفقات أحادية agent
التسعير
Open-source core (مجاني). CrewAI Platform: $99/شهر (Teams) إلى $120k/سنة (Enterprise). التسعير مبني على crews النشطة والتنفيذات الشهرية.
OpenAI Agents SDK: الموجّه
يركز OpenAI Agents SDK (الخلف الروحي لـ Swarm) على handoffs - agents تنقل المحادثات إلى agents متخصصة أخرى. إنه الإطار الأكثر بساطة: agents و tools و handoffs و guardrails. هذا كل شيء.
المفاهيم الأساسية
- Agent: model + instructions + tools + handoffs
- Handoff: نقل إلى agent آخر (مُنمذج كأداة يمكن لـ LLM استدعاؤها)
- Guardrail: التحقق من المدخلات/المخرجات يعمل بالتوازي مع agent
- Runner: ينفذ حلقة agent
- Tracing: observability مدمج لجميع استدعاءات LLM واستدعاءات الأدوات والتسليمات
Code Example
from agents import Agent, Runner, handoff, InputGuardrail, GuardrailFunctionOutput from pydantic import BaseModel class SafetyCheck(BaseModel): is_safe: bool reason: str async def content_safety(ctx, agent, input_text): result = await Runner.run( Agent(name="Safety", instructions="Check if input is safe. No PII."), input_text, context=ctx, ) output = SafetyCheck.model_validate_json(result.final_output) return GuardrailFunctionOutput( output_info=output, tripwire_triggered=not output.is_safe ) billing_agent = Agent( name="Billing Agent", instructions="You handle billing inquiries. Be precise with numbers.", tools=[lookup_invoice, process_payment], ) refund_agent = Agent( name="Refund Agent", instructions="You process refund requests. Always verify the order first.", tools=[lookup_order, issue_refund], ) triage_agent = Agent( name="Triage Agent", instructions="Route the customer to the right specialist. " "Ask clarifying questions if needed.", handoffs=[billing_agent, refund_agent], input_guardrails=[InputGuardrail(guardrail_function=content_safety)], ) result = await Runner.run(triage_agent, "I need a refund for order #4521") print(result.final_output) # The triage agent routes to refund_agent, which processes the refund
نقاط القوة
- نمط handoff نظيف - طبيعي لسير عمل routing/triage
- Guardrails تعمل بالتوازي مع التنفيذ (fail-fast، غير مُعطّلة)
- لوحة tracing مدمجة لتصحيح الأخطاء
- رغم الاسم، يدعم models غير OpenAI
- Abstraction أدنى - سهل الفهم والتوسيع
نقاط الضعف
- إدارة حالة أقل نضجا من LangGraph
- لا persistence أو checkpointing مدمج
- نظام أدوات الطرف الثالث أصغر
- التصميم المرتكز على handoff قد لا يناسب كل architecture
التسعير
Open-source (MIT). تدفع per-token لأي model تستخدمه.
Claude Agent SDK: المطوّر
يتبع Claude Agent SDK نهجا مختلفا: بدلا من تعريف سير العمل أو الأدوار، تعطي agent مجموعة من الأدوات وتتركه يكتشف كيف ينجز المهمة. يستخدم نفس الحلقة المستقلة التي تشغل Claude Code - اقرأ، نفّذ، تحقق، كرر.
المفاهيم الأساسية
- query(): نقطة الدخول الرئيسية التي تبدأ حلقة agent
- Built-in tools: Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch
- أدوات مخصصة عبر MCP: عرّف الأدوات كـ in-process MCP servers
- Sub-agents: agents متخصصة يمكن للأب تفويضها
- Sessions: الحفاظ على السياق عبر تفاعلات متعددة
Code Example
import { tool, createSdkMcpServer, query } from "@anthropic-ai/claude-agent-sdk"; import { z } from "zod"; const searchDocs = tool( "search_docs", "Search the internal documentation for relevant information", { query: z.string().describe("Search query") }, async ({ query }) => { const results = await vectorStore.similaritySearch(query, 5); return { content: [{ type: "text", text: results.map(r => r.pageContent).join("\n\n") }], }; } ); const docsServer = createSdkMcpServer({ name: "docs", version: "1.0.0", tools: [searchDocs], }); for await (const message of query({ prompt: "Find how authentication works in our system and write a summary", options: { mcpServers: { docs: docsServer }, allowedTools: ["Read", "Glob", "Grep", "mcp__docs__search_docs"], }, })) { if (message.type === "result" && message.subtype === "success") { console.log(message.result); } }
نقاط القوة
- تكامل MCP من الدرجة الأولى - اتصل بأي نظام MCP server
- أدوات مدمجة لعمليات الملفات والطرفية والوصول للويب
- ضغط سياق تلقائي لقواعد الكود الكبيرة
- توازي sub-agent للمهام المعقدة
- نفس محرك Claude Code - مُختبر في سير عمل التطوير الحقيقي
نقاط الضعف
- Claude models فقط - لا دعم لمزودين متعددين
- إطار أحدث بمجتمع أصغر
- يتطلب Node.js runtime حتى لـ Python SDK
- تحكم أقل صراحة في سير العمل مقارنة بـ LangGraph
التسعير
Open-source. أسعار Claude API token القياسية. Managed Agents (النسخة المُستضافة): $0.08 لكل session-hour بالإضافة إلى تكاليف tokens.
متى تختار أيا منها
اختر LangGraph إذا:
- كنت بحاجة لتحكم دقيق في كل خطوة من سير العمل
- حالة استخدامك تتضمن منطقا شرطيا معقدا وحلقات
- كنت بحاجة لـ persistence مدمج ونقاط تفتيش human-in-the-loop
- كنت بحاجة لاستخدام مزودي LLM متعددين في نفس سير العمل
اختر CrewAI إذا:
- كنت تريد abstraction بديهيا قائما على الأدوار
- مهمتك تتضمن agents متعددين بتخصصات مميزة
- كنت بحاجة لتعاون agents وتمرير السياق بينهم
- كنت تقدر أكبر مجتمع وأكثر integrations مدمجة
اختر OpenAI Agents SDK إذا:
- نمطك الأساسي هو توجيه المحادثات إلى المتخصصين
- كنت بحاجة لـ guardrails تتحقق من المدخلات/المخرجات بالتوازي
- كنت تريد أبسط abstraction ممكن بأقل boilerplate
- كان tracing و observability المدمجان مهمين
اختر Claude Agent SDK إذا:
- كانت agents تحتاج لقراءة وكتابة وتنفيذ الكود
- كنت تريد تكامل MCP server من الدرجة الأولى
- كنت بحاجة لـ agents مستقلة تتكرر وتصحح نفسها
- كنت تستخدم Claude بالفعل وتريد أعمق تكامل
هل يمكنك الجمع بين الأطر؟
نعم. نمط شائع هو استخدام إطار واحد للتنسيق وآخر للـ agents الفردية:
- LangGraph لرسم سير العمل الشامل
- CrewAI لعقدة محددة تتطلب تعاون agents متعددة
- Claude Agent SDK للمهام الفرعية المتعلقة بالكود عبر MCP
- OpenAI Agents SDK للتوجيه والفرز الموجه للعملاء
الأطر ليست متنافية. استخدم ما يناسب كل جزء من نظامك.
الخلاصة
كل إطار يراهن رهانا واضحا:
- LangGraph يُحسّن للتحكم - أنت تقرر كل انتقال
- CrewAI يُحسّن للتعاون - agents تعمل كفريق
- OpenAI Agents SDK يُحسّن للبساطة - أقل abstraction، handoffs نظيفة
- Claude Agent SDK يُحسّن للاستقلالية - أعطه الأدوات ودعه يعمل
الاختيار الصحيح يعتمد على سير عملك وفريقك ومكدسك الحالي. اختر الذي يتوافق مع حالة استخدامك الأساسية، تعلمه جيدا، واستعن بالآخرين عندما تصل لنقطة قوتهم.