협업 AI의 힘을 발휘하기

여러 AI 에이전트가 각자의 전문성을 바탕으로 원활하게 협력하며 복잡한 문제를 해결한다고 상상해 보세요. 각자 고유한 기술을 발휘해 공동의 목표를 달성합니다. 이것이 바로 CrewAI의 힘입니다. CrewAI 프레임워크를 통해 단일 AI로는 달성할 수 없는 과업을 협업 AI 시스템으로 실현할 수 있습니다. 이 가이드에서는 연구 크루를 만들어 주제를 조사 및 분석하고, 종합적인 보고서를 작성하는 과정을 안내합니다. 이 실용적인 예시는 AI 에이전트들이 어떻게 협력하여 복잡한 작업을 수행할 수 있는지 보여 주지만, CrewAI로 실현할 수 있는 가능성의 시작에 불과합니다.

무엇을 만들고 배우게 될까요

이 가이드를 마치면 다음을 할 수 있게 됩니다:
  1. 특화된 AI 연구팀 조직: 각기 다른 역할과 책임을 가진 연구팀을 만듭니다
  2. 여러 AI 에이전트 간의 협업 조율
  3. 정보 수집, 분석, 보고서 생성을 포함한 복잡한 workflow 자동화
  4. 더 야심찬 프로젝트에도 적용할 수 있는 기초 역량 구축
이 가이드에서는 간단한 research crew를 만들지만, 동일한 패턴과 기법을 활용하여 다음과 같은 훨씬 더 정교한 팀도 만들 수 있습니다:
  • 전문 writer, editor, fact-checker가 참여하는 다단계 콘텐츠 생성
  • 단계별 지원 에이전트가 있는 복잡한 고객 서비스 시스템
  • 데이터 수집, 시각화, 인사이트 생성까지 하는 자율 business analyst
  • 아이디어 구상, 디자인, 구현 계획까지 진행하는 product development 팀
이제 여러분의 첫 crew를 만들어 봅시다!

필수 조건

시작하기 전에 다음을 확인하세요:
  1. 설치 가이드를 참고하여 CrewAI를 설치했는지 확인하세요.
  2. LLM 설정 가이드를 참고하여 환경에 LLM API 키를 설정했는지 확인하세요.
  3. Python에 대한 기본적인 이해

1단계: 새로운 CrewAI 프로젝트 생성

먼저, CLI를 사용하여 새로운 CrewAI 프로젝트를 생성해봅시다. 이 명령어는 필요한 모든 파일을 포함한 전체 프로젝트 구조를 설정해 주어, 보일러플레이트 코드를 설정하는 대신 에이전트와 그들의 작업 정의에 집중할 수 있습니다.
crewai create crew research_crew
cd research_crew
이렇게 하면 crew에 필요한 기본 구조를 갖춘 프로젝트가 생성됩니다. CLI는 다음을 자동으로 생성합니다:
  • 필요한 파일이 포함된 프로젝트 디렉터리
  • 에이전트와 작업에 대한 구성 파일
  • 기본 crew 구현
  • crew를 실행하는 메인 스크립트
CrewAI Framework Overview

CrewAI 프레임워크 개요

2단계: 프로젝트 구조 살펴보기

CLI가 생성한 프로젝트 구조를 이해하는 시간을 가져봅시다. CrewAI는 Python 프로젝트의 모범 사례를 따르므로, crew가 더 복잡해질수록 코드를 쉽게 유지 관리하고 확장할 수 있습니다.
research_crew/
├── .gitignore
├── pyproject.toml
├── README.md
├── .env
└── src/
    └── research_crew/
        ├── __init__.py
        ├── main.py
        ├── crew.py
        ├── tools/
        │   ├── custom_tool.py
        │   └── __init__.py
        └── config/
            ├── agents.yaml
            └── tasks.yaml
이 구조는 Python 프로젝트의 모범 사례를 따르며, 코드를 체계적으로 구성할 수 있도록 해줍니다. 설정 파일(YAML)과 구현 코드(Python)의 분리로 인해, 기본 코드를 변경하지 않고도 crew의 동작을 쉽게 수정할 수 있습니다.

3단계: 에이전트 구성하기

