CrewAI 멀티 에이전트 시스템을 활용한 자동화 워크플로우 구축

CrewAI 개요

CrewAI는 다중 AI 에이전트 간의 협업을 조정하기 위해 설계된 파이썬 프레임워크입니다. 각 에이전트에게 명확한 역할, 목표, 도구를 부여하고 이들 간의 작업 위임 및 상호작용을 정의하여 복잡한 비즈니스 로직을 자동화할 수 있습니다. 단순 챗봇 이상의 전문성을 요구하는 데이터 분석, 리서치 보고서 작성, 소프트웨어 품질 보증 등의 영역에서 특히 강력한 성능을 발휘합니다.

핵심 구성 요소

  • Agent: 특정 페르소나, 목표, 배경 서사를 가진 독립적 의사결정 주체입니다.
  • Task: 에이전트가 실행해야 할 구체적인 작업 단위입니다.
  • Crew: 에이전트와 태스크를 묶어 협업 환경을 조성하는 조직입니다.
  • Process: 태스크가 수행되는 전략(순차, 병렬, 계층형)을 결정합니다.
  • Tool: 에이전트가 외부 데이터를 조회하거나 기능을 실행할 때 사용하는 인터페이스입니다.

멀티 에이전트 리서치 시스템 구현

from crewai import Agent, Task, Crew, Process
from langchain_openai import ChatOpenAI
from langchain_community.tools import DuckDuckGoSearchRun

llm_model = ChatOpenAI(model="gpt-4o")
web_search = DuckDuckGoSearchRun()

# 전문가 에이전트 정의
analyst = Agent(
    role="수석 기술 분석가",
    goal="최신 기술 트렌드 심층 조사 및 데이터 수집",
    backstory="당신은 복잡한 기술 스택을 빠르게 습득하고 체계적으로 정리하는 전문가입니다.",
    tools=[web_search],
    llm=llm_model
)

editor = Agent(
    role="기술 블로그 편집장",
    goal="분석 결과를 사용자 친화적인 글로 변환",
    backstory="당신은 난해한 기술적 내용을 쉬운 언어로 풀어내는 데 탁월한 능력을 갖추고 있습니다.",
    llm=llm_model
)

# 업무 정의
analysis_work = Task(
    description="{topic}에 관한 최신 핵심 동향과 주요 활용 사례를 정리하세요.",
    expected_output="기술 트렌드 분석 보고서",
    agent=analyst
)

writing_work = Task(
    description="제공된 분석 보고서를 바탕으로 초보자용 가이드를 작성하세요.",
    expected_output="기술 블로그 포스트",
    agent=editor,
    context=[analysis_work]
)

# 팀 구성 및 실행
tech_crew = Crew(
    agents=[analyst, editor],
    tasks=[analysis_work, writing_work],
    process=Process.sequential
)

output = tech_crew.kickoff(inputs={"topic": "Agentic Workflow"})
print(output)

고급 활용: 계층형 프로세스 제어

계층형 프로세스를 사용하면 매니저 에이전트가 하위 에이전트들에게 업무를 위임하는 구조를 구축할 수 있습니다.

manager = Agent(
    role="프로젝트 총괄 매니저",
    goal="팀원들에게 태스크를 배분하고 전체적인 품질을 관리",
    backstory="조직의 효율성을 극대화하는 지휘관입니다.",
    allow_delegation=True # 위임 권한 부여
)

# 업무 흐름 실행
project_crew = Crew(
    agents=[manager, dev_team, qa_expert],
    tasks=[dev_task],
    process=Process.hierarchical
)

맞춤형 도구 개발 및 확장

CrewAI의 도구 시스템은 BaseTool을 상속받아 쉽게 확장할 수 있습니다.

from crewai.tools import BaseTool

class StaticAnalyzerTool(BaseTool):
    name: str = "코드 정적 분석기"
    description: str = "소스 코드 내 잠재적인 버그를 탐색합니다."

    def _run(self, query: str) -> str:
        # 코드 분석 로직 수행
        if "eval" in query:
            return "보안 경고: eval 함수가 탐지되었습니다."
        return "코드 분석 결과: 안전함"

운영 베스트 프랙티스

  • 단일 책임 원칙: 에이전트당 하나의 명확한 전문 역할을 부여하세요.
  • 적절한 흐름 선택: 단순 반복 작업은 순차적 프로세스로, 독립적인 기능 검증은 병렬 프로세스로 설계하세요.
  • 무한 루프 방지: 에이전트 설정 시 max_iter 옵션을 지정하여 리소스 고갈을 방지하세요.
  • 도구 최적화: 에이전트가 혼동하지 않도록 딱 필요한 도구들만 할당하세요.

태그: CrewAI LLM Multi-Agent python AI-Automation

7월 22일 10:23에 게시됨