spinny:~/writing $ vim agentic-ai-frameworks-comparison.md
1~2AI 에이전트는 연구 데모에서 프로덕션 시스템으로 발전했습니다. 2026년까지 엔터프라이즈 AI 애플리케이션의 60% 이상이 에이전트 컴포넌트를 포함할 것으로 예상됩니다. 하지만 에이전트를 처음부터 구축하는 것 - 도구 루프, 상태, 메모리, 오류 처리, 멀티 에이전트 조율 관리 - 은 복잡합니다. 그래서 프레임워크가 필요합니다.3~42026년에 네 가지 프레임워크가 주도하고 있습니다: **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| **아키텍처** | 그래프 기반 | 역할 기반 | 핸드오프 기반 | 자율 루프 |12| **철학** | 최대한의 제어 | 팀 협업 | 최소한의 추상화 | 에이전트에게 컴퓨터를 주다 |13| **언어** | Python, TypeScript | Python | Python | Python, TypeScript |14| **모델 지원** | 모든 모델 (OpenAI, Claude, 로컬) | 모든 모델 | 모든 모델 (이름과 달리) | Claude 전용 |15| **GitHub stars** | ~29k | ~40k | ~21k | ~6k |16| **적합한 용도** | 복잡한 상태 기반 워크플로 | 멀티 에이전트 전문화 | 라우팅 및 트리아지 | 코딩 및 파일 중심 작업 |17~18## LangGraph: 그래프 빌더19~20LangGraph는 에이전트 워크플로를 **유향 순환 그래프**로 모델링합니다. 노드(작업을 수행하는 함수)와 엣지(노드 간 전환, 조건부 가능)를 정의합니다. 상태는 그래프를 통해 흐르고 체크포인팅을 통해 영속화됩니다.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**: 타입이 지정된 상태를 가진 그래프 정의37- **Nodes**: 상태를 변환하는 Python 함수38- **Edges**: 노드 간의 연결, 조건부 가능39- **Checkpointing**: 장시간 실행 워크플로를 위한 내장 영속화40~41### 코드 예제42~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- 체크포인팅과 human-in-the-loop 내장82- TypeScript 완전 지원83- 모든 LLM 제공자와 호환84- 조건 분기와 루프가 있는 복잡한 워크플로에 최적85~86### 단점87~88- 가파른 학습 곡선 - 그래프 이론 개념을 이해해야 함89- 간단한 사용 사례에 대해 장황함 - 기본 에이전트도 다른 프레임워크보다 많은 보일러플레이트가 필요90- LangSmith 없이는 그래프 흐름 디버깅이 어려울 수 있음91~92### 가격93~94오픈소스 (MIT). LangSmith (관리형 관측 플랫폼)는 프로덕션 모니터링을 위한 유료 티어가 있음.95~96## CrewAI: 팀 어셈블러97~98CrewAI는 인간의 비유를 사용합니다: 전문화된 에이전트로 구성된 **크루**를 편성하고, 각 에이전트에 **역할**, **목표**, **배경 이야기**를 부여합니다. 에이전트는 **도구**를 사용하여 **태스크**에 협업하며, **프로세스** (순차, 계층, 합의)로 조율됩니다.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**: 역할, 목표, 배경 이야기, 도구를 가진 페르소나116- **Task**: 설명, 예상 출력, 배정된 에이전트를 가진 과제117- **Crew**: 함께 작업하는 에이전트 그룹118- **Process**: 실행 전략 (순차, 계층, 합의)119- **Flow**: 여러 크루를 연결하는 이벤트 기반 오케스트레이션 레이어120~121### 코드 예제122~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- 직관적인 역할 기반 추상화 - 이해하기 쉬움173- 100개 이상의 내장 도구 통합174- 에이전트 간 공유 메모리 (단기, 장기, 엔티티)175- 가장 큰 커뮤니티 (~40k GitHub stars)176- 위임과 검증을 수행하는 "매니저" 에이전트가 있는 계층 프로세스177~178### 단점179~180- LangGraph보다 세밀한 제어가 적음 - 정확한 실행 경로가 아닌 역할을 정의181- 에이전트 간 의견이 다를 때 계층 프로세스가 예측 불가능할 수 있음182- 멀티 에이전트 대화 디버깅이 단일 에이전트 흐름보다 어려움183~184### 가격185~186오픈소스 코어 (무료). CrewAI Platform: $99/월 (Teams)에서 $120k/년 (Enterprise). 활성 크루 수와 월간 실행 수 기반 가격 책정.187~188## OpenAI Agents SDK: 라우터189~190OpenAI Agents SDK (Swarm의 정신적 후계자)는 **핸드오프** - 에이전트가 대화를 다른 전문 에이전트에게 전달하는 것 - 에 초점을 맞춥니다. 가장 미니멀한 프레임워크로, 에이전트, 도구, 핸드오프, 가드레일로만 구성됩니다. 그게 전부입니다.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**: 모델 + 지시사항 + 도구 + 핸드오프206- **Handoff**: 다른 에이전트로의 전달 (LLM이 호출할 수 있는 도구로 모델링)207- **Guardrail**: 에이전트와 병렬로 실행되는 입출력 유효성 검사208- **Runner**: 에이전트 루프 실행209- **Tracing**: 모든 LLM 호출, 도구 실행, 핸드오프에 대한 내장 관측 기능210~211### 코드 예제212~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- 깔끔한 핸드오프 패턴 - 라우팅/트리아지 워크플로에 자연스러움260- 가드레일이 실행과 병렬로 동작 (fail-fast, 논블로킹)261- 디버깅을 위한 트레이싱 대시보드 내장262- 이름과 달리 OpenAI 외 모델도 지원263- 최소한의 추상화 - 이해하기 쉽고 확장하기 쉬움264~265### 단점266~267- LangGraph보다 상태 관리가 덜 성숙268- 내장 영속화나 체크포인팅이 없음269- 서드파티 도구 에코시스템이 작음270- 핸드오프 중심 설계가 모든 아키텍처에 맞지 않을 수 있음271~272### 가격273~274오픈소스 (MIT). 사용하는 모델에 따라 토큰당 과금.275~276## Claude Agent SDK: 개발자277~278Claude Agent SDK는 다른 접근 방식을 취합니다: 워크플로나 역할을 정의하는 대신, 에이전트에게 **도구 세트를 주고 작업을 어떻게 수행할지 스스로 판단하게 합니다**. 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()**: 에이전트 루프를 시작하는 메인 진입점293- **내장 도구**: Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch294- **MCP를 통한 커스텀 도구**: 인프로세스 MCP 서버로 도구 정의295- **서브 에이전트**: 부모가 위임할 수 있는 전문 에이전트296- **Sessions**: 여러 상호작용에 걸쳐 컨텍스트 유지297~298### 코드 예제299~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 서버 에코시스템에 연결 가능338- 파일 작업, 터미널, 웹 접근을 위한 내장 도구339- 대규모 코드베이스를 위한 자동 컨텍스트 압축340- 복잡한 작업을 위한 서브 에이전트 병렬 처리341- Claude Code와 동일한 엔진 - 실제 개발 워크플로에서 실전 검증342~343### 단점344~345- Claude 모델만 지원 - 멀티 제공자 지원 없음346- 새로운 프레임워크로 커뮤니티가 작음347- Python SDK에서도 Node.js 런타임이 필요348- LangGraph에 비해 워크플로 제어가 덜 명시적349~350### 가격351~352오픈소스. 표준 Claude API 토큰 요금. Managed Agents (호스팅 버전): 토큰 비용 외 세션 시간당 $0.08.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- 복잡한 조건 로직과 루프를 포함하는 사용 사례일 때373- 내장 영속화와 human-in-the-loop 체크포인트가 필요할 때374- 같은 워크플로에서 여러 LLM 제공자를 사용해야 할 때375~376### CrewAI를 선택해야 할 때:377- 직관적인 역할 기반 추상화를 원할 때378- 서로 다른 전문 분야를 가진 여러 에이전트가 관여하는 작업일 때379- 에이전트 간 협업과 컨텍스트 전달이 필요할 때380- 가장 큰 커뮤니티와 가장 많은 내장 통합을 중시할 때381~382### OpenAI Agents SDK를 선택해야 할 때:383- 주요 패턴이 대화를 전문가에게 라우팅하는 것일 때384- 입출력을 병렬로 검증하는 가드레일이 필요할 때385- 최소한의 보일러플레이트로 가장 단순한 추상화를 원할 때386- 내장 트레이싱과 관측 기능이 중요할 때387~388### Claude Agent SDK를 선택해야 할 때:389- 에이전트가 코드를 읽고, 쓰고, 실행해야 할 때390- 퍼스트클래스 MCP 서버 통합을 원할 때391- 반복하고 자체 수정하는 자율 에이전트가 필요할 때392- 이미 Claude를 사용하고 있어 가장 깊은 통합을 원할 때393~394## 프레임워크를 조합할 수 있을까?395~396네. 일반적인 패턴은 하나의 프레임워크를 오케스트레이션에, 다른 프레임워크를 개별 에이전트에 사용하는 것입니다:397~398- **LangGraph**를 전체 워크플로 그래프에399- **CrewAI**를 멀티 에이전트 협업이 필요한 특정 노드에400- **Claude Agent SDK**를 MCP를 통한 코딩 관련 서브 태스크에401- **OpenAI Agents SDK**를 고객 대면 트리아지와 라우팅에402~403이 프레임워크들은 상호 배타적이지 않습니다. 시스템의 각 부분에 맞는 것을 사용하세요.404~405## 결론406~407각 프레임워크는 명확한 방향성을 가지고 있습니다:408~409- **LangGraph**는 제어를 최적화 - 모든 전환을 직접 결정410- **CrewAI**는 협업을 최적화 - 에이전트가 팀으로 일함411- **OpenAI Agents SDK**는 단순함을 최적화 - 최소한의 추상화, 깔끔한 핸드오프412- **Claude Agent SDK**는 자율성을 최적화 - 도구를 주고 일하게 함413~414올바른 선택은 여러분의 워크플로, 팀, 그리고 기존 기술 스택에 따라 달라집니다. 주요 사용 사례에 맞는 것을 선택하고, 잘 익히고, 다른 프레임워크가 강점을 발휘하는 영역을 만났을 때 도입하세요.415~
NORMAL · agentic-ai-frameworks-comparison.md [readonly]415 lines · :q to close