Crewai 흐름으로 AI 워크 플로를 간소화하십시오! 이 강력한 프레임 워크는 AI 에이전트 간의 상호 작용을 조정하기위한 구조화 된 패턴을 제공하므로 개발자는 강력한 AI 자동화를 위해 코딩 작업과 승무원을 완벽하게 통합 할 수 있습니다. Crewai의 에이전트 흐름은 AI 응용 프로그램 내에서 이벤트 중심의 워크 플로우, 작업 조정, 상태 관리 및 실행 제어를 단순화합니다.
목차
MovieRecommendationFlow
구축승무원은 무엇입니까?
Crewai의 승무원은 자동화 된 작업 완료를 위해 AI 에이전트의 오케스트레이션을 용이하게합니다. 이들은 에이전트 간의 원활한 협력을 가능하게하여 복잡한 문제를 해결합니다. 그러나 왜 "흐름"? Crewai Flow는 이러한 에이전트 상호 작용을 관리하기위한 구조화 된 패턴을 제공하기 때문에 에이전트가 특정 목표를 달성하기 위해 에이전트가 의사 소통하고 협력하는 방식을 정의합니다. 흐름은 본질적으로 일련의 작업이며, 한 작업의 출력이 다음 작업을 트리거 할 수 있습니다. 이 시스템은 상태 및 조건부 실행을위한 유연한 메커니즘을 제공합니다.
흐름 이해
흐름은 이벤트 중심 모델에서 작동하여 특정 트리거 및 조건에 반응합니다. 이를 통해 작업 실행 결과를 기반으로 동적 워크 플로 조정을 통해 복잡한 AI 프로세스를 간소화합니다.
Crewai 흐름을 통해 개발자는 작업 시퀀스를 구조화하고 작업 간 정보 흐름을 제어 할 수 있습니다. 작업을 함께 연결하여 논리적 인 운영 순서를 만듭니다. 사전 작업 출력을 기반으로 작업의 조건부 실행도 지원됩니다.
종종 Pydantic의 BaseModel
사용하는 구조화 된 상태 관리는 작업 간 데이터 일관성과 구조를 보장합니다. 이는 복잡한 데이터 상태의 유형 안전, 검증 및 더 쉬운 관리를 제공합니다.
흐름은 실행 중 언제라도 상태를 초기화하거나 업데이트하기위한 입력을 수락합니다. 워크 플로 요구에 따라 시작, 실행 중 또는 실행 후 입력을 제공 할 수 있습니다.
Crewai 흐름은 작업 결과에 따라 동적으로 조정됩니다. 작업은 이전 단계에서 출력을 듣고 이전 출력에 따라 새로운 작업이 트리거되는 반응 시스템을 만듭니다. @listen()
및 @router()
데코레이터는 이러한 유연성을 제공하여 조건부 및 동적 작업 링크를 가능하게합니다. @start()
데코레이터는 흐름의 시작점을 표시합니다.
데코레이터 및 조건부 논리 | 설명 |
@listen()
|
특정 이벤트 또는 작업 출력에 의해 트리거 된 리스너 메소드를 만듭니다. |
@router()
|
조건부 라우팅을 활성화하여 이전 단계 출력에 따라 다른 실행 경로를 허용합니다. 성공/실패 결과를 관리하는 데 유용합니다. |
지정된 모든 메소드가 출력을 방출 할 때만 리스너를 트리거합니다. |
흐름은 조건에 따라 실행을 제어하기 위해 라우팅을 사용합니다. @router()
데코레이터를 사용하면 메소드가 이전 작업 결과를 기반으로 실행 경로를 선택할 수 있습니다. 예를 들어, 메소드는 이전 작업의 출력을 확인하고 특정 조건이 충족되는지 여부에 따라 경로를 선택할 수 있습니다.
실제로 흐름 : 영화 추천 예제
장르를 기반으로 영화를 추천하기 위해 Crewai Flows를 사용하여 에이전트 시스템을 만들어 봅시다.
<code>!pip install crewai -U !pip install crewai-tools</code>
<code>import warnings warnings.filterwarnings('ignore')</code>
<code>import os os.environ["OPENAI_API_KEY"] = 'YOUR_OPENAI_API_KEY' os.environ['OPENAI_MODEL_NAME'] = 'gpt-4o-mini-2024-07-18' os.environ["SERPER_API_KEY"]='YOUR_SERPER_API_KEY'</code>
<code>from crewai import Agent, Task, Crew from crewai.flow.flow import listen, start, and_, or_, router from crewai_tools import SerperDevTool from crewai import Flow from pydantic import BaseModel</code>
모든 작업에 단일 에이전트가 사용됩니다. 이 에이전트는 Google 검색 도구를 사용합니다.
<code>movie_agent = Agent( role="Recommend popular movie specific to the genre", goal="Provide a list of movies based on user preferences", backstory="You are a cinephile, " "you recommend good movies to your friends, " "the movies should be of the same genre", tools=[SerperDevTool()], verbose=True )</code>
<code>action_task = Task(name="ActionTask", description="Recommends a popular action movie", expected_output="A list of 10 popular movies", agent=movie_agent) comedy_task = Task(name="ComedyTask", description="Recommends a popular comedy movie", expected_output="A list of 10 popular movies", agent=movie_agent) drama_task = Task(name="DramaTask", description="Recommends a popular drama movie", expected_output="A list of 10 popular movies", agent=movie_agent) sci_fi_task = Task(name="SciFiTask", description="Recommends a sci-fi movie", expected_output="A list of 10 popular movies", agent=movie_agent)</code>
<code>action_crew = Crew(agents=[movie_agent], tasks=[action_task], verbose=True) comedy_crew = Crew(agents=[movie_agent], tasks=[comedy_task], verbose=True) drama_crew = Crew(agents=[movie_agent], tasks=[drama_task], verbose=True) sci_fi_crew = Crew(agents=[movie_agent], tasks=[sci_fi_task], verbose=True)</code>
<code>GENRES = ["action", "comedy", "drama", "sci-fi"] class GenreState(BaseModel): genre: str = ""</code>
MovieRecommendationFlow
구축 이 클래스는 Flow
클래스에서 물려 받고 상태 기능을 사용합니다.
<code>class MovieRecommendationFlow(Flow[GenreState]): @start() def input_genre(self): genre = input("Enter a genre: ") print(f"Genre input received: {genre}") self.state.genre = genre return genre @router(input_genre) def route_to_crew(self): genre = self.state.genre if genre not in GENRES: raise ValueError(f"Invalid genre: {genre}") if genre == "action": return "action" elif genre == "comedy": return "comedy" elif genre == "drama": return "drama" elif genre == "sci-fi": return "sci-fi" @listen("action") def action_movies(self, genre): recommendations = action_crew.kickoff() return recommendations @listen("comedy") def comedy_movies(self, genre): recommendations = comedy_crew.kickoff() return recommendations @listen("drama") def drama_movies(self, genre): recommendations = drama_crew.kickoff() return recommendations @listen("sci-fi") def sci_fi_movies(self, genre): recommendations = sci_fi_crew.kickoff() return recommendations @listen(or_("action_movies", "comedy_movies", "drama_movies", "sci_fi_movies")) def finalize_recommendation(self, recommendations): print("Final movie recommendations:") return recommendations</code>
@listen
, @router
, or_
및 @start
데코레이터는 흐름의 실행을 관리합니다.
<code>flow = MovieRecommendationFlow() flow.plot() #This will generate a file, you'll need to display it separately (eg, using an image display function in your environment)</code>
<code>recommendations = await flow.kickoff_async()</code>
결론
Crewai의 이벤트 중심 워크 플로는 AI 작업 오케스트레이션을 단순화합니다. @listen()
, @router()
및 주 관리와 같은 기능과 결합 된 Crewai Flows의 유연하고 적응적인 특성은 효율적이고 동적 AI 애플리케이션을 구축하기위한 강력한 도구를 만듭니다.
자주 묻는 질문
Q1. 입력을 흐름으로 어떻게 전달합니까? flow.kickoff(inputs={"counter": 10})
.
Q2. @start()
와 @listen()
의 차이점은 무엇입니까? @start()
마크 흐름 시작점; @listen()
마크 작업 완료에 의해 트리거 된 메소드.
Q3. 내 흐름을 어떻게 시각화합니까? flow.plot()
사용하십시오.
Q4. 인간의 피드백을 통합 할 수 있습니까? 예, Crewai Flows는 인간의 루프 피드백을 지원합니다.
위 내용은 Crewai의 에이전트 흐름은 무엇입니까? - 분석 Vidhya의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!