콘텐츠로 이동

프레임워크 비교: LangGraph, Agents SDK, CrewAI, AutoGen, smolagents

프레임워크를 선택하는 이유와 주의점

섹션 제목: “프레임워크를 선택하는 이유와 주의점”

에이전트 프레임워크는 도구다. 도구가 좋으면 어려운 작업이 쉬워지지만, 잘못 선택하면 프레임워크 자체와 싸우는 데 시간을 낭비한다. Anthropic의 권고처럼 “가능하면 단순하게 시작하라”는 원칙은 프레임워크 선택에도 적용된다. 프레임워크 없이 직접 구현할 수 있는 수준의 루프에 무거운 프레임워크를 도입하면 추상화 레이어가 오히려 디버깅을 어렵게 만든다.

이 챕터에서는 현재 가장 많이 사용되는 다섯 가지 프레임워크를 설계 철학의 관점에서 비교한다.

LangGraph: 상태 머신으로서의 에이전트

섹션 제목: “LangGraph: 상태 머신으로서의 에이전트”

핵심 패러다임: 에이전트 루프를 **유향 그래프(directed graph)**로 모델링한다. 노드는 LLM 호출이나 도구 실행을 나타내고, 엣지는 상태 전이를 나타낸다. **조건부 엣지(conditional edge)**로 에이전트의 결정에 따라 다른 노드로 분기할 수 있다.

상태 관리: TypedDict로 정의된 공유 상태가 그래프 전체를 흐른다. 각 노드는 상태를 읽고 업데이트하는 순수 함수처럼 동작한다. 체크포인터(checkpointer) 가 매 노드 실행마다 상태를 저장해 롤백과 재시작을 지원한다.

인터럽트(interrupt): LangGraph는 그래프 실행을 특정 노드에서 일시 중단하고 인간의 승인을 받을 수 있는 interrupt() 메커니즘을 제공한다. 이것이 6-5 챕터에서 다룬 휴먼인더루프(human-in-the-loop) 패턴의 구체적 구현이다.

┌─────────────────────────────────────────────────────────────┐
│ LangGraph 그래프 구조 예시 │
├─────────────────────────────────────────────────────────────┤
│ │
│ START ──→ [Plan] ──→ [Execute] ──→ [Verify] │
│ │ │ │
│ │ pass ▼ fail │
│ │ [Done] ──→ [Retry] │
│ │ │ │
│ └──────────────────────┘ │
│ (조건부 엣지: 재계획 또는 재시도) │
└─────────────────────────────────────────────────────────────┘

적합한 상황: 복잡한 제어 흐름, 명확한 상태 전이, 체크포인트가 필요한 장기 실행 워크플로, 프로덕션 신뢰성이 중요한 시스템.

OpenAI Agents SDK: 핸드오프 중심의 단순한 프리미티브

섹션 제목: “OpenAI Agents SDK: 핸드오프 중심의 단순한 프리미티브”

핵심 패러다임: 세 가지 프리미티브 — Agent, Handoff, Guardrail — 로 구성된 미니멀한 추상화. 10-2 챕터에서 자세히 다뤘다. 에이전트가 피어(peer)에게 직접 제어권을 넘기는 핸드오프 모델을 기본으로 한다.

상태 관리: 컨텍스트 오브젝트를 통해 실행 전반에 걸쳐 공유 데이터를 전달한다. LangGraph처럼 그래프 구조로 명시적 상태를 정의하지 않고, 에이전트의 대화 컨텍스트가 자연스럽게 상태를 표현한다.

Guardrail: 에이전트 입출력을 병렬로 검증하는 레이어다. 모델 추론과 독립적으로 동작하므로 결정론적 안전 체크가 가능하다. 출력이 Guardrail을 통과하지 못하면 에이전트가 재시도하거나 에러를 발생시킨다.

적합한 상황: 명확한 전문화 경계를 가진 에이전트 집합, 선형적 위임 체인, Python 중심 팀, 빠른 프로토타이핑.

핵심 패러다임: 에이전트를 **역할(role)**과 목표(goal), **배경(backstory)**을 가진 팀원으로 정의한다. 에이전트들이 태스크(task) 시퀀스를 통해 협력한다. 인간이 팀을 구성하는 방식을 LLM 에이전트로 모델링한다는 개념이 특징이다.

