AIパーソナル・ラーニング
と実践的なガイダンス
資源推薦1

CrewAIに基づくマルチエージェントシステム構築の手引き

1.はじめに

CrewAIは強力なマルチエージェントコラボレーションツールとして、開発者にインテリジェントコラボレーションシステムを構築するための便利な方法を提供します。本稿では、CrewAIを用いたインテリジェントコラボレーションシステムの構築方法を紹介する。 クルーAI マルチエージェントシステムの構築

2.CrewAIのコアコンセプトの詳細

2.1 代理店

2.1.1 代理店の定義と機能

エージェントはCrewAIにおける自律的なユニットであり、タスクを実行し、意思決定を行い、他のエージェントとコミュニケーションする能力を持つ。エージェントはチームの一員として行動し、それぞれがリサーチャー、ライター、カスタマーサポートなど特定の役割を担い、チームの目標に貢献するために協力し合います。

2.1.2 プロキシのプロパティ

  • 役割 チーム内でのエージェントの機能的なポジションを明確にし、どのようなタスクに最も適しているかを判断する。例えば、リサーチャーの役割のエージェントは、情報の収集と分析が得意であり、ライターの役割のエージェントは、コンテンツの作成に集中する。
  • ゴール エージェントを導く意思決定プロセスは、エージェントが達成しようとする個々の目標である。例えば、データアナリストエージェントのゴールは、ビジネス上の意思決定をサポートするために実用的なインサイトを抽出することである。
  • バックストーリー エージェントの役割とゴールに関する豊富なコンテキスト情報を提供することで、インタラクションやコラボレーションのダイナミクスを強化します。例えばデータアナリストの場合、「あなたは大企業のデータアナリストです。あなたはデータを分析し、ビジネスに洞察を提供する責任者です。あなたは現在、マーケティングキャンペーンのパフォーマンスを分析するプロジェクトに取り組んでいます"
  • LLM(オプション) エージェントを実行するための言語モデルを示します。指定しない場合、デフォルトは モデル名 環境変数でモデル名を取得する。そうしないと、デフォルトは "gpt-4 "になる。開発者は、さまざまなタスクの処理要件を満たすために、適切な言語モデルを選択することができる。
  • ツール(オプション) エージェントが利用可能な機能セットで、通常は実行環境と互換性のあるカスタムクラスのインスタンスです。これらのツールは、エージェントの機能を拡張し、ウェブ検索やデータ分析などの操作を可能にします。
  • コールファンクションのLLM(オプション) 渡された場合、チーム関数呼び出しLLMを上書きします。 なし.このプロパティを柔軟に設定することで、開発者はエージェントのツール呼び出し動作をより正確に制御できる。
  • 最大反復回数(オプション) このパラメータを適切に設定することで、タスク実行の深さと効率をコントロールすることができます。
  • 最大リクエスト数(オプション) プロキシが1分間に実行できるリクエストの最大数。 なし.開発者は、システムの安定稼働を保証するために、実際の状況に応じて設定を行うことができます。
  • 最大実行時間(オプション) エージェントがタスクを実行できる最大時間。 なしは、最大実行時間の制限がないことを示す。この属性は、タスクが長時間リソースを占有しないように、タスクの実行期間を制御するために使用できる。
  • 詳細モード(オプション) に設定する。  設定可能な内部ロガーは、デバッグと監視のための詳細な実行ログを提供します。 .開発中や最適化中に詳細モードをオンにすると、問題を素早く特定するのに役立ちます。
  • 委任の許可(任意) エージェントは相互にタスクや課題を委任し、タスクが最も適切なエージェントによって処理されるようにすることができる。 .この機能は、チーム内の柔軟なコラボレーションを促進し、タスク処理の精度と効率を向上させます。
  • ステップコールバック(オプション) エージェントの各ステップの後に呼び出される関数は、操作の記録やその他の操作の実行に使用され、チームの ステップ・コールバック.開発者は、このコールバック関数を使用して、カスタム監視および処理ロジックを実装することができます。
  • キャッシュ(オプション) プロキシがツール使用キャッシュを使うかどうかを示す。 .キャッシュメカニズムは、タスクの実行効率を高め、重複計算を減らすのに役立つ。

2.1.3 エージェントの作成

エージェントは、CrewAIの組み込みの委任とコミュニケーションメカニズムを使用して相互に作用することができます。これにより、チーム内でのダイナミックなタスク管理と問題解決が可能になります。

プロキシを作成するには、必要なプロパティで初期化するのが一般的である。 代理店 クラスのインスタンスです。以下は、すべての属性を持つ概念の例です:

from crewai import エージェント
エージェント = エージェント(
role="Data Analyst"、
goal="実用的な洞察の抽出"、
backstory="""あなたは大企業のデータアナリストです。
あなたは、データを分析し、ビジネスに洞察を提供する責任を負っています。
あなたは現在、マーケティングキャンペーンのパフォーマンスを分析するプロジェクトに取り組んでいます。""",
tools=[my_tool1, my_tool2], # オプション、デフォルトは空リストです。
llm=my_llm, # オプション
function_calling_llm=my_llm, # オプション
max_iter=15, # オプション
max_rpm=None, # オプション
verbose=True, # オプション
allow_delegation=True, #オプション
step_callback=my_intermediate_step_callback, # オプション
cache=True #オプション
)

2.2 タスク

2.2.1 タスクの定義とコラボレーション

CrewAIフレームワークでは、タスクはエージェントが完了する必要のある特定の仕事であり、明確な説明、実行を担当するエージェント、必要なツールなど、実行に必要な様々な詳細を含んでいます。タスクは、チームワークの効率を向上させるために、属性管理とプロセスオーケストレーションを通じて、複数のエージェントが協力して作業することを可能にします。