이제 재미있는 단계가 시작됩니다 - 여러분의 AI 에이전트를 정의하는 것입니다! CrewAI에서 에이전트는 특정 역할, 목표 및 배경을 가진 전문화된 엔터티로, 이들이 어떻게 행동할지를 결정합니다. 각각 고유한 성격과 목적을 지닌 연극의 등장인물로 생각하면 됩니다. 우리의 리서치 crew를 위해 두 명의 에이전트를 만들겠습니다:
  1. 정보를 찾아 정리하는 데 뛰어난 리서처
  2. 연구 결과를 해석하고 통찰력 있는 보고서를 작성할 수 있는 애널리스트
이러한 전문화된 에이전트를 정의하기 위해 agents.yaml 파일을 수정해봅시다. llm 항목은 사용 중인 제공업체에 맞게 설정하세요.
# src/research_crew/config/agents.yaml
researcher:
  role: >
    Senior Research Specialist for {topic}
  goal: >
    Find comprehensive and accurate information about {topic}
    with a focus on recent developments and key insights
  backstory: >
    You are an experienced research specialist with a talent for
    finding relevant information from various sources. You excel at
    organizing information in a clear and structured manner, making
    complex topics accessible to others.
  llm: provider/model-id  # e.g. openai/gpt-4o, google/gemini-2.0-flash, anthropic/claude...

analyst:
  role: >
    Data Analyst and Report Writer for {topic}
  goal: >
    Analyze research findings and create a comprehensive, well-structured
    report that presents insights in a clear and engaging way
  backstory: >
    You are a skilled analyst with a background in data interpretation
    and technical writing. You have a talent for identifying patterns
    and extracting meaningful insights from research data, then
    communicating those insights effectively through well-crafted reports.
  llm: provider/model-id  # e.g. openai/gpt-4o, google/gemini-2.0-flash, anthropic/claude...
각 에이전트가 고유한 역할, 목표, 그리고 배경을 가지고 있다는 점에 주목하세요. 이 요소들은 단순한 설명 그 이상으로, 실제로 에이전트가 자신의 과업을 어떻게 접근하는지에 적극적으로 영향을 미칩니다. 이러한 부분을 신중하게 설계함으로써 서로 보완하는 전문적인 역량과 관점을 가진 에이전트를 만들 수 있습니다.

4단계: 작업 정의하기

이제 agent들을 정의했으니, 이들에게 수행할 구체적인 작업을 지정해야 합니다. CrewAI의 작업(task)은 agent가 수행할 구체적인 업무를 나타내며, 자세한 지침과 예상 결과물이 포함됩니다. 연구 crew를 위해 두 가지 주요 작업을 정의하겠습니다:
  1. 포괄적인 정보 수집을 위한 연구 작업
  2. 인사이트 있는 보고서 생성을 위한 분석 작업
tasks.yaml 파일을 다음과 같이 수정해 보겠습니다:
# src/research_crew/config/tasks.yaml
research_task:
  description: >
    {topic}에 대해 철저한 연구를 수행하세요. 다음에 중점을 두세요:
    1. 주요 개념 및 정의
    2. 역사적 발전과 최근 동향
    3. 주요 과제와 기회
    4. 주목할 만한 적용 사례 또는 케이스 스터디
    5. 향후 전망과 잠재적 발전

    반드시 명확한 섹션으로 구성된 구조화된 형식으로 결과를 정리하세요.
  expected_output: >
    {topic}의 모든 요구 사항을 다루는, 잘 구성된 섹션이 포함된 포괄적인 연구 문서.
    필요에 따라 구체적인 사실, 수치, 예시를 포함하세요.
  agent: researcher

analysis_task:
  description: >
    연구 결과를 분석하고 {topic}에 대한 포괄적인 보고서를 작성하세요.
    보고서에는 다음 내용이 포함되어야 합니다:
    1. 간결한 요약(executive summary)으로 시작
    2. 연구의 모든 주요 정보 포함
    3. 동향과 패턴에 대한 통찰력 있는 분석 제공
    4. 추천사항 또는 미래 고려 사항 제시
    5. 명확한 제목과 함께 전문적이고 읽기 쉬운 형식으로 작성

  expected_output: >
    연구 결과와 추가 분석, 인사이트를 포함한 {topic}에 대한 정제되고 전문적인 보고서.
    보고서는 간결한 요약, 본문, 결론 등으로 잘 구조화되어 있어야 합니다.
  agent: analyst
  context:
    - research_task
  output_file: output/report.md
분석 작업 내의 context 필드에 주목하세요. 이 강력한 기능을 통해 analyst가 연구 작업의 결과물을 참조할 수 있습니다. 이를 통해 정보가 human team에서처럼 agent 간에 자연스럽게 흐르는 워크플로우가 만들어집니다.

