spinny:~/writing $ less agentic-ai-frameworks-comparison.md
12AI-agenter er gaaet fra forskningsdemoer til produktionssystemer. Over 60% af enterprise AI-applikationer forventes at indeholde agentiske komponenter inden 2026. Men at bygge agenter fra bunden - haandtere tool-loops, state, hukommelse, fejlhaandtering og multi-agent-koordinering - er komplekst. Det er her frameworks kommer ind i billedet.34Fire frameworks dominerer i 2026: **LangGraph**, **CrewAI**, **OpenAI Agents SDK** og **Claude Agent SDK**. Hver taeger en fundamentalt anderledes tilgang til det samme problem: at give LLM'er evnen til at raesonnere, planlaegge, bruge vaerktojer og samarbejde.56## Overblik78| Aspekt | LangGraph | CrewAI | OpenAI Agents SDK | Claude Agent SDK |9|--------|-----------|--------|-------------------|-----------------|10| **Af** | LangChain | CrewAI Inc. | OpenAI | Anthropic |11| **Arkitektur** | Grafbaseret | Rollebaseret | Handoff-baseret | Autonom loop |12| **Filosofi** | Maksimal kontrol | Teamsamarbejde | Minimal abstraktion | Giv agenten en computer |13| **Sprog** | Python, TypeScript | Python | Python | Python, TypeScript |14| **Modelsupport** | Alle (OpenAI, Claude, lokale) | Alle | Alle (trods navnet) | Kun Claude |15| **GitHub stars** | ~29k | ~40k | ~21k | ~6k |16| **Bedst til** | Komplekse stateful workflows | Multi-agent-specialisering | Routing og triage | Coding og filintensive opgaver |1718## LangGraph: Grafbyggeren1920LangGraph modellerer agent-workflows som **rettede cykliske grafer**. Du definerer noder (funktioner der udfoerer arbejde) og kanter (overgange mellem dem, eventuelt betingede). State flyder gennem grafen og persisteres via checkpointing.2122Dette er det mest eksplicitte og kontrollerbare framework - du kobler hvert trin selv.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### Kernekoncepter3536- **StateGraph**: grafdefinitionen med typet state37- **Nodes**: Python-funktioner der transformerer state38- **Edges**: forbindelser mellem noder, kan vaere betingede39- **Checkpointing**: indbygget persistens for langvarige workflows4041### Kodeeksempel4243```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### Styrker7980- Detaljeret kontrol over hvert trin og overgang81- Indbygget checkpointing og human-in-the-loop82- Fuld TypeScript-paritet83- Fungerer med enhver LLM-udbyder84- Bedst til komplekse workflows med betinget forgrening og loops8586### Svagheder8788- Stejl laeringskurve - du skal forstaa grafteorikoncepter89- Omstaendeligt for simple use cases - en simpel agent kraever mere boilerplate end andre frameworks90- Debugging af grafflows kan vaere udfordrende uden LangSmith9192### Priser9394Open-source (MIT). LangSmith (administreret observability-platform) har betalte niveauer for produktionsovervagning.9596## CrewAI: Teamsamleren9798CrewAI bruger en menneskelig metafor: du sammensaetter et **crew** af specialiserede agenter, hver med en **rolle**, et **maal** og en **baggrundshistorie**. Agenter samarbejder om **opgaver** ved hjaelp af **vaerktojer**, koordineret af en **proces** (sekventiel, hierarkisk eller konsensusbaseret).99100Taenk paa det som at ansaette et team hvor hvert medlem har en specifik jobtitel og specialitet.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### Kernekoncepter114115- **Agent**: en persona med rolle, maal, baggrundshistorie og vaerktojer116- **Task**: en opgave med beskrivelse, forventet output og tildelt agent117- **Crew**: en gruppe agenter der arbejder sammen118- **Process**: eksekveringsstrategi (sekventiel, hierarkisk, konsensusbaseret)119- **Flow**: haendelsesdrevet orkestreringslaag til at forbinde flere crews120121### Kodeeksempel122123```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### Styrker171172- Intuitiv rollebaseret abstraktion - let at forstaa173- Over 100 indbyggede tool-integrationer174- Delt hukommelse paa tvaers af agenter (korttids-, langtids-, entity-hukommelse)175- Stoerste community (~40k GitHub stars)176- Hierarkisk proces med en "manager"-agent der delegerer og validerer177178### Svagheder179180- Mindre detaljeret kontrol end LangGraph - du definerer roller, ikke eksakte eksekveringsstier181- Hierarkisk proces kan vaere uforudsigelig naar agenter er uenige182- Debugging af multi-agent-samtaler er svaerere end single-agent-flows183184### Priser185186Open-source-kerne (gratis). CrewAI Platform: $99/maaned (Teams) til $120k/aar (Enterprise). Priser baseret paa aktive crews og maanedlige eksekveringer.187188## OpenAI Agents SDK: Routeren189190OpenAI Agents SDK (aandelig efterfoelger til Swarm) fokuserer paa **handoffs** - agenter der overdrager samtaler til andre specialiserede agenter. Det er det mest minimale framework: agenter, vaerktojer, handoffs og guardrails. Det er det hele.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### Kernekoncepter204205- **Agent**: model + instruktioner + vaerktojer + handoffs206- **Handoff**: en overdragelse til en anden agent (modelleret som et vaerktoej som LLM'en kan kalde)207- **Guardrail**: input-/outputvalidering der koerer parallelt med agenten208- **Runner**: eksekverer agent-loopen209- **Tracing**: indbygget observability for alle LLM-kald, vaerktoejesekekveringer og handoffs210211### Kodeeksempel212213```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### Styrker258259- Rent handoff-moenster - naturligt for routing-/triage-workflows260- Guardrails koerer parallelt med eksekvering (fail-fast, ikke blokerende)261- Indbygget tracing-dashboard til debugging262- Trods navnet understoettes ogsaa ikke-OpenAI-modeller263- Minimal abstraktion - let at forstaa og udvide264265### Svagheder266267- Mindre modent state management end LangGraph268- Ingen indbygget persistens eller checkpointing269- Oekosystemet af tredjepartsvaerktojer er mindre270- Handoff-centreret design passer maaske ikke til enhver arkitektur271272### Priser273274Open-source (MIT). Du betaler per token for den model du bruger.275276## Claude Agent SDK: Udvikleren277278Claude Agent SDK taeger en anderledes tilgang: i stedet for at definere workflows eller roller giver du agenten et **saet vaerktojer og lader den finde ud af hvordan opgaven skal loeses**. Den bruger den samme autonome loop der driver Claude Code - laese, handle, verificere, iterere.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### Kernekoncepter291292- **query()**: hovedindgangspunktet der starter agent-loopen293- **Indbyggede vaerktojer**: Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch294- **Brugerdefinerede vaerktojer via MCP**: definer vaerktojer som in-process MCP-servere295- **Sub-agenter**: specialiserede agenter som den overordnede agent kan delegere til296- **Sessions**: bevar kontekst paa tvaers af flere interaktioner297298### Kodeeksempel299300```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### Styrker336337- Foersteklasses MCP-integration - forbind til hele MCP-server-oekosystemet338- Indbyggede vaerktojer til filoperationer, terminal og webadgang339- Automatisk kontekstkomprimering for store kodebaser340- Sub-agent-parallelisme til komplekse opgaver341- Samme motor som Claude Code - kamptestet i rigtige udviklingsworkflows342343### Svagheder344345- Kun Claude-modeller - ingen multi-provider-understoettelse346- Nyere framework med et mindre community347- Kraever Node.js-runtime ogsaa for Python SDK348- Mindre eksplicit workflowkontrol sammenlignet med LangGraph349350### Priser351352Open-source. Standard Claude API-tokenpriser. Managed Agents (hostet version): $0,08 per sessionstime ud over tokenomkostninger.353354## Hvornaar skal du vaelge hvilket355356```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### Vaelg LangGraph hvis:371- Du har brug for praecis kontrol over hvert trin i workflowen372- Dit use case indebaerer kompleks betinget logik og loops373- Du vil have indbygget persistens og human-in-the-loop-checkpoints374- Du skal bruge flere LLM-udbydere i den samme workflow375376### Vaelg CrewAI hvis:377- Du vil have en intuitiv, rollebaseret abstraktion378- Din opgave indebaerer flere agenter med forskellige specialiseringer379- Du har brug for agenter der samarbejder og sender kontekst videre til hinanden380- Det stoerste community og flest indbyggede integrationer er vigtigt for dig381382### Vaelg OpenAI Agents SDK hvis:383- Dit primaere moenster er at route samtaler til specialister384- Du har brug for guardrails der validerer input/output parallelt385- Du vil have den enklest mulige abstraktion med minimal boilerplate386- Indbygget tracing og observability er vigtigt387388### Vaelg Claude Agent SDK hvis:389- Dine agenter skal laese, skrive og eksekvere kode390- Du vil have foersteklasses MCP-server-integration391- Du har brug for autonome agenter der itererer og selvkorrigerer392- Du allerede bruger Claude og vil have den dybeste integration393394## Kan man kombinere frameworks?395396Ja. Et almindeligt moenster er at bruge et framework til orkestrering og et andet til individuelle agenter:397398- **LangGraph** til den overordnede workflow-graf399- **CrewAI** til en specifik node der kraever multi-agent-samarbejde400- **Claude Agent SDK** til koderelaterede delopgaver via MCP401- **OpenAI Agents SDK** til kundevendt triage og routing402403Frameworks udelukker ikke hinanden. Brug det der passer til hver del af dit system.404405## Konklusion406407Hvert framework satser paa en klar retning:408409- **LangGraph** optimerer for kontrol - du bestemmer hver overgang410- **CrewAI** optimerer for samarbejde - agenter arbejder som et team411- **OpenAI Agents SDK** optimerer for enkelhed - minimal abstraktion, rene handoffs412- **Claude Agent SDK** optimerer for autonomi - giv det vaerktojer og lad det arbejde413414Det rigtige valg afhaenger af din workflow, dit team og din eksisterende stack. Vaelg det der matcher dit primaere use case, laer det godt at kende og traek andre ind naar du rammer deres styrker.415
:Agentic AI Frameworks Sammenlignet: LangGraph vs CrewAI vs OpenAI Agents SDK vs Claude Agent SDKlines 1-415 (END) — press q to close