2.2.2 タスクの属性

  • 説明 エージェントが何をすべきかを正確に理解できるように、タスクの内容を明確かつ簡潔に記述すること。例えば、"AIに関する最新かつ最も関連性の高いニュースを検索し、要約する"。
  • 代理店 タスクの実行を担当するエージェントは、直接指定することも、役割や可用性などに基づいてクルーのプロセスから割り当てることもできます。これにより、タスクは適切な実行者を見つけることができます。
  • 期待される成果 エージェントがタスクのゴールと望ましい結果について明確に理解できるように、タスクが完了した後の詳細な説明。例えば、"最も重要なAIニュースのトップ5を箇条書きで要約する "など。
  • ツール(オプション) エージェントがタスクを実行するために使用する機能や能力は、タスクのパフォーマンスやエージェントのインタラクションを向上させます。適切なツールを選択することで、エージェントはより効率的にタスクを完了することができる。
  • 非同期実行(オプション) タスクは設定されると非同期で実行され、時間のかかるタスクや後続のタスクの実行にほとんど影響を与えないタスクは、完了を待たずに他のタスクを進めることができる。
  • コンテキスト(オプション) このタスクのコンテキストとしてその出力を使用するタスクを指定し、タスク間の依存関係を明確にし、タスク出力の効率的な配信と利用を可能にする。
  • コンフィギュレーション(オプション) タスクを実行するために使用されるエージェントの追加設定詳細は、タスク実行をさらにカスタマイズする柔軟性を提供する。
  • 出力JSON(オプション) JSONオブジェクトを出力するには、OpenAI APIが必要です。このプロパティは、データの相互作用と他のシステムとの統合を容易にします。
  • パイダンティック出力(オプション) Pydanticモデルオブジェクトを出力するには、OpenAI APIも必要です。開発者は実際のニーズに応じて適切な出力形式を選択することができます。
  • 出力ファイル(オプション) タスクの出力をファイルに保存する。 出力JSON もしかしたら パイダンティック出力 併用することで、出力の保存方法を指定することができる。これにより、データの永続化とその後の分析が容易になります。
  • コールバック(オプション) Pythonの呼び出し可能な関数で、タスクが完了した後に実行され、Eメールの送信など、タスクの結果に基づいてアクションや通知をトリガーするために使用できる。
  • 手動入力(オプション) タスク結果の正確さと信頼性を保証するために、手動による監督を必要とするタスクに有用である。

2.2.3 ツールを使ってタスクを作成する

タスクの基本的な性質を理解した後、さらにツールを使ってタスクを作成する方法を探る。以下はその例である:

インポート os
os.environ["OPENAI_API_KEY"] = "あなたのキー"
os.environ["SERPER_API_KEY"] = "あなたのキー" # serper.dev APIキー
from crewai import エージェント, タスク, クルー
from crewai_tools import SerperDevTool ツール
research_agent = エージェント(
role="研究者"、
goal="最新のAIニュースを見つけてまとめる"、
backstory="""あなたは大企業の研究者です。
データを分析し、ビジネスのための洞察を提供する責任者です。"""",
verbose=True
)
search_tool = SerperDevTool()
task = タスク(
description="最新の人工知能ニュースを検索して要約する"、
output="最も重要なAIニュースのトップ5を箇条書きにまとめる", agent=research_agent
agent=research_agent、
tools=[search_tool])
)
クルー = クルー(
agent=[research_agent]、
タスク=[task]、
冗長=2
)
result = crew.kickoff()
print(result)

2.2.4 タスクの作成

タスクを作成するには、そのスコープ、担当エージェント、柔軟性のための追加属性を定義する:

from crewai import タスク
タスク = タスク(
description="人工知能に関する最新かつ最も関連性の高いニュースを検索し、要約する"、
agent=sales_agent
)

タスクの割り当ては 責任ある立場で代行するあるいは ラミネート CrewAIのプロセスは、役割や可用性などによって決定される。

2.2.5 タスクの依存関係

