CrewAI Flows를 사용하여 AI 워크플로우를 생성하고 관리하는 방법을 알아보세요.
generate_city
와 generate_fun_fact
라는 두 가지 작업으로 구성되어 있습니다. generate_city
작업이 Flow의 시작점이며, generate_fun_fact
작업이 generate_city
작업의 출력을 감지합니다.
각 Flow 인스턴스는 상태(state)에 자동으로 고유 식별자(UUID)를 부여 받아, 흐름 실행을 추적하고 관리하는 데 도움이 됩니다. 상태에는 실행 중에 유지되는 추가 데이터(예: 생성된 도시와 재미있는 사실)도 저장할 수 있습니다.
Flow를 실행하면 다음과 같은 과정을 따릅니다:
OPENAI_API_KEY
를 .env
파일에 설정해야 합니다. 이 키는 필수입니다.
@start()
데코레이터는 메서드를 Flow의 시작 지점으로 표시하는 데 사용됩니다. Flow가 시작되면 @start()
로 데코레이트된 모든 메서드가 병렬로 실행됩니다. 하나의 Flow에서 여러 개의 start 메서드를 가질 수 있으며, Flow가 시작될 때 이들은 모두 실행됩니다.
@listen()
데코레이터는 Flow 내에서 다른 태스크의 출력을 수신하는 리스너로 메서드를 표시하는 데 사용됩니다. @listen()
으로 데코레이션된 메서드는 지정된 태스크가 출력을 내보낼 때 실행됩니다. 이 메서드는 자신이 리스닝하고 있는 태스크의 출력을 인자로 접근할 수 있습니다.
@listen()
데코레이터는 여러 가지 방법으로 사용할 수 있습니다:
kickoff()
메서드는 이 마지막 메서드의 결과를 반환합니다.
최종 출력값을 확인하는 방법은 다음과 같습니다:
second_method
가 마지막으로 완료된 메서드이므로, 해당 메서드의 결과가 Flow의 최종 출력값이 됩니다.kickoff()
메서드는 이 최종 출력값을 반환하며, 이 값은 콘솔에 출력됩니다.plot()
메서드는 HTML 파일을 생성하며, 이를 통해 flow를 쉽게 이해할 수 있습니다.
first_method
와 second_method
모두에 의해 업데이트됩니다.
Flow가 실행된 후, 이러한 메소드들에 의해 수행된 업데이트 내용을 확인하려면 최종 상태에 접근할 수 있습니다.
최종 메소드의 출력이 반환되고 상태에 접근할 수 있도록 함으로써, CrewAI Flow는 AI 워크플로우의 결과를 더 큰 애플리케이션이나 시스템에 쉽게 통합할 수 있게 하며,
Flow 실행 과정 전반에 걸쳐 상태를 유지하고 접근하면서도 이를 용이하게 만듭니다.
Flow
클래스의 state
속성에 저장됩니다.id
필드는 흐름의 실행 전체에 걸쳐 자동으로 생성되어 보존됩니다. 이를 직접 관리하거나 설정할 필요가 없으며, 새로운 데이터로 상태를 업데이트할 때도 자동으로 유지됩니다.
핵심 포인트:
self.state
에 미리 정해진 제약 없이 속성을 동적으로 추가할 수 있습니다.BaseModel
과 같은 모델을 사용하면 상태의 정확한 형태를 정의할 수 있어, 개발 환경에서 더 나은 검증 및 자동 완성이 가능합니다.
CrewAI Flows의 각 상태는 인스턴스 추적 및 관리를 돕기 위해 자동으로 고유 식별자(UUID)를 할당받습니다. 이 ID는 Flow 시스템에 의해 자동으로 생성되고 관리됩니다.
ExampleState
는 상태 구조를 명확히 정의하여 코드 가독성과 유지보수성을 향상시킵니다.id
필드는 존재하지 않을 경우 자동으로 추가됩니다or
or_
함수는 여러 메서드를 감지하고 지정된 메서드 중 하나에서 출력이 발생하면 리스너 메서드를 트리거합니다.
logger
메서드는 start_method
또는 second_method
의 출력에 의해 트리거됩니다.or_
함수는 여러 메서드를 감지하고 지정된 메서드 중 하나에서 출력이 발생하면 리스너 메서드를 트리거하는 데 사용됩니다.
and
and_
함수는 여러 메서드를 리슨하고, 지정된 모든 메서드가 출력을 발생시킬 때만 리스너 메서드가 트리거되도록 합니다.
logger
메서드는 start_method
와 second_method
가 모두 출력을 발생시켰을 때만 트리거됩니다.and_
함수는 여러 메서드를 리슨하고, 지정된 모든 메서드가 출력을 발생시킬 때만 리스너 메서드를 트리거하는 데 사용됩니다.
@router()
데코레이터를 사용하면 메서드의 출력값에 따라 조건부 라우팅 로직을 정의할 수 있습니다.start_method
는 랜덤 불리언 값을 생성하여 state에 저장합니다.second_method
는 @router()
데코레이터를 사용해 불리언 값에 따라 조건부 라우팅 로직을 정의합니다.True
이면 메서드는 "success"
를 반환하고, False
이면 "failed"
를 반환합니다.third_method
와 fourth_method
는 second_method
의 출력값을 기다렸다가 반환된 값에 따라 실행됩니다.
이 Flow를 실행하면, start_method
에서 생성된 랜덤 불리언 값에 따라 출력값이 달라집니다.
MarketAnalysis
)을 정의함으로써 플로우 전체에서 타입 안정성과 구조화된 데이터를 보장합니다.
MarketResearchState
)는 단계 간의 컨텍스트를 유지하고 입력과 출력을 모두 저장합니다.
WebsiteSearchTool
과 같은 도구를 사용할 수 있습니다.
poem_crew
가 포함되어 있습니다. 이 crew를 템플릿으로 사용하여 복사, 붙여넣기, 수정함으로써 다른 crew를 만들 수 있습니다.
crewai create flow name_of_flow
명령을 실행하면 다음과 유사한 폴더 구조를 볼 수 있습니다:
디렉터리/파일 | 설명 |
---|---|
name_of_flow/ | flow의 루트 디렉터리입니다. |
├── crews/ | 특정 crew에 대한 디렉터리를 포함합니다. |
│ └── poem_crew/ | ”poem_crew”의 설정 및 스크립트가 포함된 디렉터리입니다. |
│ ├── config/ | ”poem_crew”의 설정 파일 디렉터리입니다. |
│ │ ├── agents.yaml | ”poem_crew”의 agent를 정의하는 YAML 파일입니다. |
│ │ └── tasks.yaml | ”poem_crew”의 task를 정의하는 YAML 파일입니다. |
│ ├── poem_crew.py | ”poem_crew”의 기능을 위한 스크립트입니다. |
├── tools/ | flow에서 사용되는 추가 도구를 위한 디렉터리입니다. |
│ └── custom_tool.py | 사용자 정의 도구 구현 파일입니다. |
├── main.py | flow를 실행하는 메인 스크립트입니다. |
├── README.md | 프로젝트 설명 및 안내 문서입니다. |
├── pyproject.toml | 프로젝트의 종속성 및 설정을 위한 구성 파일입니다. |
└── .gitignore | 버전 관리에서 무시할 파일과 디렉터리를 지정합니다. |
crews
폴더에서는 여러 개의 크루를 정의할 수 있습니다. 각 크루는 자체 폴더를 가지며, 설정 파일과 크루 정의 파일을 포함합니다. 예를 들어, poem_crew
폴더에는 다음과 같은 파일이 있습니다:
config/agents.yaml
: 크루의 agent를 정의합니다.config/tasks.yaml
: 크루의 task를 정의합니다.poem_crew.py
: agent, task, 그리고 크루 자체를 포함한 crew 정의가 들어 있습니다.poem_crew
를 복사, 붙여넣기, 그리고 편집하여 다른 크루를 생성할 수 있습니다.
main.py
에서 Crew 연결하기main.py
파일은 flow를 생성하고 crew들을 서로 연결하는 곳입니다. Flow
클래스를 사용하고, @start
와 @listen
데코레이터를 사용하여 실행 흐름을 지정하여 flow를 정의할 수 있습니다.
다음은 main.py
파일에서 poem_crew
를 연결하는 예제입니다:
PoemFlow
클래스는 문장 수를 생성하고, PoemCrew
를 사용하여 시를 생성한 후, 시를 파일에 저장하는 flow를 정의합니다. 이 flow는 kickoff()
메서드를 호출하여 시작됩니다. plot()
메서드로 PoemFlowPlot이 생성됩니다.
plot()
메서드 사용하기plot()
메서드를 호출하여 플롯을 생성할 수 있습니다. 이 메서드는 flow의 인터랙티브 플롯이 포함된 HTML 파일을 생성합니다.
my_flow_plot.html
이라는 파일이 생성됩니다. 이 파일을 웹 브라우저에서 열어 인터랙티브 플롯을 볼 수 있습니다.
plot()
메서드와 유사합니다. 파일은 프로젝트 디렉터리에 저장되며, 웹 브라우저에서 열어 플로우를 탐색할 수 있습니다.
plot()
메서드나 커맨드 라인 중 어떤 방법을 사용하더라도, 플롯을 생성하면 워크플로우의 시각적 표현을 얻을 수 있어 개발과 발표 모두에 도움이 됩니다.
kickoff()
메서드를 호출하면 됩니다:
crewai run
명령어를 사용하여 flow를 실행할 수 있습니다:
type = "flow"
설정을 기반으로 flow인지 자동으로 감지하여 해당 방식으로 실행합니다. 명령줄에서 flow를 실행하는 권장 방법입니다.
하위 호환성을 위해 다음 명령어도 사용할 수 있습니다:
crewai run
명령어가 이제 crew와 flow 모두에 작동하므로 더욱 선호되는 방법입니다.