05. Modern Stack: CrewAI
개요
에이전트 간 문자열을 수동으로 전달하는 것은 "From Scratch" 방식입니다. CrewAI는 Agents (역할과 목표), Tasks (설명과 예상 출력), Crews (프로세스)를 정의하는 구조화된 프레임워크를 제공합니다.
핵심 개념
| 개념 | 설명 |
|---|---|
| Role Playing | 에이전트에게 풍부한 배경 스토리를 부여하여 성능 향상 |
| Agent | 역할, 목표, 배경 스토리를 가진 자율적 단위 |
| Task | 설명, 예상 출력, 담당 에이전트가 있는 작업 항목 |
| Crew | 프로세스(순차/계층)를 가진 에이전트 팀 |
| Process.sequential | 작업을 순차적으로 실행 |
| Process.hierarchical | 매니저 에이전트가 전문가에게 작업 위임 |
CrewAI 에이전트 정의
from crewai import Agent, Task, Crew, Process
researcher = Agent(
role="시니어 리서치 애널리스트",
goal="AI와 데이터 사이언스의 최신 발전 동향 발굴",
backstory="""당신은 선도적인 기술 싱크탱크에서 일합니다.
신흥 트렌드를 식별하는 것이 전문 분야입니다.
복잡한 데이터를 분석하고 실행 가능한 인사이트를 제시하는
능력이 뛰어납니다.""",
verbose=True,
allow_delegation=False
)
writer = Agent(
role="테크 콘텐츠 전략가",
goal="기술 발전에 대한 설득력 있는 콘텐츠 작성",
backstory="""당신은 통찰력 있고 매력적인 글로
유명한 콘텐츠 전략가입니다.""",
verbose=True,
allow_delegation=True
)Task 정의
research_task = Task(
description="""2024년 AI 최신 발전에 대한 포괄적 분석을
수행하세요. 주요 트렌드, 혁신 기술, 잠재적 산업 영향을
파악하세요.""",
expected_output="글머리 기호로 된 전체 분석 보고서",
agent=researcher
)
write_task = Task(
description="""리서치 인사이트를 활용하여 가장 중요한
AI 발전을 강조하는 매력적인 블로그 포스트를 작성하세요.""",
expected_output="최소 4문단의 전체 블로그 포스트",
agent=writer
)Crew 구성
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, write_task],
process=Process.sequential, # 또는 Process.hierarchical
verbose=True
)
result = crew.kickoff()Sequential vs Hierarchical
CrewAI를 사용하는 이유
Role Playing: 풍부한 페르소나를 가진 에이전트가 일반적인 지시보다 더 나은 결과를 생성
| 기능 | 장점 |
|---|---|
| 풍부한 배경 스토리 | 더 나은 컨텍스트 이해 |
| 위임 | 에이전트가 서로 도움 요청 가능 |
| 메모리 | 에이전트가 이전 상호작용 기억 |
| 도구 | 커스텀 도구와 쉽게 통합 |
실습
에이전트 정의
역할, 목표, 배경 스토리가 있는 에이전트 생성
Task 생성
각 에이전트가 수행할 작업 정의
Crew 구성
프로세스 유형 선택 및 워크플로우 실행
결과 분석
순차 vs 계층 출력 비교