CrewAIでは、あるタスクの出力は自動的に次のタスクに引き継がれます。これは、他のタスクの出力に依存するタスクがあり、そのタスクの直後に実行されない場合に便利です。これはタスクの (ぶんみゃく 属性の完成:

research_ai_task = タスク(
description="最新のAIニュースを検索して要約する"、
async_execution=True、async_execution = True、async_task = Task(
async_execution=True、agent=research_agent、async_execution=True、および
agent=research_agent、
tools=[search_tool]
)
research_ops_task = タスク(
description="AI操作に関する最新ニュースを検索し、要約する"、
output="最も重要なAIオペレーション・ニュースのトップ5を箇条書きにまとめる"、
async_execution=True、
agent=research_agentである、
tools=[search_tool]
)
write_blog_task = タスク(
description="AIの重要性と最新ニュースについてのブログ記事を書く"、
output="4段落の長さのブログ記事"、
agent=writer_agent、
コンテキスト=[research_ai_task, research_ops_task]
)

2.2.6 非同期実行

タスクは非同期に実行されます。つまり、Crew はタスクの完了を待たずに次のタスクに移ります。これは完了までに時間がかかるタスクや、次のタスクの実行にとって重要でないタスクに便利です。タスクの実行には (ぶんみゃく 属性がfutureタスクに定義されている場合、非同期タスクの出力が完了するまで待つ必要がある。

list_ideas = Task(
description="人工知能に関する記事の面白いアイデアを5つ探そう。",
expect_output="5つの記事のアイデアの箇条書きリスト。",
agent=研究者, , async_execution="5つの記事のアイデアの箇条書きリスト。
async_execution=True #は非同期で実行される。
)
list_important_history = Task(
description="AIの歴史を調べて、最も重要な5つの出来事を教えてください。",
expect_output="5つの重要な出来事を含む箇条書きのリスト。",
agent=researcher、
async_execution=True #は非同期に実行される。
)
write_article = Task(
description="人工知能、その歴史、興味深いアイデアについての記事を書く。",
expect_output="人工知能に関する4段落の記事" ,".,
agent=writer、
context=[list_ideas, list_important_history] #は、両方のタスクの出力が完了するのを待つ。
)

2.2.7 コールバックメカニズム

タスクの完了時にコールバック関数を実行し、タスクの結果に基づいてアクションや通知をトリガーできるようにします。

def callback_function(output: TaskOutput).
# タスク完了後に何らかのアクションを実行する
#例えばマネージャーにメールを送る
print(f"")
タスク完了!
タスク: {output.description}
出力:{output.raw_output}。
""")
research_task = タスク(
description="最新のAIニュースを見つけて要約する"、
output="最も重要なAIニュースのトップ5を箇条書きで要約する"、
agent=research_agent、
tools=[search_tool]、
callback=callback_function
)

2.2.8 タスク固有の出力へのアクセス

クルーのグループが実行されたら、タスクオブジェクトの 出力 属性は特定のタスクの出力にアクセスする:

task1 = タスク(
description="最新の人工知能のニュースを見つけて要約する"、
output="最も重要なAIニュースのトップ5を箇条書きにまとめる"、
agent=research_agent、
tools=[search_tool]
)
クルー = クルー(
agent=[research_agent]、
タスク=[task1, task2, task3]、
verbose=2
)
result = crew.kickoff()
print(f"")
タスク完了!
タスク:{task1.output.description}。
出力:{task1.output.raw_output}。
""")

2.2.9 ツールのオーバーライド機構

タスクにツールを指定することで、エージェントの能力をダイナミックに調整することができ、CrewAIの柔軟性が際立つ。

2.2.10 エラー処理と検証メカニズム

タスクの作成と実行時に、タスク属性の堅牢性と信頼性を保証するための検証メカニズムが存在する。これらの検証には以下が含まれるが、これらに限定されるものではない:

  • 明確なアウトプットの期待値を維持するために、1つのタスクにつき1つのアウトプットのタイプのみが設定されるようにする。
  • 手作業による流通の防止 アイドル 属性は、一意識別子システムの完全性を維持するために使用される。

これらの検証は、CrewAIフレームワーク内でのタスク実行の一貫性と信頼性を維持するのに役立つ。

2.3 ツール

2.3.1 道具の役割と種類

CrewAIツールは、ウェブ検索、データ分析、コンテンツ生成、タスク委任などの様々な機能をエージェントに与え、エージェントが単純な検索から複雑なやりとりや効果的なチームワークへと飛躍する様々な複雑な操作を行うことを可能にする。

2.3.2 ツールの主な機能

  • ユーティリティ このタスクのために設計され、ウェブ検索、データ分析、コンテンツ生成など、さまざまな分野の機能要件をカバーし、さまざまなシナリオで働くエージェントのニーズに応えます。
  • 統合 ワークフローにシームレスに統合し、エージェントやタスクと密接に連携することで、エージェントの全体的な能力を高め、効率的なコラボレーションを可能にします。
  • カスタマイズ性 開発者は、特定のニーズを満たすために特注のツールを開発したり、エージェントの実際のニーズに合わせて設定をパーソナライズするために既存のツールを使用したりする柔軟性を提供します。
  • エラー処理 強力なエラー処理メカニズムにより、操作中に例外が発生した場合、ツールは例外を優雅に処理し、システムのスムーズな実行を保証します。
  • キャッシュ・メカニズム インテリジェントなキャッシュ機能により、パフォーマンスを最適化し、冗長な処理を削減します。また、開発者は キャッシュ機能 属性はキャッシュ機構をより細かく制御し、効率をさらに向上させる。

2.3.3 CrewAIツールの使い方

CrewAIツールでエージェントの機能を強化するには、まず追加のツールキットをインストールする必要があります:

pip install 'crewai[tools]'

以下はその使用例である:

import os
from crewai import エージェント、タスク、クルー
# import CrewAI tools
from crewai_tools import (
DirectoryReadTool, FileReadTool, CrewAI_tools
FileReadTool, SerperDevTool, SerperDevTool, SerperDevTool
SerperDevTool, WebsiteSearchTool
ウェブサイト検索ツール
)
# APIキーの設定
os.environ["SERPER_API_KEY"] = "Your Key" # serper.dev APIキー
os.environ["OPENAI_API_KEY"] = "あなたのキー"
#インスタンス化ツール
docs_tool = DirectoryReadTool(directory='./blog-posts')
file_tool = FileReadTool()
search_tool = SerperDevTool()
web_rag_tool = WebsiteSearchTool()
# エージェントの作成
リサーチャー = エージェント(
role="市場調査アナリスト"、
goal="AI業界に関する最新の市場分析を提供する"、
backstory="市場動向に鋭い目を持つ専門アナリスト",
tools=[search_tool, web_rag_tool]、
verbose=True
)
ライター=エージェント(
role="コンテンツライター", , goal="AI業界に関する魅力的なブログ記事を書く", verbose=True )
goal="AI業界に関する魅力的なブログ記事を書く"、
backstory="テクノロジーへの情熱を持った熟練したライター",
tools=[docs_tool, file_tool]、
verbose=True
)
# タスクを定義する
research = タスク(
description="AI業界の最新動向を調査し、サマリーを提供する。",
output="AI業界のホットな動向トップ3を要約し、その重要性について独自の視点を提供する。",
エージェント=リサーチャー
)
write = タスク(
description="リサーチアナリストの要約に基づいて、魅力的なブログ記事を書く。カタログの最新のブログ記事からインスピレーションを得てください。",
expect_output="複雑な用語を避け、魅力的で情報量が多く、理解しやすい4段落のブログ記事をマークダウン形式でレイアウトする。",
agent=writer、
output_file='blog-posts/new_post.md' # 最終的なブログ記事はここに保存されます。
)
# クルーの組み立て
crew = Crew(
エージェント=[リサーチャー、ライター]、
タスク=[調査、執筆]、
冗長=2
)
# タスクの実行
crew.kickoff()

2.3.4 独自のツールを作成する

最初にツールキットをインストールする必要がある:

pip install 'crewai[tools]'
  • 下位分類 ベースツール 相続を通じて ベースツール クラスを使用すると、開発者はカスタム・ツールを作成できます。ツールの名前と説明を定義して _走る メソッドを使用して、ツールの特定の機能ロジックを定義します。例
from crewai_tools import BaseTools
class MyCustomTool(BaseTool).
name: str = "私のツールの名前"
description: str = "このツールが何のために使用されるかの明確な説明、エージェントはそれを使用するためにこの情報が必要です。"
def _run(self, argument: str) -> str.
#の実装はこちら
return "カスタムツールの結果"
  • 用いる 工具 装飾家 使用 工具 デコレーターを使えば、カスタムツールをより簡単に作成できる。関数を定義し ツール デコレータで、ツールの名前と説明を指定するだけです。例
from crewai_tools import tool
tool("私のツールの名前")
def my_tool(question: str) -> str.
"""このツールが何に使われるかを明確に記述し、エージェントがそれを使うにはこの情報が必要です。""""
# 関数のロジックはこちら
return "カスタムツールの結果"
  • カスタム・キャッシュ・メカニズム このツールには キャッシュ機能 を使用してキャッシュの動作を微調整することができます。特定の条件に基づいて結果をキャッシュするタイミングを決定することで、キャッシュロジックをきめ細かく制御できます。例
from crewai_tools import tool
ツール
def multiplication_tool(first_number: int, second_number: int) -> str.
"""2つの数値を掛け合わせる必要がある場合に便利です。""""
return first_number * second_number
def cache_func(args, result).
# この場合、結果が2の倍数の場合のみキャッシュされます。
cache = result % 2 == 0
キャッシュを返す
multiplication_tool.cache_function = cache_func

2.3.5 LangChainツールの使用

CrewAIはLangChainのツールキットとシームレスに統合されており、開発者はLangChainが提供する以下のような組み込みツールを利用できる。 GoogleSerperAPIWrapper などの簡単な設定により、エージェントをCrewAIシステムに統合することで、エージェントの機能を拡張することができます。例

from crewai import エージェント
from langchain.agents import Tool
from langchain.utilities import GoogleSerperAPIWrapper
# APIキーの設定
os.environ["SERPER_API_KEY"] = "あなたのキー"
search = GoogleSerperAPIWrapper()
# 検索ツールを作成し、エージェントに割り当てます。
serper_tool = Tool(
name="Intermediate Answers"、
func=search.run、
description="検索ベースのクエリ用ツール"
)
エージェント = エージェント(
role="リサーチアナリスト"、
goal="最新の市場分析を提供する"、
backstory="市場動向に鋭い目を持つ専門アナリスト",
ツール=[serper_tool]
)

2.4 プロセス

2.4.1 プロセスの実現

  • シーケンシャル タスクはあらかじめ定義された順序で順次実行され、あるタスクの出力が次のタスクのコンテキストとして機能することで、秩序ある首尾一貫したタスク実行が保証される。
  • 階層的 管理言語モデル(マネージャー_llm)を使用してプロセスを有効にする。マネージャーエージェントは、タスクの計画、委任、検証など、タスクの実行を監督する責任を負います。タスクはエージェントの能力に基づいて割り当てられ、事前に割り当てられることはありません。
  • コンセンサス・プロセス(予定) コードベースにはまだ実装されていないが、CrewAIの継続的な開発とイノベーションの追求を反映している。

2.4.2 チームワークにおけるプロセスの役割

プロセスによって、個々のエージェントが全体としてまとまり、効率的かつ協調的に共通の目標を達成するための共同作業を効率化することができます。適切なプロセス設計により、チームは複雑なタスクに対処し、全体的な生産性を向上させることができる。

2.4.3 マネージャーへのプロセスの割り当て

マネージャを作成する際、開発者は実行ポリシーを設定するプロセスタイプを指定できます。階層プロセスの場合、Manager エージェントに マネージャー_llm.例

from crewai import Crew, Process
from langchain_openai import ChatOpenAI
#シーケンシャルプロセス
クルー = クルー(
エージェント=my_agents、
タスク=my_tasks、
プロセス=プロセス.シーケンシャル
)
#階層プロセスによる可用性の確保 manager_llm
クルー = クルー(
エージェント=my_agents、
タスク=my_tasks、
プロセス=Process.hierarchical、
manager_llm=ChatOpenAI(model="gpt-4")
)

2.4.4 その他のタスク特性

  • 非同期実行(ひどうきじっこう) タスクの非同期実行が可能なため、並列処理が可能となり、チーム全体の生産性が向上します。タスクの特性に合わせて、同期・非同期の実行方法を柔軟に選択できます。
  • ヒューマン・インプット・レビュー(HIR) タスクの結果を確定する前に、品質と正確さを保証するために、オプションでタスクのアウトプットの手動レビューを提供し、タスク実行の信頼性を保護するための監視のレイヤーを追加します。
  • 出力のカスタマイズ タスクは、JSON (出力_json)、Pydanticモデル(出力_ピダンティック) とファイル出力 (出力ファイル)を使用して、さまざまなニーズに対応し、データの処理と利用を促進する。

2.5クルー

2.5.1 チーム属性

  • タスク チームに割り当てられたタスクのリスト。
  • 代理店 チームに所属するエージェントのリストで、それぞれ独自の役割と能力を持つチームメンバーの構成を定義する。
  • プロセス(オプション) 逐次プロセスや階層プロセスなど、チームが従うプロセスのタイプによって、タスクの実行順序や方法が決まる。
  • 詳細レベル(オプション) 開発者がデバッグやモニタリングのために十分な情報を簡単に得られるようにする。
  • マネジャーLLM(オプション、段階的プロセスには必須) 階層化されたプロセスにおいて、マネージャーエージェントがタスクの実行プロセスを管理するために使用する言語モデル。
  • 関数呼び出しLLM(オプション) このLLMは、開発者が必要に応じて柔軟に設定することができます。
  • コンフィギュレーション(オプション) チームのオプション設定 Json もしかしたら ディクテ[str, Any] チームの行動をさらにカスタマイズするためのフォーマットが用意されている。
  • 最高回転数(オプション) レート制限を回避するために、チーム実行中に1分間に実行可能なリクエストの最大数を指定します。 最大回転数 セッティング
  • 言語(オプション) チームが使用する言語は、デフォルトでは英語だが、実際のニーズに応じて調整することができる。
  • 言語ファイル(オプション) 多言語サポートを容易にするため、チームの言語ファイルパスを設定。
  • メモリ(オプション) エグゼクティブ・メモリー(短期記憶、長期記憶、身体記憶)を保存し、チームの実行力と学習能力を高める。
  • キャッシュ(オプション) プロセス効率向上のため、ツール実行結果の保存にキャッシングを使用するかどうかを指定します。
  • エンベッダー(オプション) チームが使用するエンベッダーのコンフィギュレーション(主にインメモリー機能)は、データがどのように埋め込まれ、どのように取り出されるかに影響する。
  • フル出力(オプション) : チームがすべてのタスク出力を含む完全な出力を返すか、最終出力のみを返すかを決定し、異なる結果取得のニーズを満たす。
  • ステップコールバック(オプション) 各エージェントの各ステップの後に呼び出され、操作のログを記録したり、エージェント固有の操作を上書きしないその他の操作を実行する関数。 ステップ・コールバック.
  • タスク・コールバック(オプション) 各タスクが完了した後に呼び出される関数で、タスクの後に他のアクションを監視または実行する。
  • 共有チーム(オプション) CrewAIチームとチーム全体の情報を共有し、ライブラリーの改善やモデルのトレーニングを行う。
  • 出力ログファイル(オプション) チーム全体の出力と実行結果を含むファイルを作成するかどうか、ファイルのパスと名前を指定できます。

2.5.2 チーム作りの例

以下は、チーム編成の例であり、補完的な役割とツールを持つエージェントがどのように集められ、タスクが割り当てられ、プロセスが選択されるかを示している:

from crewai import Crew, Agent, Task, Process
from langchain_community.tools import DuckDuckGoSearchRun
# 特定の役割とツールを持つエージェントを定義する。
リサーチャー = エージェント(
role="Senior Research Analyst"、
goal="革新的なAI技術を発見する"、
tools=[DuckDuckGoSearchRun()]を使用する。
)
ライター = エージェント(
role="コンテンツライター", goal="革新的なAI技術について書く", tools=[DuckDuckGoSearchRun(]) ) writer = Agent(
goal="AIの発見について魅力的な記事を書く", verbose=True)
verbose=True
)
# エージェントのタスクを作成する
research_task = Task(
description="画期的なAI技術を特定する"、
エージェント=researcher
)
write_article_task = タスク(
description="最新のAI技術に関する記事を書く", agent=writer )
エージェント=ライター
)
# 逐次プロセスによるチーム編成
my_crew = Crew(
agent=[researcher, writer]、
タスク=[research_task, write_article_task]、
プロセス=Process.sequential、
full_output=True、
verbose=True、
)

