데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      CrewAI: 독립된 멀티 에이전트 협업 프로세스 구축

      xipert 26.01.06
      2,578 3 1
      DEVOTEE 요약
      CrewAI는 다른 프레임워크에 의존하지 않고 독립적으로 사용 가능한 Python 기반의 AI 에이전트 프레임워크입니다. CrewAI의 주요 구성 요소는 특정 역할과 목표를 가진 AI 에이전트와 이들이 수행할 작업(Task), 외부 리소스를 활용할 도구(Tools), 그리고 작업 진행 방식을 관리하는 프로세스(Process)입니다. 예를 들어, 'AI 전문 어시스턴트'라는 역할의 에이전트를 생성하고, '사용자에게 인사 제공'이라는 Task를 지정하여 Crew로 묶으면, Crew가 순차적으로 이 Task를 수행해 결과를 출력하게 됩니다.
      DEVOTEE 추천 블로그

      안녕하세요.

      SK AX 의 송영목 매니저입니다.


      CrewAI 는 LangChain 이나 기타 agent 프레임워크에 의존하지 않고, 완전히 독립적으로 개발 가능한 Python 프레임워크입니다.


      1. 핵심 구성 요소

      • 에이전트(Agents) : 특정 역할(Role)과 목표(Goal), 배경 설정(Backstory)을 가진 가상의 팀원. 예를 들어, '시장 조사 전문가','항공권 예약 담당자' 등의 역할을 부여받습니다.

      • 작업(Task) : 에이전트가 수행해야 할 구체적인 과제입니다. 실행에 필요한 도구와 기대 결과물(Expected Output)을 정의합니다.

      • 도구(Tools) : 에이전트가 검색, 데이터 분석, 파일 작성 등을 위해 사용하는 외부 API나 기능입니다.

      • 프로세스(Process) : 작업의 진행 방식(순차적, 계층적 등)을 결정합니다. 에이전트 간의 협업 방식과 작업 위임 흐름을 관리합니다.

      image.png

      구성 요소

      설명

      주요 특징

      Crew

      최상위 조직

      - AI agent 팀 관리 / workflow 감독 / 협업 보장 / 결과 전달

      AI agents

      전문 팀원

      - 특정 역할 보유(Researcher, Writer 등) / 지정된 도구 사용 / 작업 위임 가능 / 자율적 의사결정 기능

      Process

      workflow 관리 시스템

      - 협업 패턴 정의 / 작업 할당 제어 / 상호작용 관리 / 효율적 실행 보장

      Task

      개별 할당

      - 명확한 목표 보유 / 특정 도구 사용 / 더 큰 프로세스에 기여 / 실행 가능한 결과 도출


      2. 실습 환경

      • Python : 3.x (VS Code)

      • CrewAI 라이브러리 및 필요 패키지 설치: pip install crewai python-dotenv

      • OpenAI API 키 발급 및 환경 설정:

        프로젝트 디렉토리에 .env 파일을 생성하고 OPENAI_API_KEY 저장

        OPENAI_API_KEY=your-key


      3. 설명

      1) Agent 생성

      • role: 에이전트의 역할이나 직책을 정의

      • goal: 에이전트가 궁극적으로 달성해야 할 목표임.

        "사용자에게 AI 전문 어시스턴트에 맞는 인사를 제공"로 설정하여, 이 에이전트의 목표는 사용자에게 환영 메시지를 제공하는 것으로 명시하였습니다.

      • backstory: 에이전트의 배경 이야기나 성격을 서술함.

        에이전트의 말투나 행동 방식에 영향을 주는 설정이며, 입니다. "당신은 친절한 AI 전문 비서로, 언제나 정중하고 도움이 되는 AI 정보를 전달합니다."라고 정의하여, 이 에이전트가 항상 친절하게 정보를 전달하도록 하였습니다.

      # 1. Agent 생성: role, goal, backstory 설정
      agent = Agent(
          role="AI 전문 어시스턴트",            # 에이전트의 역할
          goal="사용자에게 AI 전문 어시스턴트에 맞는 인사를 제공",  # 에이전트가 달성할 목표
          backstory="당신은 친절한 AI 전문 비서로, 언제나 정중하고 도움이 되는 AI 정보를 전달합니다."  # 에이전트의 성격/배경
      )

      2) Task 생성

      • description: 에이전트가 수행할 작업 지시를 서술합니다.

        "사용자에게 AI 전문 어시스턴트로써 인사 한 마디를 해 주세요."라고 명령하여, AI 모델에게 전달되는 프롬프트의 핵심 내용으로 전달됩니다.

      • expected_output:: 기대하는 출력 결과 형태를 설명.

        "한 줄의 환영 메시지"라고 작성하여, 결과가 어떻게 나오길 원하는지를 설명합니다.

        이 필드는 주로 개발자나 사용자가 결과물을 예상하는 데 도움을 줍니다.

      • agent:: 이 작업을 어떤 에이전트가 수행할지를 지정

      # 2. Task 생성: description, expected_output, agent 지정
      task = Task(
          description="사용자에게 AI 전문 어시스턴트로써 인사 한 마디를 해 주세요.",   # 에이전트가 수행할 작업 내용
          expected_output="한 줄의 환영 메시지",            # 기대하는 출력 결과물
          agent=agent                                    # 이 태스크를 수행할 에이전트
      )

      3) Crew 생성 (에이전트와 Task로만 Crew 생성)

      Crew는 하나 이상의 에이전트와 하나 이상의 태스크를 묶어 하나의 팀이나 프로젝트로 구성한 것입니다.

      Crew 객체에는 작업을 수행할 에이전트 목록, 해결해야 할 태스크 목록, 그리고 태스크들을 어떻게 진행할지 결정하는 프로세스(Process) 전략이 포함됩니다:

      • agents=[agent]: 이 Crew에 소속된 에이전트 리스트를 지정

      • tasks=[task]: Crew가 수행할 태스크들의 리스트를 지정

      • process=Process.sequential: 프로세스는 Crew가 태스크를 실행하는 방식이나 전략을 정의.Process.sequential로 지정하면 태스크들을 순차적으로 실행함. 즉, tasks 리스트에 주어진 순서대로 하나씩 차례로 수행합니다.

      • verbose=True: 실행 과정을 자세히 출력할지 여부를 설정.

        True로 설정하면 에이전트가 작업을 수행하면서 주고받는 메시지나 내부 로그를 콘솔에 상세히 출력합니다.

      # 3. Crew 생성: 에이전트와 태스크를 크루로 구성 (순차 프로세스 설정)
      crew = Crew(
          agents=[agent],             # 크루에 속한 에이전트 목록 (여기서는 1개, 단일 에이전트)
          tasks=[task],               # 크루가 수행할 태스크 목록 (여기서는 1개)
          process=Process.sequential, # 순차적 진행 방식으로 태스크 실행
          verbose=True                # 실행 중 상세한 로그 출력 여부
      )

      4)Crew 실행 및 결과 출력

      # 4. Crew 실행: kickoff() 메서드로 태스크 수행 시작
      result = crew.kickoff()
      
      # 5. 실행 결과 출력
      print("최종 결과:", result)

      5)간단한 에이전트 협업 (Researcher & Writer 에이전트)

      5-1) 에이전트 정의 (연구원과 작가 역할)

      두 개의 Agent를 정의하고, 각 에이전트에게 서로 다른 역할과 목표를 정의하고, 협업을 위해 순차적으로 사용함.

      # 2. 에이전트 정의 (연구원, 작가)
      researcher = Agent(
          role="AI Researcher",
          goal="피지컬 AI 에이전트의 주요 장점을 5가지 조사하여 설명합니다.",
          backstory="AI를 연구해온 전문가입니다."
      )
      
      writer = Agent(
          role="Technical Writer",
          goal="연구 결과를 바탕으로 간략한 결론을 작성합니다.",
          backstory="복잡한 정보를 쉽게 요약하는 기술 요약 전문가입니다."
      )

      5-2) 태스크 정의 및 연계 설정

      두 에이전트에게 각각 할 일을 부여하는 Task를 정의하고, 첫 번째 태스크는 AI Researcher 에이전트가 수행할 작업이고, 두 번째 태스크는 Technical Writer 에이전트가 수행할 작업입니다.

      특히 두 번째 태스크에는 첫 번째 태스크의 결과를 참고하도록 컨텍스트를 전달합니다.

      # 3. 태스크 정의 (조사 태스크, 작성 태스크)
      research_task = Task(
          description="피지컬 AI 에이전트 시스템의 주요 장점 5가지를 조사하고 각 장점을 간략히 설명하세요.",
          expected_output="5가지 장점에 대한 간단한 설명 (bullet point 목록)",
          agent=researcher
      )
      
      write_task = Task(
          description="위 조사 결과를 참고하여, 피지컬 AI 에이전트 시스템의 장점에 대한 짧은 결론을 작성하세요.",
          expected_output="3~4문장으로 구성하고 결론으로 마무리",
          agent=writer,
          context=[research_task]  # 이전 태스크의 결과를 활용
      )

      5-3) Crew 생성 (에이전트 팀 구성 및 프로세스 설정)

      두 에이전트와 두 태스크를 종합하여 하나의 Crew로 구성.

      # 4. 크루 생성 (순차적 프로세스 설정)
      crew = Crew(
          agents=[researcher, writer],
          tasks=[research_task, write_task],
          process=Process.sequential,
          verbose=True
      )

      5-4) Crew 실행 및 결과 출력

      # 5. 크루 실행 및 결과 출력
      crew_output = crew.kickoff()
      
      # 6. 각 태스크의 결과를 순차적으로 출력
      for idx, task_output in enumerate(crew_output.tasks_output, start=1):
          print(f"\n[Task {idx} Output]\n{task_output}\n")


      4. 단일 에이전트 샘플 소스 및 결과

      # CrewAI 기본 구조 실습: 단일 에이전트로 환영 인사 생성
      # Agent, Task, Crew의 기본 동작 확인
      
      from crewai import Agent, Task, Crew, Process
      from dotenv import load_dotenv
      import os
      
      # 0. 환경 변수 로드 (.env에서 OPENAI_API_KEY 불러오기)
      load_dotenv()  # .env 파일에 정의된 환경변수를 로드합니다.
      # OPENAI_API_KEY가 환경변수로 설정되었다면, openai 패키지가 이를 자동으로 사용합니다.
      
      # 1. Agent 생성: role, goal, backstory 설정
      agent = Agent(
          role="AI 전문 어시스턴트",            # 에이전트의 역할
          goal="사용자에게 AI 전문 어시스턴트에 맞는 인사를 제공",  # 에이전트가 달성할 목표
          backstory="당신은 친절한 AI 전문 비서로, 언제나 정중하고 도움이 되는 AI 정보를 전달합니다."  # 에이전트의 성격/배경
      )
      
      # 2. Task 생성: description, expected_output, agent 지정
      task = Task(
          description="사용자에게 AI 전문 어시스턴트로써 인사 한 마디를 해 주세요.",   # 에이전트가 수행할 작업 내용
          expected_output="한 줄의 환영 메시지",            # 기대하는 출력 결과물
          agent=agent                                    # 이 태스크를 수행할 에이전트
      )
      
      # 3. Crew 생성: 에이전트와 태스크를 크루로 구성 (순차 프로세스 설정)
      crew = Crew(
          agents=[agent],             # 크루에 속한 에이전트 목록 (여기서는 1개, 단일 에이전트)
          tasks=[task],               # 크루가 수행할 태스크 목록 (여기서는 1개)
          process=Process.sequential, # 순차적 진행 방식으로 태스크 실행
          verbose=True                # 실행 중 상세한 로그 출력 여부
      )
      
      # 4. Crew 실행: kickoff() 메서드로 태스크 수행 시작
      result = crew.kickoff()
      
      # 5. 실행 결과 출력
      print("최종 결과:", result)

      image.png


      5. CrewAI 멀티 에이전트 샘플 소스 및 결과

      # CrewAI 멀티 에이전트 협업 실습: 연구원-작가 협업으로 멀티에이전트 장점 분석
      # 태스크 간 컨텍스트 연계 및 순차 실행 확인
      
      import os
      from dotenv import load_dotenv
      from crewai import Agent, Task, Crew, Process
      
      # 1. .env 파일에서 OpenAI API 키 불러오기
      load_dotenv()
      openai_api_key = os.getenv('OPENAI_API_KEY')
      if openai_api_key is None:
          raise EnvironmentError("OPENAI_API_KEY is not set in .env file. Please add your OpenAI API key to .env.")
      
      # 2. 에이전트 정의 (연구원, 작가)
      researcher = Agent(
          role="AI Researcher",
          goal="피지컬 AI 에이전트의 주요 장점을 5가지 조사하여 설명합니다.",
          backstory="AI를 연구해온 전문가입니다."
      )
      
      writer = Agent(
          role="Technical Writer",
          goal="연구 결과를 바탕으로 간략한 결론을 작성합니다.",
          backstory="복잡한 정보를 쉽게 요약하는 기술 요약 전문가입니다."
      )
      
      # 3. 태스크 정의 (조사 태스크, 작성 태스크)
      research_task = Task(
          description="피지컬 AI 에이전트 시스템의 주요 장점 5가지를 조사하고 각 장점을 간략히 설명하세요.",
          expected_output="5가지 장점에 대한 간단한 설명 (bullet point 목록)",
          agent=researcher
      )
      
      write_task = Task(
          description="위 조사 결과를 참고하여, 피지컬 AI 에이전트 시스템의 장점에 대한 짧은 결론을 작성하세요.",
          expected_output="3~4문장으로 구성하고 결론으로 마무리",
          agent=writer,
          context=[research_task]  # 이전 태스크의 결과를 활용
      )
      
      # 4. 크루 생성 (순차적 프로세스 설정)
      crew = Crew(
          agents=[researcher, writer],
          tasks=[research_task, write_task],
          process=Process.sequential,
          verbose=True
      )
      
      # 5. 크루 실행 및 결과 출력
      crew_output = crew.kickoff()
      
      # 6. 각 태스크의 결과를 순차적으로 출력
      for idx, task_output in enumerate(crew_output.tasks_output, start=1):
          print(f"\n[Task {idx} Output]\n{task_output}\n")

      image.png


      참조

      https://docs.crewai.com/

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      xipert 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기