5단계: 크루 구성 설정하기

이제 크루를 구성하여 모든 것을 하나로 모을 시간입니다. 크루는 에이전트들이 함께 작업을 완료하는 방식을 조율하는 컨테이너 역할을 합니다. crew.py 파일을 다음과 같이 수정해보겠습니다:
# src/research_crew/crew.py
from crewai import Agent, Crew, Process, Task
from crewai.project import CrewBase, agent, crew, task
from crewai_tools import SerperDevTool
from crewai.agents.agent_builder.base_agent import BaseAgent
from typing import List

@CrewBase
class ResearchCrew():
    """Research crew for comprehensive topic analysis and reporting"""

    agents: List[BaseAgent]
    tasks: List[Task]

    @agent
    def researcher(self) -> Agent:
        return Agent(
            config=self.agents_config['researcher'], # type: ignore[index]
            verbose=True,
            tools=[SerperDevTool()]
        )

    @agent
    def analyst(self) -> Agent:
        return Agent(
            config=self.agents_config['analyst'], # type: ignore[index]
            verbose=True
        )

    @task
    def research_task(self) -> Task:
        return Task(
            config=self.tasks_config['research_task'] # type: ignore[index]
        )

    @task
    def analysis_task(self) -> Task:
        return Task(
            config=self.tasks_config['analysis_task'], # type: ignore[index]
            output_file='output/report.md'
        )

    @crew
    def crew(self) -> Crew:
        """Creates the research crew"""
        return Crew(
            agents=self.agents,
            tasks=self.tasks,
            process=Process.sequential,
            verbose=True,
        )
이 코드에서는 다음을 수행합니다:
  1. researcher 에이전트를 생성하고, SerperDevTool을 장착하여 웹 검색 기능을 추가합니다.
  2. analyst 에이전트를 생성합니다.
  3. research와 analysis 작업(task)을 설정합니다.
  4. 크루가 작업을 순차적으로 수행하도록 설정합니다(analyst가 researcher가 끝날 때까지 대기).
여기서 마법이 일어납니다. 몇 줄의 코드만으로도, 특화된 에이전트들이 조율된 프로세스 내에서 협업하는 협동 AI 시스템을 정의할 수 있습니다.

6단계: 메인 스크립트 설정

이제 우리 crew를 실행할 메인 스크립트를 설정해 보겠습니다. 이곳에서 crew가 리서치할 구체적인 주제를 지정합니다.
#!/usr/bin/env python
# src/research_crew/main.py
import os
from research_crew.crew import ResearchCrew

# Create output directory if it doesn't exist
os.makedirs('output', exist_ok=True)

def run():
    """
    Run the research crew.
    """
    inputs = {
        'topic': 'Artificial Intelligence in Healthcare'
    }

    # Create and run the crew
    result = ResearchCrew().crew().kickoff(inputs=inputs)

    # Print the result
    print("\n\n=== FINAL REPORT ===\n\n")
    print(result.raw)

    print("\n\nReport has been saved to output/report.md")

if __name__ == "__main__":
    run()
이 스크립트는 환경을 준비하고, 리서치 주제를 지정하며, crew의 작업을 시작합니다. CrewAI의 강력함은 이 코드가 얼마나 간단한지에서 드러납니다. 여러 AI 에이전트를 관리하는 모든 복잡함이 프레임워크에 의해 처리됩니다.

7단계: 환경 변수 설정하기

프로젝트 루트에 .env 파일을 생성하고 API 키를 입력하세요:
SERPER_API_KEY=your_serper_api_key
# Add your provider's API key here too.
선택한 provider를 구성하는 방법에 대한 자세한 내용은 LLM 설정 가이드를 참고하세요. Serper API 키는 Serper.dev에서 받을 수 있습니다.

8단계: 필수 종속성 설치

CrewAI CLI를 사용하여 필요한 종속성을 설치하세요:
crewai install
이 명령어는 다음을 수행합니다:
  1. 프로젝트 구성에서 종속성을 읽어옵니다
  2. 필요하다면 가상 환경을 생성합니다
  3. 모든 필수 패키지를 설치합니다

9단계: Crew 실행하기