2.5.3 チーム実行プロセス

  • シーケンシャル これはシンプルで直感的であり、タスク間の順序が明確なシナリオに適している。
  • 階層的 マネージャーエージェントはチームを調整し、タスクを委任し、結果を確認してから作業を進めます。このプロセスには マネージャー_llm複雑なタスクの管理と割り当てに適しており、効率的なタスクの実行と品質管理を保証します。
  • ローンチ・チーム 使用 キックオフ() メソッドは、チームのワークフローを開始し、定義されたプロセスに従ってタスクの実行を開始し、タスクの実行結果を取得します。例
# チームのタスク実行をキックスタートさせる
result = my_crew.kickoff()
print(result)

2.6 メモリ

2.6.1 メモリー・システム・コンポーネント

  • 短期記憶 最近のやり取りや結果を一時的に記憶しておくことで、エージェントは現在の文脈に密接に関連する情報を素早く呼び出して利用することができ、対話やタスクの順序の一貫性を維持し、より文脈に関連した決定や応答を行うことができる。
  • 長期記憶 これは、過去のパフォーマンスから得た貴重な洞察や学習を保持する知識のリポジトリである。時間が経つにつれて、エージェントはこの経験から学び、徐々に知識システムを構築し、改善することができる。
  • エンティティ・メモリー 人、場所、概念など、タスク実行の過程で遭遇する様々なタイプのエンティティに関する情報の取得と整理に重点を置く。これは、エージェントが複雑な情報間の本質的なつながりを深く理解し、エンティティの関係を正確にマッピングすることで、関連する知識をより効率的に処理・統合し、問題解決のより包括的で深い視点を提供するのに役立ちます。
  • コンテキスト・メモリー エージェントが一連のタスクや連続した対話を通して一貫性と関連性をもって一貫して応答できるようにする。長時間の対話においても、タスクのコンテキストと意図を正確に理解することができ、情報の断絶や誤った解釈を回避し、より正確で妥当なアウトプットを提供する。

