ホームページ >テクノロジー周辺機器 >AI >クルワイのエージェントフローとは何ですか? - 分析Vidhya
CrewaiフローでAIワークフローを合理化します!この強力なフレームワークは、AIエージェント間の相互作用を調整するための構造化されたパターンを提供し、開発者がコーディングタスクとクルーを堅牢なAIオートメーションのシームレスに統合できるようにします。 Crewaiのエージェントフローは、イベント主導のワークフローを提供し、AIアプリケーション内のタスク調整、国家管理、および実行制御を簡素化します。
目次
MovieRecommendationFlow
の構築乗組員とは何ですか?
Crewaiの乗組員は、自動タスクの完了のためにAIエージェントのオーケストレーションを促進します。エージェント間のスムーズなコラボレーションを可能にして、複雑な問題を解決できます。しかし、なぜ「流れる」のでしょうか? Crewaiフローは、これらのエージェントの相互作用を管理するための構造化されたパターンを提供し、エージェントがどのようにコミュニケーションをとり、協力して特定の目標を達成するかを定義するためです。フローは本質的にタスクのシーケンスであり、1つのタスクの出力が次のタスクをトリガーできます。このシステムは、状態と条件付きの実行を管理するための柔軟なメカニズムを提供します。
フローを理解する
フローは、特定のトリガーや条件に反応して、イベント駆動型モデルで動作します。これにより、タスクの実行結果に基づいて動的なワークフロー調整が可能になり、複雑な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フローの柔軟で適応的な性質により、効率的で動的なAIアプリケーションを構築するための強力なツールが作成されます。
よくある質問
Q1。入力をフローに渡すにはどうすればよいですか? flow.kickoff(inputs={"counter": 10})
を使用します。
Q2。 @start()
と@listen()
の違いは何ですか? @start()
フローの出発点をマークします。 @listen()
マークメソッドは、タスクの完了によってトリガーされます。
Q3。フローを視覚化するにはどうすればよいですか? flow.plot()
を使用します。
Q4。人間のフィードバックを組み込むことはできますか?はい、Crewai Flowsは人間のループフィードバックをサポートします。
以上がクルワイのエージェントフローとは何ですか? - 分析Vidhyaの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。