이 글에서는 João Moura가 개발한 오픈 소스 멀티 에이전트 오케스트레이션 프레임워크인 CrewAI에 대해 알아보겠습니다.
목차
CrewAI: 협업하는 AI 에이전트의 세계
CrewAI는 João Moura가 개발한 오픈 소스 멀티 에이전트 오케스트레이션 프레임워크입니다. 이 프레임워크는 마치 실제 작업팀처럼 여러 AI 에이전트가 협력하여 복잡한 작업을 완수할 수 있게 해주는 도구입니다. 각 에이전트는 특정 역할과 전문성을 가지고 있으며, 이들이 협업하여 하나의 공통 목표를 달성하는 과정을 효율적으로 관리합니다.
흥미로운 점은 CrewAI가 처음에는 LangChain 기반으로 시작되었지만, 현재는 완전히 독립적인 프레임워크로 발전했다는 것입니다. 공식 문서에 따르면 CrewAI는 "LangChain이나 다른 에이전트 프레임워크와 완전히 독립적으로 처음부터 구축된 경량 프레임워크"라고 설명하고 있습니다.
CrewAI의 핵심 컴포넌트
CrewAI는 네 가지 핵심 구성 요소로 이루어져 있습니다.
에이전트 (Agent)
에이전트는 CrewAI의 가장 기본적인 구성 요소입니다. 각 에이전트는 특정 역할과 목표, 배경 스토리를 가진 자율적인 AI 단위로, 실제 팀의 구성원처럼 작동합니다. 예를 들어, 데이터 과학자, 연구원, 작가 등 다양한 역할을 수행할 수 있습니다.
researcher = Agent(
role="시니어 리서처",
goal="웹에서 정보를 검색하고 분석하여 리서치 결과 정리",
backstory="다양한 정보를 분석하여 최고의 리서치 결과를 제공하는 전문가입니다.",
tools=[search_tool, scrape_tool],
)
툴 (Tool)
툴은 에이전트가 작업을 수행하는 데 사용하는 도구입니다. 웹 검색, 데이터 분석, 코드 실행 등 다양한 기능을 수행할 수 있습니다. CrewAI는 기본 제공되는 툴과 사용자가 직접 정의할 수 있는 커스텀 툴을 지원합니다.
주요 툴 예시
- JSONSearchTool: JSON 파일 내에서 검색 수행
- GithubSearchTool: GitHub 리포지토리 내 검색
- ScrapeWebsiteTool: 웹사이트 스크래핑 도구
- 다양한 LangChain 호환 툴
작업 (Task)
작업은 에이전트가 완료해야 할 구체적인 과제를 정의합니다. 작업에는 설명, 담당 에이전트, 예상 결과물 등이 포함됩니다.
research_task = Task(
description="'인공지능의 미래'에 대한 최신 정보를 검색하고 중요 트렌드를 정리하세요",
agent=researcher,
expected_output="주요 트렌드와 전문가 의견이 포함된 체계적인 리서치 결과",
)
프로세스 (Process)
프로세스는 작업의 실행 방식을 결정합니다. CrewAI는 현재 두 가지 프로세스를 지원합니다:
1. 순차적 프로세스(Sequential Process): 작업이 미리 정의된 순서대로 실행되며, 이전 작업의 결과가 다음 작업의 입력으로 사용됩니다.
2. 계층적 프로세스(Hierarchical Process): 관리자 에이전트가 작업을 감독하고 할당하는 기업 계층 구조와 유사한 방식입니다.
'합의 프로세스(Consensus Process)'가 향후 추가될 예정입니다.
CrewAI의 작동 방식
CrewAI의 작동 방식은 실제 팀 협업과 유사합니다.
1. 크루(Crew) 구성: 다양한 역할과 전문성을 가진 에이전트들로 팀을 구성합니다.
2. 작업 할당: 각 에이전트에게 특정 작업을 할당합니다.
3. 프로세스 설정: 작업 실행 순서와 방식을 결정합니다.
4. 실행: 에이전트들이 협업하여 작업을 순차적으로 또는 계층적으로 처리합니다.
5. 결과 도출: 모든 에이전트의 작업 결과가 종합되어 최종 결과물이 생성됩니다.
# 크루 구성 예시
crew = Crew(
agents=[researcher, writer, editor],
tasks=[research_task, writing_task, editing_task],
process=Process.sequential,
verbose=True,
)
# 실행
result = crew.kickoff(inputs={"topic": "인공지능의 미래"})
CrewAI의 장단점
CrewAI의 장단점은 다음과 같습니다.
장점
- 협업 인텔리전스
- 여러 AI 에이전트가 협력하여 단일 에이전트가 해결하기 어려운 복잡한 문제를 해결할 수 있습니다.
- 역할 기반 설계
- 각 에이전트에게 특정 역할과 목표를 부여하여 전문성을 활용할 수 있습니다.
- 확장성
- 다양한 차원으로 확장 가능하며, 에이전트 수, 다양성, 처리 데이터 규모 등을 증가시킬 수 있습니다.
- 유연한 통합
- 다양한 LLM과 툴을 쉽게 통합할 수 있으며, 사용자 정의 툴도 생성 가능합니다.
- 자율성
- 에이전트들이 자율적으로 작업을 수행하고 의사결정을 내릴 수 있습니다.
단점
- 복잡성
- 설정과 구성이 복잡하여 초보자에게는 진입 장벽이 있을 수 있습니다.
- 리소스 요구
- 여러 LLM 인스턴스를 동시에 실행하므로 컴퓨팅 리소스와 API 호출 비용이 증가할 수 있습니다.
- 디버깅 어려움
- 여러 에이전트가 상호작용하는 복잡한 시스템에서 문제를 디버깅하는 것이 어려울 수 있습니다.
- 제한된 메모리 관리
- 복잡한 대화 이력이나 컨텍스트 관리에 아직 제한이 있을 수 있습니다.
- 학습 곡선
- Python 프로그래밍, AI 원리, 프롬프트 엔지니어링 등의 기본 지식이 필요합니다.
설치 및 기본 사용법
CrewAI를 설치하는 방법과 기본적인 사용법에 대해 알아보겠습니다.
설치하기
CrewAI는 pip를 통해 쉽게 설치할 수 있습니다.
# 기본 설치
pip install crewai
# 추가 도구를 포함한 설치
pip install 'crewai[tools]'
기본 사용 예시
다음은 CrewAI를 사용하여 간단한 블로그 포스트 생성 시스템을 구축하는 예시입니다.
1. 필요한 모듈 임포트
import os
from crewai import Agent, Task, Crew, Process
from dotenv import load_dotenv
# API 키 로드
load_dotenv()
# 또는 직접 설정
# os.environ["OPENAI_API_KEY"] = "your-openai-api-key"
2. 웹 검색 및 스크래핑 도구 설정 (선택사항)
from crewai_tools import SerperDevTool, ScrapeWebsiteTool
# 검색 도구 설정
search_tool = SerperDevTool()
# 웹 스크래핑 도구 설정
scrape_tool = ScrapeWebsiteTool()
3. 에이전트 생성
각각 역할이 다른 에이전트들을 정의합니다.
# 리서치 담당 에이전트
researcher = Agent(
role="리서치 전문가",
goal="주제에 관한 정확하고 포괄적인 정보 수집",
backstory="""당신은 10년 경력의 리서치 전문가입니다. 모든 주제에 대해
신뢰할 수 있는 정보를 찾아내고 복잡한 개념을 이해하는 능력이 뛰어납니다.""",
verbose=True,
allow_delegation=False,
tools=[search_tool, scrape_tool]
)
# 작가 에이전트
writer = Agent(
role="콘텐츠 작가",
goal="정확한 정보를 바탕으로 흥미롭고 이해하기 쉬운 콘텐츠 작성",
backstory="""당신은 다양한 주제에 대한 블로그 포스트를 작성해온 경험이 풍부한
콘텐츠 작가입니다. 복잡한 내용을 쉽고 매력적으로 전달하는 능력이 있습니다.""",
verbose=True
)
# 편집자 에이전트
editor = Agent(
role="편집자",
goal="콘텐츠의 질과 정확성을 검증하고 최종 개선",
backstory="""당신은 꼼꼼한 편집자로, 문체, 흐름, 구조, 문법 등을
체계적으로 검토하여 콘텐츠의 품질을 높이는 전문가입니다.""",
verbose=True
)
4. 작업(Task) 정의
각 에이전트가 수행할 작업을 정의합니다:
# 리서치 작업
research_task = Task(
description="""'{topic}'에 대한 포괄적인 리서치를 수행하세요.
주요 개념, 최신 동향, 중요 인물, 역사적 맥락 등을 조사하고,
신뢰할 수 있는 출처에서 정보를 수집하세요.""",
agent=researcher,
expected_output="""주제에 대한 체계적인 리서치 결과. 중요 사실, 통계,
인용구, 출처 등을 포함해야 합니다."""
)
# 작성 작업
writing_task = Task(
description="""리서치 결과를 바탕으로 '{topic}'에 대한
1500-2000자 분량의 블로그 포스트를 작성하세요.
일반 독자가 이해하기 쉽게 작성하고, 사실과 데이터를 적절히 활용하세요.""",
agent=writer,
expected_output="""매력적인 제목, 명확한 도입부, 구조화된 본문,
논리적인 결론을 갖춘 완성된 블로그 포스트""",
context=[research_task] # 리서치 작업의 결과를 컨텍스트로 제공
)
# 편집 작업
editing_task = Task(
description="""작성된 블로그 포스트를 검토하고 개선하세요.
문법, 맞춤법, 문장 구조, 논리적 흐름을 확인하고 필요한 경우 수정하세요.
콘텐츠의 정확성과 독자 친화성을 높이는 데 중점을 두세요.""",
agent=editor,
expected_output="""오류가 수정되고 품질이 향상된 최종 블로그 포스트.
수정된 부분과 개선 이유에 대한 간략한 설명 포함""",
context=[writing_task] # 작성 작업의 결과를 컨텍스트로 제공
)
5. 크루(Crew) 구성 및 실행
에이전트와 작업을 연결하여 크루를 구성하고 실행합니다:
# 크루 생성
blog_crew = Crew(
agents=[researcher, writer, editor],
tasks=[research_task, writing_task, editing_task],
process=Process.sequential, # 순차적으로 작업 실행
verbose=True # 상세 로그 출력
)
# 크루 실행
result = blog_crew.kickoff(
inputs={"topic": "인공지능의 미래 트렌드"}
)
# 결과 출력
print(result)
# 결과를 파일로 저장 (선택사항)
with open("blog_post.md", "w", encoding="utf-8") as f:
f.write(result)
CrewAI는 복잡한 작업을 수행하기 위해 여러 AI 에이전트가 협업하는 새로운 패러다임을 제시합니다. 다양한 역할과 전문성을 가진 에이전트들이 함께 작업하여 단일 에이전트가 해결하기 어려운 문제를 효과적으로 해결할 수 있습니다.
향후 CrewAI의 발전 방향은 다음과 같을 것으로 예상됩니다.
- 더 풍부한 협업 모델: 에이전트 간 더 복잡한 상호작용과 협업 패턴 지원
- 개선된 메모리 시스템: 장기적인 컨텍스트 유지와 학습 능력 향상
- 시각화 및 모니터링 도구: 복잡한 멀티 에이전트 시스템의 작동을 이해하고 디버깅하기 위한 도구
- 더 넓은 생태계 통합: 다양한 LLM과 도구, 서비스와의 통합 확장
'개발 > LLM' 카테고리의 다른 글
[논문 리뷰] Building Guardrails for Large Language Models (1) | 2025.05.01 |
---|---|
[AI][Agent] LangGraph와 BeeAI 멀티 에이전트 프레임워크 비교 분석 (0) | 2025.04.22 |
[AI][Agent] LangGraph: 차세대 AI 에이전트 프레임워크의 부상 (0) | 2025.04.21 |
[AI][Agent] BeeAI Framework: 차세대 멀티 에이전트 개발 플랫폼 (0) | 2025.04.20 |
[AI][Agent] 구글의 'Agent2Agent(A2A)' 프로토콜 (0) | 2025.04.13 |