2.6.2 記憶システムはいかにエージェントに力を与えるか

  • コンテクスト意識の向上 短期記憶と文脈記憶の相乗効果により、エージェントは対話やタスクの展開中に文脈をしっかりと把握し続けることができる。複数ラウンドの対話における情報相関であれ、タスクシーケンスにおける論理的継続であれ、エージェントは記憶された文脈情報に基づいて、より首尾一貫した、一貫性のある、文脈に沿った応答を生成することができ、対話経験の流暢さと論理性を大幅に向上させます。
  • アクセラレーションの構築と学習の経験 長期記憶は、エージェントが成長し進化するためのプラットフォームを提供する。過去の行動や結果を蓄積し、見直すことで、エージェントはそこから教訓を引き出し、パターンや型を発見し、意思決定戦略や問題解決方法を継続的に最適化することができる。この経験蓄積のプロセスにより、エージェントは同様の問題に直面した際に、より賢く効率的な意思決定ができるようになり、作業効率と品質が大幅に向上する。
  • エンティティ理解と情報処理最適化 エンティティ・メモリーは、エージェントが重要なエンティティを識別して記憶する能力を与え、複雑な情報を処理する際に、核となるポイントに素早く焦点を当て、情報間の相互関係を明確にすることを可能にする。これは、エージェントがタスクの要求をより正確に理解するのに役立つだけでなく、膨大な量の情報に直面した際に、価値のあるコンテンツを素早くフィルタリングし、情報処理の速度と精度を向上させることで、複雑なタスクや多様な問題シナリオにより効果的に対処することを可能にします。

2.6.3 チームにメモリを導入する