실행 모드: sequential(순차, 한 에이전트가 완료하면 다음 에이전트 시작)과 hierarchical(계층, 매니저 에이전트가 태스크를 할당)을 지원한다.

적합한 상황: 역할이 명확히 정의된 비즈니스 프로세스, 높은 수준의 추상화가 필요한 비개발자 친화적 설정, 팀 메타포가 도메인과 잘 맞는 경우.

핵심 패러다임: 에이전트들이 메시지(message)를 주고받는 대화로 협력한다. Microsoft Research에서 개발했으며, UserProxyAgentAssistantAgent의 대화로 기본 패턴을 구성한다. 코드를 실행하고 그 결과를 대화로 공유하는 코드 실행 루프가 내장돼 있다.

그룹 채팅(GroupChat): 여러 에이전트가 하나의 채팅방에서 메시지를 주고받는 패턴을 지원한다. GroupChatManager가 다음 발언자를 선택한다.

적합한 상황: 연구·실험적 멀티에이전트 상호작용, 코드 실행이 중심인 작업, 에이전트 간 대화를 자연어로 관찰해야 하는 디버깅 환경.

핵심 패러다임: CodeAct — 에이전트가 도구를 JSON으로 호출하는 대신 Python 코드를 직접 작성하고 실행한다. 코드 자체가 액션이다. 이 접근법은 복잡한 도구 체이닝을 코드 한 줄로 표현할 수 있다는 장점이 있다.

Hugging Face가 개발했으며, 경량화와 최소 의존성을 설계 철학으로 삼는다. 로컬 모델과 오픈소스 모델 지원에 강점이 있다.

적합한 상황: 코드 실행 에이전트, 오픈소스·로컬 모델 활용, 최소 의존성이 중요한 환경, 연구 프로토타이핑.

기준 LangGraph Agents SDK CrewAI AutoGen smolagents
핵심 추상화 상태 그래프 Agent/Handoff Role/Task Agent 대화 CodeAct
제어 흐름 명시적 그래프 핸드오프 체인 순차/계층 대화 기반 코드 실행
상태 관리 TypedDict + 체크포인터 컨텍스트 오브젝트 Task 출력 전달 메시지 히스토리 코드 변수
체크포인트 내장 (SQLite/Redis) 미내장 미내장 미내장 미내장
휴먼인더루프 interrupt() 내장 Guardrail 수동 구현 UserProxy 수동 구현
모델 공급자 LLM 공개 OpenAI 중심 다양 다양 오픈소스 강점
학습 곡선 중간-높음 낮음 낮음 낮음 낮음
프로덕션 성숙도 높음 높음 중간 중간 낮음

어떤 프레임워크도 모든 상황에 최적이지 않다. 다음 질문이 선택을 안내한다.

복잡한 분기 로직이 필요한가? → LangGraph. 조건부 엣지와 명시적 상태 그래프가 복잡한 제어 흐름을 명확하게 표현한다.

핸드오프 기반의 전문화가 핵심인가? → Agents SDK. 미니멀한 프리미티브로 빠르게 시작할 수 있다.

도메인 전문가가 에이전트를 구성해야 하는가? → CrewAI. 역할과 목표로 구성하는 인터페이스가 비개발자에게 친숙하다.

에이전트 간 대화를 자연어로 관찰해야 하는가? → AutoGen. 대화 로그가 시스템 동작을 직관적으로 보여준다.

오픈소스 모델을 쓰거나 코드 실행이 핵심인가? → smolagents. CodeAct 패러다임과 경량 설계가 강점이다.

검증된 체크포인트와 롤백이 프로덕션에 필요한가? → LangGraph가 현재 가장 성숙한 솔루션이다.

이 섹션에서는 멀티에이전트 시스템이 단일 에이전트의 한계를 어떻게 넘어서는지, 그리고 그 넘어섬이 새로운 문제들 — 시간 지평선, 오류 복리, 멜트다운 — 을 어떻게 만들어내는지를 살펴봤다. 프레임워크는 이 문제들에 대한 각자의 답을 가지고 있으며, 시스템의 요구사항에 따라 올바른 도구를 선택하는 것이 루프 엔지니어의 핵심 역량이다.

퀴즈를 불러오는 중…

참고 자료