ホームページ >テクノロジー周辺機器 >AI >クルワイのエージェントフローとは何ですか? - 分析Vidhya

クルワイのエージェントフローとは何ですか? - 分析Vidhya

William Shakespeare
William Shakespeareオリジナル
2025-03-18 12:05:09182ブラウズ

CrewaiフローでAIワークフローを合理化します!この強力なフレームワークは、AIエージェント間の相互作用を調整するための構造化されたパターンを提供し、開発者がコーディングタスクとクルーを堅牢なAIオートメーションのシームレスに統合できるようにします。 Crewaiのエージェントフローは、イベント主導のワークフローを提供し、AIアプリケーション内のタスク調整、国家管理、および実行制御を簡素化します。

クルワイのエージェントフローとは何ですか? - 分析Vidhya

目次

  • 乗組員とは何ですか?
  • フローを理解する
    • ワークフロー制御とシーケンス
    • 効率的な州管理
    • 柔軟な入力処理
    • イベント駆動型アーキテクチャと動的調整
    • タスクルーティングと条件付き実行
  • 実際の流れ:映画の推奨の例
    • セットアップとインストール
    • 警告の処理
    • 環境変数の読み込み
    • 必要なモジュールのインポート
    • エージェントの定義
    • タスクの定義
    • 各ジャンルの乗組員を作成します
    • ジャンルとジェネラステートの定義
    • MovieRecommendationFlowの構築
    • 流れを視覚化します
    • 流れを開始します
  • 結論
  • よくある質問

乗組員とは何ですか?

Crewaiの乗組員は、自動タスクの完了のためにAIエージェントのオーケストレーションを促進します。エージェント間のスムーズなコラボレーションを可能にして、複雑な問題を解決できます。しかし、なぜ「流れる」のでしょうか? Crewaiフローは、これらのエージェントの相互作用を管理するための構造化されたパターンを提供し、エージェントがどのようにコミュニケーションをとり、協力して特定の目標を達成するかを定義するためです。フローは本質的にタスクのシーケンスであり、1つのタスクの出力が次のタスクをトリガーできます。このシステムは、状態と条件付きの実行を管理するための柔軟なメカニズムを提供します。

フローを理解する

クルワイのエージェントフローとは何ですか? - 分析Vidhya

フローは、特定のトリガーや条件に反応して、イベント駆動型モデルで動作します。これにより、タスクの実行結果に基づいて動的なワークフロー調整が可能になり、複雑なAIプロセスが合理化されます。

ワークフロー制御とシーケンス

CREWAIフローにより、開発者はタスクシーケンスを構成し、タスク間の情報フローを制御できます。タスクは一緒に連鎖して、操作の論理的な順序を作成できます。以前のタスク出力に基づくタスクの条件付き実行もサポートされています。

効率的な州管理

多くの場合、PydanticのBaseModelを使用している構造化された状態管理により、タスク間のデータの一貫性と構造が保証されます。これにより、タイプの安全性、検証、および複雑なデータ状態の管理が容易になります。

柔軟な入力処理

フローは、実行中の任意の時点で状態を初期化または更新するための入力を受け入れます。ワークフローのニーズに応じて、入力は、開始時、実行中、または実行後に提供できます。

イベント駆動型アーキテクチャと動的調整

CREWAIフローは、タスクの結果に基づいて動的に調整します。タスクは、前のステップからの出力をリッスンし、以前の出力に基づいて新しいタスクがトリガーされるリアクティブシステムを作成できます。 @listen()および@router()デコレーターは、この柔軟性を提供し、条件付きおよび動的タスクのリンクを可能にします。 @start()デコレーターは、フローの開始点をマークします。

{{table_placeholder 21}} `または、<td>Triggers a listener when any specified method emits an output.</td> <tr><td></td></tr> and_`
デコレーターと条件付きロジック 説明
@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@routeror_ 、および@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>

クルワイのエージェントフローとは何ですか? - 分析Vidhya

流れを開始します

<code>recommendations = await flow.kickoff_async()</code>

クルワイのエージェントフローとは何ですか? - 分析Vidhyaクルワイのエージェントフローとは何ですか? - 分析Vidhya

結論

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。