이제 흥미로운 순간입니다 - crew를 실행하여 AI 협업이 어떻게 이루어지는지 직접 확인해보세요!
crewai run
이 명령어를 실행하면 crew가 즉시 작동하는 모습을 볼 수 있습니다. researcher는 지정된 주제에 대한 정보를 수집하고, analyst가 그 연구를 바탕으로 종합 보고서를 작성합니다. 에이전트들의 사고 과정, 행동, 결과물이 실시간으로 표시되며 서로 협력하여 작업을 완수하는 모습을 확인할 수 있습니다.

10단계: 결과물 검토

crew가 작업을 완료하면, 최종 보고서는 output/report.md 파일에서 확인할 수 있습니다. 보고서에는 다음과 같은 내용이 포함됩니다:
  1. 요약 보고서
  2. 주제에 대한 상세 정보
  3. 분석 및 인사이트
  4. 권장사항 또는 향후 고려사항
지금까지 달성한 것을 잠시 돌아보세요. 여러분은 여러 AI 에이전트가 협업하여 각자의 전문적인 기술을 발휘함으로써, 단일 에이전트가 혼자서 이루어낼 수 있는 것보다 더 뛰어난 결과를 만들어내는 시스템을 구축한 것입니다.

기타 CLI 명령어 탐색

CrewAI는 crew 작업을 위한 몇 가지 유용한 CLI 명령어를 추가로 제공합니다:
# 모든 사용 가능한 명령어 보기
crewai --help

# crew 실행
crewai run

# crew 테스트
crewai test

# crew 메모리 초기화
crewai reset-memories

# 특정 task에서 재실행
crewai replay -t <task_id>

가능한 것의 예술: 당신의 첫 crew를 넘어서

이 가이드에서 구축한 것은 시작에 불과합니다. 여러분이 배운 기술과 패턴은 점점 더 정교한 AI 시스템을 만드는 데 적용할 수 있습니다. 다음은 이 기본 research crew를 확장할 수 있는 몇 가지 방법입니다:

팀원 확장하기

더 전문화된 에이전트를 팀원으로 추가할 수 있습니다:
  • 연구 결과를 검증하는 팩트체커
  • 차트와 그래프를 만드는 데이터 시각화 담당자
  • 특정 분야에 전문 지식을 가진 도메인 전문가
  • 분석의 약점을 파악하는 비평가

도구 및 기능 추가

에이전트에 추가 도구를 통해 기능을 확장할 수 있습니다:
  • 실시간 연구를 위한 웹 브라우징 도구
  • 데이터 분석을 위한 CSV/데이터베이스 도구
  • 데이터 처리를 위한 코드 실행 도구
  • 외부 서비스와의 API 연결

더 복잡한 워크플로우 생성

더 정교한 프로세스를 구현할 수 있습니다:
  • 매니저 에이전트가 워커 에이전트에게 위임하는 계층적 프로세스
  • 반복적 피드백 루프로 정제하는 반복 프로세스
  • 여러 에이전트가 동시에 작업하는 병렬 프로세스
  • 중간 결과에 따라 적응하는 동적 프로세스

다양한 도메인에 적용하기

동일한 패턴은 다음과 같은 분야에서 crew를 구성하는 데 적용할 수 있습니다:
  • 콘텐츠 제작: 작가, 에디터, 팩트체커, 디자이너가 함께 협업
  • 고객 서비스: 분류 담당자, 전문가, 품질 관리자가 함께 협업
  • 제품 개발: 연구원, 디자이너, 기획자가 협업
  • 데이터 분석: 데이터 수집가, 분석가, 시각화 전문가

다음 단계

이제 첫 crew를 구축했으니, 다음과 같은 작업을 시도해 볼 수 있습니다:
  1. 다양한 에이전트 구성 및 성격을 실험해 보세요
  2. 더 복잡한 작업 구조와 워크플로우를 시도해 보세요
  3. 맞춤 도구를 구현하여 에이전트에게 새로운 기능을 제공하세요
  4. crew를 다양한 주제나 문제 도메인에 적용해 보세요
  5. CrewAI Flows를 탐색하여 절차적 프로그래밍을 활용한 더 고급 워크플로우를 경험해 보세요
축하합니다! 이제 주어진 모든 주제를 조사하고 분석할 수 있는 첫 번째 CrewAI crew를 성공적으로 구축하셨습니다. 이 기본적인 경험은 협업 인텔리전스를 통해 복잡하고 다단계의 문제를 해결할 수 있는 점점 더 정교한 AI 시스템을 제작하는 데 필요한 역량을 갖추는 데 도움이 됩니다.