이 글은 누구를 위한 것인가
- AI 에이전트를 업무 자동화에 활용하고 싶은 분
- 단일 AI로 해결 못하는 복잡한 작업을 AI로 처리하는 방법이 궁금한 개발자
- LangGraph, CrewAI 같은 에이전트 프레임워크가 궁금한 분
들어가며
"AI에게 우리 제품의 경쟁사 분석 리포트 작성을 맡겨보고 싶은데, 가능할까요?"
가능하다. 하지만 하나의 AI에게 "경쟁사 분석 리포트 써줘"라고 하면 좋은 결과가 나오기 어렵다. 웹 검색, 데이터 수집, 분석, 시각화, 문서 작성 — 이 작업들이 각각 전문성이 필요하기 때문이다.
사람도 마찬가지다. 복잡한 프로젝트는 혼자 다 하지 않는다. 팀을 구성해서 역할을 나눈다. AI도 이제 팀으로 일한다. 이것이 멀티 에이전트 시스템이다.
1. 단일 AI 에이전트의 한계
단일 AI가 복잡한 태스크를 혼자 처리할 때 생기는 문제들이 있다.
컨텍스트 길이 한계 경쟁사 분석이라면 수십 개 웹페이지를 읽어야 한다. 이 모든 내용이 AI의 컨텍스트 윈도우를 금방 넘어버린다.
전문성의 한계 검색을 잘 하는 AI와 글을 잘 쓰는 AI는 다른 특성을 가질 수 있다. 하나의 AI가 모든 것을 다 잘 하기는 어렵다.
신뢰성과 검증 AI가 생성한 내용을 또 다른 AI가 검토하면 오류를 더 잘 잡아낼 수 있다. 사람도 자기 글을 스스로 교정하는 것보다 다른 사람이 교정하는 게 낫듯이.
2. 멀티 에이전트 시스템이란
멀티 에이전트 시스템은 각자 역할이 있는 여러 AI가 협력해 공동 목표를 달성하는 구조다.
[경쟁사 분석 리포트 멀티 에이전트 예시]
오케스트레이터(감독 AI)
├── 검색 에이전트: 경쟁사 A, B, C 정보 웹 검색
├── 분석 에이전트: 수집된 정보에서 패턴 추출
├── 데이터 시각화 에이전트: 차트 코드 생성
└── 작성 에이전트: 최종 리포트 문서 작성
→ 오케스트레이터가 각 에이전트 결과를 조율해 최종 리포트 완성
3. 주요 오케스트레이션 패턴
패턴 1: Supervisor/Worker (감독자-작업자)
가장 직관적인 구조다. 감독 에이전트가 전체를 조율하고, 작업 에이전트들이 구체적인 작업을 수행한다.
감독 에이전트
↓ 태스크 분배
├── 작업 에이전트 A: 데이터 수집
├── 작업 에이전트 B: 분석
└── 작업 에이전트 C: 리포트 작성
↑ 결과 수집 및 통합
감독 에이전트 → 최종 결과
언제 쓰나: 태스크가 명확히 분리되고, 중앙에서 조율이 필요할 때
패턴 2: Pipeline (파이프라인)
각 에이전트의 출력이 다음 에이전트의 입력이 된다. 조립 라인처럼 흐른다.
에이전트 A (검색) → 에이전트 B (요약) → 에이전트 C (번역) → 최종 결과
언제 쓰나: 순차적으로 처리해야 하는 데이터 변환 작업
패턴 3: Critic 패턴 (비평자 패턴)
생성자 에이전트와 비평자 에이전트가 짝을 이룬다.
생성자 에이전트: 코드 작성
↓
비평자 에이전트: 코드 검토 (버그, 보안, 성능 이슈 확인)
↓
생성자 에이전트: 피드백 반영해 수정
↓ (반복 N회)
최종 검증된 코드
언제 쓰나: 품질이 중요한 작업, 코드 생성, 문서 작성
4. 주요 프레임워크 비교
| 프레임워크 | 특징 | 학습 곡선 | 적합한 케이스 |
|---|---|---|---|
| LangGraph | 그래프 기반 워크플로우, 유연성 최고 | 높음 | 복잡한 커스텀 워크플로우 |
| CrewAI | 역할 기반, 직관적 API | 낮음 | 빠른 프로토타이핑 |
| AutoGen (Microsoft) | 대화 기반, 코드 실행 특화 | 중간 | 코딩 자동화 |
| Claude Agent SDK | Anthropic 공식 SDK | 낮음 | Claude 기반 에이전트 |
| LangChain | 방대한 생태계 | 중간 | 다양한 LLM, 도구 연동 |
5. CrewAI로 만드는 간단한 멀티 에이전트
CrewAI는 사람 팀처럼 역할(Role), 목표(Goal), 배경(Backstory)을 가진 에이전트를 정의한다.
from crewai import Agent, Task, Crew
# 연구자 에이전트
researcher = Agent(
role='시장 조사 전문가',
goal='최신 AI 트렌드를 정확하게 수집하고 정리한다',
backstory='10년 경력의 테크 리서처. 신뢰할 수 있는 정보만 선별한다.',
tools=[search_tool], # 웹 검색 도구
verbose=True
)
# 작가 에이전트
writer = Agent(
role='테크 블로그 작가',
goal='연구 결과를 일반인도 이해하기 쉬운 글로 작성한다',
backstory='전문 지식을 쉽게 풀어쓰는 능력이 뛰어난 작가.',
verbose=True
)
# 태스크 정의
research_task = Task(
description='2026년 AI 에이전트 시장 최신 트렌드를 조사하라',
agent=researcher,
expected_output='핵심 트렌드 5가지와 각 근거 자료'
)
writing_task = Task(
description='조사 결과를 바탕으로 블로그 포스트를 작성하라',
agent=writer,
context=[research_task], # 연구 결과를 참고
expected_output='1000자 이상의 블로그 포스트'
)
# Crew 구성 및 실행
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, writing_task]
)
result = crew.kickoff()
print(result)
6. 에이전트 간 상태 공유와 실패 복구
멀티 에이전트의 가장 어려운 부분이 상태 관리와 실패 처리다.
상태 공유: 에이전트들이 서로의 진행 상황을 알아야 한다. LangGraph는 그래프의 각 노드(에이전트)가 공유 상태(State)를 읽고 쓰는 방식으로 이 문제를 해결한다.
실패 복구: 에이전트 하나가 실패하면 전체가 멈추면 안 된다. 두 가지 전략이 있다:
- 재시도(Retry): 같은 에이전트가 다시 시도
- 폴백(Fallback): 다른 방법으로 같은 결과를 얻는 대안 에이전트 실행
# LangGraph 실패 처리 예시
from langgraph.graph import StateGraph
def research_with_retry(state):
max_retries = 3
for attempt in range(max_retries):
try:
result = research_agent.run(state["query"])
return {"research": result}
except Exception as e:
if attempt == max_retries - 1:
# 최대 재시도 후 실패 시 간소화된 검색으로 폴백
return {"research": simple_search(state["query"])}
7. 실제 활용 사례
코드 리뷰 자동화
PR 생성
→ 코드 분석 에이전트 (보안 취약점, 성능 이슈 확인)
→ 스타일 검사 에이전트 (코딩 컨벤션 준수 여부)
→ 요약 에이전트 (리뷰 코멘트 종합)
→ GitHub PR에 자동 코멘트
고객 응대 에이전트 팀
고객 문의 접수
→ 분류 에이전트 (일반문의 / 불만 / 기술 지원)
→ 전문 에이전트 (해당 유형별 전문 응답)
→ 품질 검사 에이전트 (응답 적절성 확인)
→ 최종 응답 발송
맺으며
멀티 에이전트는 "AI를 더 크게 쓰는 것"이 아니라 "AI를 더 똑똑하게 조직하는 것"이다. 사람 조직이 분업과 협력으로 더 큰 성과를 내듯이, AI도 팀으로 구성하면 단독으로는 불가능한 복잡한 작업을 처리할 수 있다.
복잡한 프레임워크부터 시작할 필요는 없다. 지금 AI에게 시키려는 작업을 하위 작업으로 나눠보고, 그것을 순서대로 실행하는 파이프라인 구조부터 시작해보자. 그것이 멀티 에이전트의 첫 걸음이다.