チームを構成する際、開発者はチームの目標やタスクの性質に基づいて、各メモリコンポーネントを有効にしたりカスタマイズしたりする柔軟性があります。デフォルトでは、メモリシステムはオフになっています。 memory=Trueメモリー機能を有効にして、強力なメモリー機能をチームに吹き込むことができます。メモリーはデフォルトでOpenAI Embeddingsを使用しますが、開発者は、OpenAI Embeddingsを微調整することもできます。 エンベッダー パラメータには、Google AI、Azure OpenAI、GPT4ALL、Vertex AI、または以下のような別のモデルを設定します。 コヒーレ など、さまざまなシナリオのニーズに応える。例

from crewai import クルー、エージェント、タスク、プロセス
# デフォルトのOpenAI Embeddingsを使って、メモリを持つクルーを使う
my_crew = Crew(
エージェント=[...],
タスク=[...],
process=Process.sequential、
process=Process.sequential, memory=True, verbose=True
verbose=True
)
# メモリ機能付きチームを使用してGoogle AI Embeddingに切り替える
my_crew = Crew(
エージェント=[...],
タスク=[...],
process=Process.sequential、
process=Process.sequential, memory=True、
verbose=True、
embedder={
「provider": "google"、
「config": {
"model": "models/embedding-001"、
"task_type": "retrieval_document"、
"title": "Embedchainのためのエンベッディング"
}
}
)

2.6.4 CrewAI記憶システムを使うメリット

  • 適応学習と継続的最適化 時間の経過とタスクの継続的な実行により、チームは新しい情報やタスクの要件に徐々に適応し、タスクを処理するための方法や戦略を継続的に改善することができる。記憶システムにより、エージェントは過去の経験から学習し、行動パターンを自動的に調整することができるため、新しい状況に直面してもより快適に対応することができ、チームの全体的な効率は経験とともに向上し続ける。
  • パーソナライズされた体験の向上 メモリー機能により、エージェントはユーザーの好み、過去のインタラクション、その他の情報を記録し、識別することができます。コンテンツ推薦、質問応答、インタラクションのいずれにおいても、エージェントはユーザーのパーソナライズされた特性に従って正確に応答することができ、ユーザーの特定のニーズを満たし、ユーザーとシステムの間の粘着性と満足度を高めることができます。
  • 問題解決能力の向上 リッチメモリーリポジトリは、エージェントに強力な知識のバックボーンを提供し、問題を解決する際に過去の学習や文脈情報を十分に活用できるようにします。関連する経験を素早く検索し活用することで、エージェントは問題をより包括的に分析し、潜在的な解決策を特定し、よりスマートで正確な意思決定を行うことができる。

3.CrewAIに基づくマルチエージェントシステム構築の実践ステップ

3.1 準備

3.1.1 環境設定

お使いのシステムがCrewAIと関連する依存パッケージのインストール要件を満たしていることを確認してください。オペレーティングシステムによっては、特定のパッケージのインストールや環境変数の設定が必要な場合があります。例えば、システムによってはPython環境、関連ライブラリのインストール、APIキーの設定が必要な場合があります。

3.1.2 CrewAIとOllamaのインストール(オプション)

公式ドキュメントの指示に従って、CrewAIとOllama(Ollamaを使用する必要がある場合)を順番にインストールしてください。インストールがスムーズに完了するように、インストール中にバージョンの互換性、依存関係、その他の問題に注意する必要があるかもしれません。例えば、CrewAIとそのツールキットをインストールするにはpipコマンドを使います:pip install crewai[tools]そして オーラマ のインストールガイドを参照してください。

3.1.3 モデルの設定

CrewAIの設定ファイルで、言語モデル(LLM)をLlama3などの希望するモデルに設定します。このステップにより、エージェントがタスクを実行する際に、推論と意思決定に適切な言語モデルを使用できるようになります。

3.2 エージェントの作成

3.2.1 エージェントの役割と目標の定義

タスク要件に基づいて、各エージェントの役割と目標を定義する。例えば、情報収集を担当するエージェントを作成する場合、その役割は、"特定のドメインの関連情報を収集する "ことを目的とした "情報収集者 "と定義することができます。また、データ分析に焦点を当てたエージェントを作成する場合、その役割は、"価値ある洞察を引き出すために、収集したデータの詳細な分析を行う "ことを目的とした "データ分析者 "と定義することができます。

3.2.2 エージェントプロパティの設定

エージェントの役割とタスクの特性に応じて、適切な言語モデルの選択、必要なツールの追加、最大反復回数の設定、キャッシュ戦略など、エージェントの属性を設定することは合理的です。情報収集エージェントを例にとると、ウェブ検索ツールを設定し、情報取得の効率を向上させるために最大リクエスト数を大きく設定し、繰り返し検索を減らすためにキャッシュをオンにすることができます。一方、データ分析エージェントは、特定のデータベースツールに接続し、分析タスクの複雑さに応じて最大反復回数とその他の属性を調整する必要があるかもしれません。

3.2.3 エージェントのバックストーリーを作成する(任意だが推奨)

エージェントのために詳細なバックストーリーを書くことは、オプションのステップではあるが、エージェントの行動と決定に豊かなコンテキストを提供し、エージェントの擬人化機能を強化し、システムの対話性と解釈可能性を向上させるのに役立つ。例えば、情報収集者のバックストーリーを書くとすると、「あなたは、ウェブ上の膨大な情報を素早く選別し、価値のあるコンテンツを見つけることを得意とするプロの情報収集者です。あなたは長い間データ収集に携わり、さまざまな情報源を熟知し、さまざまな検索テクニックやツールに長けています。この任務は、チームが[特定の分野]に関する最新情報を入手し、その後の分析や意思決定を強力にサポートすることです。"

3.3 タスクの定義

3.3.1 タスク記述の明確化

エージェントがタスクの具体的な要件を明確に理解できるように、各タスクを明確かつ正確に説明する。例えば、「過去1ヶ月間のソーシャルメディア上の[商品名]に関するユーザーフィードバックを分析し、主要なコメントと提案を抽出する」、「市場データに基づいて、今後3ヶ月間の[業界名]のトレンドを予測する」など。

3.3.2 タスクエージェントの割り当て

