크루(Crew)란 무엇인가?
크루(Crew)는 crewAI에서 여러 에이전트가 협력하여 일련의 작업을 수행하는 협업 그룹을 의미한다. 각 크루는 작업 실행 전략, 에이전트 간 협업 방식, 그리고 전체 워크플로우를 정의한다.크루 속성
크루 생성하기
CrewAI에서 크루를 생성하는 방법은 두 가지가 있다: YAML 설정 파일 사용(권장) 또는 코드에서 직접 정의하는 방법이다.YAML 설정 (권장)
YAML 설정을 사용하면 크루를 정의하는 더 깔끔하고 유지보수하기 쉬운 방법을 제공하며, CrewAI 프로젝트에서 에이전트와 태스크를 정의하는 방식과 일관성을 유지한다. 설치 섹션에서 설명한 대로 CrewAI 프로젝트를 생성한 후,CrewBase를 상속받는 클래스에서 크루를 정의하고 데코레이터를 사용해 에이전트, 태스크, 그리고 크루 자체를 정의할 수 있다.
데코레이터를 활용한 Crew 클래스 예제
태스크는 정의된 순서대로 실행된다.
CrewBase 클래스와 이 데코레이터들은 에이전트와 태스크를 자동으로 수집해 관리 작업을 줄여준다.
annotations.py의 데코레이터 개요
CrewAI는 annotations.py 파일에 여러 데코레이터를 제공한다. 이 데코레이터들은 여러분의 crew 클래스 내부의 메서드에 특별한 처리를 위해 사용된다:
@CrewBase: 클래스를 crew 베이스 클래스로 표시한다.@agent:Agent객체를 반환하는 메서드를 나타낸다.@task:Task객체를 반환하는 메서드를 나타낸다.@crew:Crew객체를 반환하는 메서드를 나타낸다.@before_kickoff: (선택 사항) crew가 시작되기 전에 실행될 메서드를 표시한다.@after_kickoff: (선택 사항) crew가 종료된 후에 실행될 메서드를 표시한다.
직접 코드로 정의하기 (대안)
YAML 설정 파일을 사용하지 않고 코드 내에서 직접 크루를 정의할 수도 있다.- 에이전트와 태스크를 데코레이터 없이 클래스 내에서 직접 정의한다.
- 에이전트와 태스크 리스트를 수동으로 생성하고 관리한다.
- 이 방식은 더 많은 제어권을 제공하지만, 대규모 프로젝트에서는 유지보수가 어려울 수 있다.
CrewAI 프레임워크의 Crew Output
CrewAI 프레임워크에서 크루의 출력은CrewOutput 클래스로 캡슐화된다. 이 클래스는 크루 실행 결과에 접근할 수 있는 구조화된 방식을 제공하며, 원시 문자열, JSON, Pydantic 모델 등 다양한 형식의 결과를 포함한다. CrewOutput은 최종 작업의 출력 결과, 토큰 사용량, 그리고 각 작업의 개별 출력 결과를 담고 있다.
크루 출력 속성
Crew 출력 메서드와 속성
크루 실행 결과 접근하기
크루를 실행한 후, 그 결과는Crew 객체의 output 속성을 통해 접근할 수 있다. CrewOutput 클래스는 이 결과를 다양한 방식으로 상호작용하고 표시하는 방법을 제공한다.
예제
크루 실행 로그 접근
output_log_file을 True(불리언) 또는 file_name(문자열)로 설정하면 크루 실행 로그를 실시간으로 확인할 수 있다. 이벤트 로그는 file_name.txt와 file_name.json 두 가지 형식으로 저장된다.
True(불리언)로 설정하면 logs.txt 파일로 저장된다.
output_log_file이 False(불리언) 또는 None으로 설정되면 로그가 저장되지 않는다.
메모리 활용
크루는 단기, 장기, 엔티티 메모리를 활용해 시간이 지남에 따라 실행과 학습을 개선할 수 있다. 이 기능을 통해 크루는 실행 메모리를 저장하고 불러올 수 있어 의사결정과 작업 실행 전략에 도움을 준다.캐시 활용
캐시는 도구 실행 결과를 저장하는 데 사용할 수 있다. 이를 통해 동일한 작업을 다시 실행할 필요가 줄어들어 전체 프로세스의 효율성을 높일 수 있다.크루 사용 메트릭
크루 실행이 완료되면,usage_metrics 속성을 통해 모든 작업에서 사용된 언어 모델(LLM)의 사용 메트릭을 확인할 수 있다. 이를 통해 운영 효율성과 개선이 필요한 부분을 파악할 수 있다.
크루 실행 프로세스
- 순차적 프로세스: 작업을 하나씩 순서대로 실행하여 선형적인 작업 흐름을 유지한다.
- 계층적 프로세스: 매니저 에이전트가 크루를 조율하고 작업을 위임한 후 결과를 검증한다. 참고: 이 프로세스에는
manager_llm또는manager_agent가 필요하며, 프로세스 흐름을 검증하는 데 필수적이다.
크루 작업 시작하기
크루가 구성되면kickoff() 메서드를 사용해 워크플로우를 시작한다. 이 메서드는 정의된 프로세스 흐름에 따라 작업 실행을 시작한다.
크루 작업 시작 방법
크루를 구성한 후, 적절한 방법으로 작업 흐름을 시작한다. CrewAI는 작업 시작 과정을 더 잘 제어할 수 있도록 여러 메서드를 제공한다:kickoff(), kickoff_for_each(), kickoff_async(), kickoff_for_each_async().
kickoff(): 정의된 프로세스 흐름에 따라 실행을 시작한다.kickoff_for_each(): 제공된 입력 이벤트나 컬렉션의 각 항목에 대해 순차적으로 작업을 실행한다.kickoff_async(): 비동기적으로 작업 흐름을 시작한다.kickoff_for_each_async(): 제공된 입력 이벤트나 컬렉션의 각 항목에 대해 비동기 처리를 활용해 동시에 작업을 실행한다.
특정 작업부터 재실행하기
이제 CLI 커맨드replay를 사용해 특정 작업부터 재실행할 수 있다.
CrewAI의 재실행 기능은 커맨드라인 인터페이스(CLI)를 통해 특정 작업부터 재실행할 수 있게 해준다. crewai replay -t <task_id> 커맨드를 실행하면 재실행할 task_id를 지정할 수 있다.
Kickoffs는 이제 최신 kickoffs에서 반환된 작업 결과를 로컬에 저장하여 재실행할 수 있도록 한다.
특정 작업부터 다시 실행하기 (CLI 사용)
다시 실행 기능을 사용하려면 다음 단계를 따르면 된다.- 터미널이나 커맨드라인을 연다.
- CrewAI 프로젝트가 있는 디렉토리로 이동한다.
- 다음 명령어를 실행한다:
