spinny:~/writing $ vim agentic-ai-frameworks-comparison.md
1~2AI agent telah berpindah dari demo penelitian ke sistem production. Lebih dari 60% aplikasi AI enterprise diperkirakan akan mencakup komponen agentic pada tahun 2026. Namun membangun agent dari awal - mengelola tool loops, state, memory, error handling, dan koordinasi multi-agent - itu kompleks. Di sinilah framework berperan.3~4Empat framework mendominasi di 2026: **LangGraph**, **CrewAI**, **OpenAI Agents SDK**, dan **Claude Agent SDK**. Masing-masing mengambil pendekatan yang berbeda secara fundamental terhadap masalah yang sama: memberikan LLM kemampuan untuk bernalar, merencanakan, menggunakan tool, dan berkolaborasi.5~6## Sekilas7~8| Aspek | LangGraph | CrewAI | OpenAI Agents SDK | Claude Agent SDK |9|--------|-----------|--------|-------------------|-----------------|10| **Oleh** | LangChain | CrewAI Inc. | OpenAI | Anthropic |11| **Arsitektur** | Berbasis graph | Berbasis role | Berbasis handoff | Autonomous loop |12| **Filosofi** | Kontrol maksimum | Kolaborasi tim | Abstraksi minimal | Beri agent sebuah komputer |13| **Bahasa** | Python, TypeScript | Python | Python | Python, TypeScript |14| **Dukungan model** | Apa saja (OpenAI, Claude, lokal) | Apa saja | Apa saja (meski namanya) | Hanya Claude |15| **GitHub stars** | ~29k | ~40k | ~21k | ~6k |16| **Terbaik untuk** | Workflow stateful kompleks | Spesialisasi multi-agent | Routing dan triage | Coding dan tugas berat file |17~18## LangGraph: Pembangun Graph19~20LangGraph memodelkan agent workflow sebagai **directed cyclic graph**. Anda mendefinisikan nodes (fungsi yang melakukan pekerjaan) dan edges (transisi di antara mereka, opsional kondisional). State mengalir melalui graph dan bertahan melalui checkpointing.21~22Ini adalah framework yang paling eksplisit dan terkontrol - Anda mengatur setiap langkah sendiri.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### Konsep Inti35~36- **StateGraph**: definisi graph dengan state bertipe37- **Nodes**: fungsi Python yang mengubah state38- **Edges**: koneksi antar node, bisa bersyarat39- **Checkpointing**: persistence bawaan untuk workflow yang berjalan lama40~41### Contoh Kode42~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### Kekuatan79~80- Kontrol halus atas setiap langkah dan transisi81- Checkpointing bawaan dan human-in-the-loop82- Paritas TypeScript penuh83- Bekerja dengan penyedia LLM apa pun84- Terbaik untuk workflow kompleks dengan conditional branching dan loops85~86### Kelemahan87~88- Kurva pembelajaran curam - Anda perlu memahami konsep teori graph89- Bertele-tele untuk use case sederhana - agent dasar memerlukan lebih banyak boilerplate daripada framework lain90- Men-debug graph flow bisa menantang tanpa LangSmith91~92### Harga93~94Open-source (MIT). LangSmith (platform observability terkelola) memiliki tier berbayar untuk production monitoring.95~96## CrewAI: Perakit Tim97~98CrewAI mengambil metafora manusia: Anda merakit **crew** dari agent khusus, masing-masing dengan **role**, **goal**, dan **backstory**. Agent berkolaborasi pada **task** menggunakan **tool**, dikoordinasikan oleh **process** (sequential, hierarchical, atau consensual).99~100Anggap saja seperti merekrut tim di mana setiap anggota memiliki jabatan dan keahlian spesifik.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### Konsep Inti114~115- **Agent**: persona dengan role, goal, backstory, dan tool116- **Task**: penugasan dengan deskripsi, output yang diharapkan, dan agent yang ditugaskan117- **Crew**: sekelompok agent yang bekerja bersama118- **Process**: strategi eksekusi (sequential, hierarchical, consensual)119- **Flow**: lapisan orkestrasi berbasis event untuk menghubungkan beberapa crew120~121### Contoh Kode122~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### Kekuatan171~172- Abstraksi berbasis role yang intuitif - mudah dipikirkan173- 100+ integrasi tool bawaan174- Memory bersama antar agent (short-term, long-term, entity)175- Komunitas terbesar (~40k GitHub stars)176- Hierarchical process dengan agent "manager" yang mendelegasikan dan memvalidasi177~178### Kelemahan179~180- Kurang kontrol halus dibanding LangGraph - Anda mendefinisikan role, bukan jalur eksekusi yang tepat181- Hierarchical process bisa tidak dapat diprediksi ketika agent tidak setuju182- Men-debug percakapan multi-agent lebih sulit daripada single-agent flow183~184### Harga185~186Core open-source (gratis). CrewAI Platform: $99/bulan (Teams) hingga $120k/tahun (Enterprise). Harga berdasarkan live crew dan eksekusi bulanan.187~188## OpenAI Agents SDK: Sang Router189~190OpenAI Agents SDK (penerus spiritual Swarm) berfokus pada **handoff** - agent yang mentransfer percakapan ke agent khusus lainnya. Ini adalah framework paling minimal: agent, tool, handoff, dan guardrail. Hanya itu.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### Konsep Inti204~205- **Agent**: model + instruksi + tool + handoff206- **Handoff**: transfer ke agent lain (dimodelkan sebagai tool yang bisa dipanggil LLM)207- **Guardrail**: validasi input/output yang berjalan paralel dengan agent208- **Runner**: menjalankan agent loop209- **Tracing**: observability bawaan untuk semua panggilan LLM, pemanggilan tool, dan handoff210~211### Contoh Kode212~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### Kekuatan258~259- Pola handoff yang bersih - alami untuk workflow routing/triage260- Guardrail berjalan paralel dengan eksekusi (fail-fast, tidak memblokir)261- Dashboard tracing bawaan untuk debugging262- Meskipun namanya, mendukung model non-OpenAI263- Abstraksi minimal - mudah dipahami dan diperluas264~265### Kelemahan266~267- Manajemen state kurang matang dibanding LangGraph268- Tidak ada persistence atau checkpointing bawaan269- Ekosistem tool pihak ketiga lebih kecil270- Desain yang berpusat pada handoff mungkin tidak cocok untuk setiap arsitektur271~272### Harga273~274Open-source (MIT). Anda membayar per-token untuk model apa pun yang Anda gunakan.275~276## Claude Agent SDK: Sang Developer277~278Claude Agent SDK mengambil pendekatan yang berbeda: alih-alih mendefinisikan workflow atau role, Anda memberi agent **sekumpulan tool dan membiarkannya mencari cara untuk menyelesaikan tugas**. Ini menggunakan autonomous loop yang sama yang menggerakkan Claude Code - baca, bertindak, verifikasi, iterasi.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### Konsep Inti291~292- **query()**: entry point utama yang memulai agent loop293- **Built-in tools**: Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch294- **Custom tools via MCP**: mendefinisikan tool sebagai in-process MCP server295- **Sub-agents**: agent khusus yang bisa didelegasikan oleh parent296- **Sessions**: mempertahankan konteks di beberapa interaksi297~298### Contoh Kode299~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### Kekuatan336~337- Integrasi MCP kelas satu - terhubung ke ekosistem MCP server apa pun338- Tool bawaan untuk operasi file, terminal, dan akses web339- Pemadatan konteks otomatis untuk codebase besar340- Paralelisme sub-agent untuk tugas kompleks341- Engine yang sama dengan Claude Code - teruji di workflow development nyata342~343### Kelemahan344~345- Hanya model Claude - tidak ada dukungan multi-provider346- Framework lebih baru dengan komunitas lebih kecil347- Memerlukan runtime Node.js bahkan untuk Python SDK348- Kurang kontrol workflow eksplisit dibanding LangGraph349~350### Harga351~352Open-source. Tarif token Claude API standar. Managed Agents (versi hosted): $0.08 per session-hour sebagai tambahan biaya token.353~354## Kapan Memilih yang Mana355~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### Pilih LangGraph jika:371- Anda membutuhkan kontrol presisi atas setiap langkah workflow372- Use case Anda melibatkan logika kondisional kompleks dan loop373- Anda ingin persistence bawaan dan checkpoint human-in-the-loop374- Anda perlu menggunakan beberapa penyedia LLM dalam workflow yang sama375~376### Pilih CrewAI jika:377- Anda ingin abstraksi berbasis role yang intuitif378- Tugas Anda melibatkan beberapa agent dengan spesialisasi berbeda379- Anda membutuhkan agent untuk berkolaborasi dan meneruskan konteks satu sama lain380- Anda menghargai komunitas terbesar dan integrasi bawaan terbanyak381~382### Pilih OpenAI Agents SDK jika:383- Pola utama Anda adalah merutekan percakapan ke spesialis384- Anda butuh guardrail yang memvalidasi input/output secara paralel385- Anda ingin abstraksi sesederhana mungkin dengan boilerplate minimal386- Tracing dan observability bawaan penting387~388### Pilih Claude Agent SDK jika:389- Agent Anda perlu membaca, menulis, dan mengeksekusi kode390- Anda ingin integrasi MCP server kelas satu391- Anda membutuhkan agent autonomous yang beriterasi dan mengoreksi diri392- Anda sudah menggunakan Claude dan ingin integrasi terdalam393~394## Bisakah Anda Menggabungkan Framework?395~396Ya. Pola umum adalah menggunakan satu framework untuk orkestrasi dan lainnya untuk agent individual:397~398- **LangGraph** untuk graph workflow keseluruhan399- **CrewAI** untuk node spesifik yang membutuhkan kolaborasi multi-agent400- **Claude Agent SDK** untuk sub-tugas terkait coding via MCP401- **OpenAI Agents SDK** untuk triage dan routing yang menghadap pelanggan402~403Framework tidak saling eksklusif. Gunakan apa yang sesuai untuk setiap bagian sistem Anda.404~405## Kesimpulan406~407Setiap framework membuat taruhan yang jelas:408~409- **LangGraph** dioptimalkan untuk kontrol - Anda yang memutuskan setiap transisi410- **CrewAI** dioptimalkan untuk kolaborasi - agent bekerja sebagai tim411- **OpenAI Agents SDK** dioptimalkan untuk kesederhanaan - abstraksi minimal, handoff yang bersih412- **Claude Agent SDK** dioptimalkan untuk otonomi - beri tool dan biarkan bekerja413~414Pilihan yang tepat tergantung pada workflow, tim, dan stack Anda yang ada. Pilih yang cocok dengan use case utama Anda, pelajari dengan baik, dan tarik yang lain saat Anda mencapai sweet spot mereka.415~
NORMAL · agentic-ai-frameworks-comparison.md [readonly]415 lines · :q to close