各エージェントの役割と能力に応じて、適切なタスクを割り当てます。タスクを実行するエージェントを直接指定することもできますし、CrewAIのプロセス・メカニズムを使って、エージェントの可用性、専門知識、その他の要因に基づいて、システムが自動的にタスクを割り当てることもできます。例えば、情報収集タスクは情報収集エージェントに、データ分析タスクはデータ分析エージェントに割り当てます。

3.3.3 タスクプロパティの設定

タスクの要件に応じて、期待される出力形式(JSON、Pydanticモデル、ファイルなど)、非同期実行の要否、手動入力レビューの要否など、タスクのその他の属性を設定し、タスクコンテキストを設定する。例えば、高いリアルタイム性が要求されるタスクでは、システム全体の応答速度を向上させるために非同期実行に設定することができます。重要な意思決定タスクでは、結果の正確性を保証するために手動入力レビューを有効にすることができます。

3.4 統合ツール

3.4.1 適切なツールの選択

ウェブ検索など、CrewAIが提供する豊富なツールのライブラリから、タスクに適したツールを選択する。 ウェブサイト検索ツールファイル読み込み用 ファイル読み込みツールで使用されたデータ分析の例を以下に挙げる。 CSVSearchTool など。また、特定のタスクのユニークな要件を満たすために、必要に応じてカスタムツールを作成することもできます。

3.4.2 エージェントやタスクとツールの統合

選択したツールを適切なエージェントに割り当て、エージェントがタスク実行時にツールを呼び出せるようにする。タスクを定義する際には、タスクに使用するツールを明示的に指定し、ツールがタスクと緊密に統合され、連携して動作するようにする。例えば、情報収集タスクでは、情報収集エージェントに ウェブサイト検索ツール 歌で応える ディレクトリ検索ツールウェブページやローカルカタログから情報にアクセスできるようにする。

3.5 チーム編成

3.5.1 複合剤

異なる役割と能力を持つエージェントを組み合わせ、協力的なチームを形成する。チームメンバーが補完的な役割を持ち、複雑なタスクに協力できるようにする。例えば、情報収集担当者、データ分析担当者、コンテンツ作成担当者など、それぞれ異なる役割を持つエージェントがチームを構成し、それぞれの専門性を生かしながら、プロジェクト目標の達成に向けて協力し合う。

3.5.2 チームプロセスの定義

タスクの特性や要件に応じて、逐次プロセスや階層プロセスなど、適切なチームプロセスを選択する。逐次プロセスは、タスク間に明確な優先順位があり、エージェントが決められた順序でタスクを逐次実行するシナリオに適しています。階層プロセスは、管理と調整を必要とする複雑なタスクに適しており、タスクは管理エージェントを通じて割り当てられ、監督されます。

3.5.3 チームプロパティの設定

チームのニーズに応じて、ログの詳細レベル、最大リクエストレート、言語設定、メモリとキャッシュの構成、チーム情報の共有の有無など、チームのさまざまな属性を設定します。チーム属性を適切に設定することで、チームの運用効率を最適化し、さまざまなシナリオのニーズを満たすことができる。

3.6 タスクの実行とモニタリング

3.6.1 チームのタスクを開始する

利用する キックオフ() メソッドは、チームのタスク実行プロセスを開始し、システムは定義されたプロセスとタスク割り当てに従って、エージェントを駆動して作業を開始します。タスク実行プロセス中、タスクの進行状況は、ロギングとコンソール出力によりリアルタイムで監視することができます。

3.6.2 タスク実行の監視

CrewAIが提供するロギング機能や関連する監視ツールを用いて、タスクの実行状況、エージェントの操作手順、出力結果などに細心の注意を払っています。詳細な監視により、エージェント実行エラー、タスクのタイムアウト、リソースの過剰消費など、タスク実行中に発生する可能性のある問題をいち早く発見することができます。

3.6.3 タスク実行結果の処理

タスクの実行が完了すると、タスクの出力が取り込まれ、処理される。タスクの期待される出力形式に基づいて、結果が解析・分析され、その後の意思決定や更なる処理のための貴重な情報が抽出されます。同時に、タスクの実行結果とモニタリング中に発見された問題に基づいて、システムのパフォーマンスと精度を向上させるために、エージェント、タスク、チーム構成に必要な調整と最適化を行います。

4.ケーススタディ:実際のプロジェクトにおけるCrewAIの適用

4.1 インテリジェント・カスタマー・サービス・システム

4.1.1 システム・アーキテクチャとエージェントの役割

インテリジェントカスタマーサービスシステムでは、人間のカスタマーサービスのワークフローをシミュレートするために、いくつかのエージェントが構築される。これらのエージェントには、ユーザ質問受信エージェント、質問分類エージェント、情報問い合わせエージェント、回答生成エージェント、回答レビューエージェントが含まれる。ユーザー問題受信エージェントは、ユーザーからの相談問題を受信し、問題分類エージェントに渡すことを担当します。問題分類エージェントは、問題のタイプに応じて、対応する情報照会エージェントに割り当てます。情報照会エージェントは、様々なツール(知識ベース照会ツール、データベース検索ツールなど)を使用して、関連情報を検索します。回答生成エージェントは、照会された情報に従って、予備回答を生成します。回答監査エージェントは、生成された回答を監査し、最適化して、回答が問題ないことを確認します。回答生成エージェントは、照会された情報に基づいて予備的な回答を生成する。回答レビューエージェントは、生成された回答をレビューして最適化し、回答の正確性と品質を保証する。

4.1.2 タスクフローとコラボレーション

ユーザが質問を投げかけると、ユーザ質問受信エージェントはその質問を記録し、質問分類エージェントに渡す。問題分類エージェントは、キーワード分析、意味理解、その他の技術により、問題を一般的な問題、技術的な問題、アフターセールスの問題などの異なるタイプに分類する。そして、分類結果に基づいて、問題は対応する情報問合せエージェントに割り当てられる。情報照会エージェントは、問題の種類に応じて、知識ベース、データベース、または外部リソースから関連情報を探す。例えば、一般的な問題であれば、知識ベースから直接回答が検索され、技術的な問題であれば、技術文書に問い合わせるか、技術エキスパートシステムと対話する必要があるかもしれない。照会された情報に基づいて、回答生成エージェントは自然言語生成技術を使用して、情報を明確で理解しやすい回答に変換します。最後に、回答レビューエージェントが回答の文法チェック、論理レビュー、丁寧さ評価を行い、必要であればさらに最適化と修正を行います。このプロセスを通じて、エージェントはCrewAIのコミュニケーション・メカニズムとタスク・スケジューリング機能を通じて効率的に連携し、ユーザーに迅速かつ正確な回答を提供します。

4.2 インテリジェント・コンテンツ制作アシスタント

4.2.1 代理店の機能と役割分担

インテリジェントコンテンツ作成アシスタントは、テーマ企画エージェント、素材収集エージェント、コンテンツ生成エージェント、コンテンツ装飾エージェントなど、複数のエージェントが連携して動作する。テーマプランニングエージェントは、ユーザーのニーズや市場動向に基づいて作成テーマを決定する役割を担い、素材収集エージェントは、ウェブ検索ツールやデータベースクエリツールを使用して、記事、写真、データなどの関連素材を収集し、コンテンツ生成エージェントは、自然言語生成アルゴリズムを使用して、テーマと素材に基づいて最初のドラフトを作成し、コンテンツタッチアップエージェントは、ユーザーの要件と期待をよりよく満たすように、最初のドラフトの文法最適化、スタイル調整、論理的結合を実行します。コンテンツタッチアップエージェントは、第一稿の文法、スタイル、論理を最適化し、ユーザーの要求と期待により沿うようにする。

4.2.2 創造的プロセスと相乗メカニズム

ユーザから作成依頼(例えば、[特定のテーマ]に関する記事を書いて欲しい)があると、まず、テーマ企画エージェントがテーマを分析・企画し、記事の大枠と主要な内容を決定する。次に、素材収集エージェントが、テーマに沿ってインターネット上の関連記事、研究報告、事例などを検索し、それらを整理してコンテンツ生成エージェントに渡す。コンテンツ生成エージェントは、トピックフレームワークと収集した資料に基づいて、ディープラーニングモデルを用いて記事の初稿を生成する。例えば、段落コンテンツを生成し、資料のアイデアやデータに基づいて記事構造を整理することができる。最後に、コンテンツ・タッチアップ・エージェントは、初稿の総合的なタッチアップを行い、文法的な誤りをチェックし、語彙の選択を最適化し、文章構造を調整して、記事をより流暢で滑らかで魅力的なものにする。作成プロセスを通じて、各エージェントは、CrewAIのコミュニケーションとコラボレーションの仕組みを通じて、リアルタイムに情報とフィードバックを共有し、作成作業が円滑に進むようにしている。

4.3 インテリジェント投資意思決定システム

4.3.1 システムの構成とエージェントの責任

インテリジェント投資意思決定システムは、市場データ収集エージェント、データ分析エージェント、リスク評価エージェント、投資戦略推奨エージェント、ポートフォリオ最適化エージェントから構成される。市場データ収集エージェントは、様々な金融データソース(証券取引所、金融ニュースサイト、金融データベース等)から、株価、売買高、マクロ経済指標等を含むリアルタイムの市場データを収集する役割を担い、データ分析エージェントは、収集したデータをクレンジング、整理、分析し、市場動向、業界動態、企業の財務状況等の価値ある情報を抽出し、リスク評価エージェントは、データ分析結果に基づいて、リスク評価モデルを用いて投資対象のリスクレベルを評価し、投資戦略推奨エージェントは、リスク評価モデルを用いて投資対象のリスクレベルを評価し、投資戦略推奨エージェントは、データ分析結果に基づいて投資対象のリスクレベルを評価する。リスク評価エージェントは、データ分析結果に基づいて、リスク評価モデルを適用して投資対象のリスクレベルを評価し、投資戦略推奨エージェントは、市場環境や投資家のリスク選好度に基づいて、長期投資、短期投機、分散投資などの適切な投資戦略を推奨し、ポートフォリオ最適化エージェントは、推奨された投資戦略に基づいて投資ポートフォリオを最適化し、最適な資産配分比率を決定する。

4.3.2 意思決定プロセスと協力形態

市場データ収集エージェントは、最新の市場データを継続的に収集し、データ分析エージェントに渡す。データ分析エージェントは、テクニカル分析手法による株価動向の予測や、ファンダメンタルズ分析による企業の本質的価値の評価など、データの詳細な分析を行う。リスク評価エージェントは、データ分析の結果に基づき、過去のデータやリスクモデルを組み合わせて、さまざまな投資対象のリスクレベルを評価する。投資戦略推奨エージェントは、市場動向、リスク評価結果、投資家のリスク選好度を考慮し、投資家にパーソナライズされた投資戦略を推奨する。例えば、リスク選好度の高い投資家に対しては、株式投資の比率を高くすることを推奨し、保守的な投資家に対しては、より堅実な債券やファンドの投資ポートフォリオを推奨する。最後に、ポートフォリオ最適化エージェントが、推奨された投資戦略に基づいて数学的最適化アルゴリズムを適用し、リターンを最大化しリスクを最小化する最適なポートフォリオ配分を決定する。意思決定プロセスを通じて、各エージェントは密接に連携し、CrewAIのプロセスオーケストレーションとコミュニケーションメカニズムを通じて、効率的なデータフローと科学的な意思決定を実現する。


目次3
無断転載を禁じます:チーフAIシェアリングサークル " CrewAIに基づくマルチエージェントシステム構築の手引き

チーフAIシェアリングサークル

チーフAIシェアリングサークルは、AI学習に焦点を当て、包括的なAI学習コンテンツ、AIツール、実践指導を提供しています。私たちの目標は、高品質のコンテンツと実践的な経験の共有を通じて、ユーザーがAI技術を習得し、AIの無限の可能性を一緒に探求することです。AI初心者でも上級者でも、知識を得てスキルを向上させ、イノベーションを実現するための理想的な場所です。

お問い合わせ
ja日本語