🤝

マルチエージェントフレームワークCrewAIのチュートリアルを解説

2024/04/08に公開

TL;DR

  • CrewAIで簡単にマルチエージェントなシステム構築できて良い
  • ただお金は溶ける。気をつけて。本当に。
  • 自分用にCrewAIのドキュメントリンク集も載せてる。

はじめに

どうも、やまぐちです。
最近はLLMをつかったマルチエージェント系のユースケースが多く見られます。
例えば、DevinAIだったり、MetaGPTだったり。

じゃあみなさん、どうやってそんなマルチエージェントなシステムを構築するかは知っていますか?
今回はマルチエージェントなシステムを構築するためのフレームワークであるCrewAIの使い方をチュートリアルを通して解説します!
https://www.crewai.com/

宣伝

宣伝です。
エージェントを使って量子化学計算をLLMに実行させたことをブログにしています。
エージェントのユースケースの一つなのでよかったら読んでみてください。

https://note.com/qunasys/n/n7648c8940adf
https://note.com/qunasys/n/nb71e9e55ab3a

crewAIチュートリアル実施

ではチュートリアルをやっていきます。
基本以下のドキュメントに沿って実施します。
https://docs.crewai.com/how-to/Creating-a-Crew-and-kick-it-off/

出力を日本語にするために若干プロンプトをいじっている部分はありますが、基本同じコードです。

まずは全体像から!

流れとしては

  1. エージェントを定義します。
  2. エージェントが実行するタスクを定義します。
  3. Crewという実行環境にエージェントとそのタスクをのせます。
  4. 実行します。

です。それぞれの詳細は実装と一緒に解説しますね!

前提

言語:python
実行環境:GoogleColab

ライブラリのインストール

!pip install crewai "crewai[tools]"

Agentの準備

CrewAIでは、エージェントに明確な役割とbackstoryを設定することで、より適切な行動をするエージェントを作成できます。
また、verboseでログの出力設定やmemoryでメモリ使用などの機能が簡単に設定できるので、結構便利です!
メインの設定は以下です。

  • role: 役割を明確にするため、担当する仕事を指定する。
  • goal: エージェントが達成しようとすることを定義する。
  • backstory: Crew内での動機づけやエンゲージメントを定義する。
  • tools: タスクを実行するために必要なツールを設定する。
import os
import getpass
os.environ["SERPER_API_KEY"] = getpass.getpass()  # serper.dev API key
os.environ["OPENAI_API_KEY"] = getpass.getpass()

from crewai import Agent
from crewai_tools import SerperDevTool
search_tool = SerperDevTool()

# Creating a senior researcher agent with memory and verbose mode
researcher = Agent(
  role='Senior Researcher',
  goal='Uncover groundbreaking technologies in {topic}',
  verbose=True,
  memory=True,
  backstory=(
    "Driven by curiosity, you're at the forefront of"
    "innovation, eager to explore and share knowledge that could change"
    "the world."
  ),
  tools=[search_tool],
  allow_delegation=True
)

# Creating a writer agent with custom tools and delegation capability
writer = Agent(
  role='Writer',
  goal='Narrate compelling tech stories about {topic}',
  verbose=True,
  memory=True,
  backstory=(
    "With a flair for simplifying complex topics, you craft"
    "engaging narratives that captivate and educate, bringing new"
    "discoveries to light in an accessible manner.You are Japanese. Your output should be in Japanese."
  ),
  tools=[search_tool],
  allow_delegation=False
)

もっとAgentを知りたい方はこちら

Taskの準備

タスクとしてどのエージェントが何をやるかを定義します。
async_executionを指定すると非同期実行や、expected_outputでどんな出力にするかのカスタマイズなどができます!

from crewai import Task

# Research task
research_task = Task(
  description=(
    "Identify the next big trend in {topic}."
    "Focus on identifying pros and cons and the overall narrative."
    "Your final report should clearly articulate the key points,"
    "its market opportunities, and potential risks."
  ),
  expected_output='A comprehensive 3 paragraphs long report on the latest AI trends.',
  tools=[search_tool],
  agent=researcher,
)

# Writing task with language model configuration
write_task = Task(
  description=(
    "Compose an insightful article on {topic}."
    "Focus on the latest trends and how it's impacting the industry."
    "This article should be easy to understand, engaging, and positive."
  ),
  expected_output='A 4 paragraph article on {topic} advancements formatted as markdown in Japanese.',
  tools=[search_tool],
  agent=writer,
  async_execution=False,
  output_file='new-blog-post.md'  # Example of output customization
)

Crewにのせる(TaskとAgentの紐付け)

TaskとAgentをCrewという実行環境に乗せます!
LangChainで言うとAgentExecutorです。

from crewai import Crew, Process

# Forming the tech-focused crew with some enhanced configurations
crew = Crew(
  agents=[researcher, writer],
  tasks=[research_task, write_task],
  process=Process.sequential,  # Optional: Sequential task execution is default
  memory=True,
  cache=True,
  max_rpm=100,
  share_crew=True
)

実行

最後にCrewをkickoffさせてマルチエージェントシステム開始させます!

# Starting the task execution process with enhanced feedback
result = crew.kickoff(inputs={'topic': 'AI in coffee'})
print(result)

実行結果は少し長いので、みたい人だけみてください。

実行結果

コーヒー業界における生成AIの最新動向とその影響
AIはコーヒー業界全体に及び、生産から消費までのフローに影響を及ぼしています。特に、生成AIの進歩はコーヒーレシピの創造に大いに活用されており、その結果、地域の風味や文化的な好みに対応したメニューを創出することが可能になっています。これはコーヒー業界における創造性を刺激し、個々のカフェやブランドがそのユニークさを発揮する機会を増やしています。

しかしながら、AIによって生成されたレシピの信頼性については二重チェックが必要であるとの警告もあります。生成AIは新しいレシピや風味の組み合わせを生成することができますが、その信頼性や安全性を保証するためには人間による監視と評価が欠かせません。

これらの技術がもたらす市場の機会とリスクを考慮すると、生成AIはコーヒー業界に新たな価値を創出する可能性を秘めています。一方で、農民の生計やレシピの信頼性といった問題に対する対策も必要です。何よりも、AIがコーヒー業界にもたらす変化を理解し、適切に対応することが今後の成功の鍵となるでしょう。

以上のことから、生成AIはコーヒー業界において新たな風味の創出や生産効率の向上など、多くの可能性を秘めています。しかし、その一方で信頼性の確保という課題も存在します。これらの課題を克服し、AIの可能性を最大限に活用することで、コーヒー業界は新たな高みに到達することができるでしょう。

結果ですが、個人的にはもう少し書いて欲しかったです。
もっと色々とAgentやTaskの中身をいじると面白いことができそうです。
ただめちゃくちゃ簡単にマルチエージェントシステムを構築できたので、とても満足です。

CrewAIでなんかやる時のドキュメントリンク集(GPTちゃんに任せて作ったやつ)

GPT-4ちゃんに任せてCrewAIのドキュメントリンク集を作りました。
ほぼ自分用なのですが、みなさんにも便利かな?と思い乗せます。
私の相棒のGPT-4ちゃんはとても素晴らしいですね!ありがとう、GPT-4ちゃん!

エージェント

https://docs.crewai.com/core-concepts/Agents/
特定のスキルを持ち、タスクを実行、意思決定を行い、他のエージェントと通信する自律的な単位について説明します。

タスク

https://docs.crewai.com/core-concepts/Tasks/
エージェントが実行する活動や目標、そのプロセスと結果の管理方法について詳述しています。

ツール

https://docs.crewai.com/core-concepts/Tools/
エージェントがタスクを実行する際に使用する様々なリソースや機能について説明します。

プロセス

https://docs.crewai.com/core-concepts/Processes/
タスクを効率的に進めるための手順や、それらを管理する方法について解説しています。

クルー

https://docs.crewai.com/core-concepts/Crews/
特定の目標達成のために協力するエージェントの集合体とその組織化に関する情報を提供します。

コラボレーション

https://docs.crewai.com/core-concepts/Collaboration/
エージェント間での情報共有、協力し合うプロセス、およびそのメカニズムに関して説明します。

メモリー

https://docs.crewai.com/core-concepts/Memory/
エージェントが経験から学習し、知識を蓄積するプロセスおよびそれを利用する方法について述べています。

CrewAIでのカスタムツールの作成と利用

https://docs.crewai.com/how-to/Create-Custom-Tools/
CrewAIフレームワーク用のカスタムツールを作成し、効率的に管理して利用するための指示を提供。

CrewAIでの連続プロセスの使用

https://docs.crewai.com/how-to/Sequential/
タスクを特定の順序で一つずつ実行するための線形プロセスを実装する方法を説明。

CrewAIでの階層プロセスの実装

https://docs.crewai.com/how-to/Hierarchical/
CrewAIで階層的プロセスを実装し、効率的なタスク委任と実行を促進する方法を提供。

CrewAIとLLMの接続

https://docs.crewai.com/how-to/LLM-Connections/
CrewAIを様々な言語モデルに接続し、複数のモデルやAPIに柔軟に対応する方法を解説。

CrewAI内でのエージェントのカスタマイズ

https://docs.crewai.com/how-to/Customizing-Agents/
CrewAIでエージェントをカスタマイズし、効果的なチーム構築のための具体的手順を提供。

実行時の人間の入力

https://docs.crewai.com/how-to/Human-Input-on-Execution/
CrewAIのタスク実行において人間の入力を統合する方法を説明。

AgentOpsを用いた監視可能性

https://docs.crewai.com/how-to/AgentOps-Observability/
AgentOpsを使用してCrewAIエージェントの監視可能性を高め、エージェントのパフォーマンス監視を促進する方法について説明。

Google Serper検索ツール

https://docs.crewai.com/tools/SerperDevTool/
テキスト内容から指定されたクエリに基づいてセマンティック検索を実行し、serper.dev APIを利用してユーザーに提供されたクエリに基づいて最も関連性の高い検索結果を取得、表示するよう設計されています。

Webサイトのスクレイピング

https://docs.crewai.com/tools/ScrapeWebsiteTool/
指定されたウェブサイトの内容を抽出し読み取るために設計されたツールで、HTTPリクエストを行い受信したHTMLコンテンツを解析することができます。Webスクレイピングタスク、データ収集、またはウェブサイトから特定の情報を抽出するために特に有用です。

ディレクトリ読み込みツール

https://docs.crewai.com/tools/DirectoryReadTool/
指定されたディレクトリの内容を包括的にリストアップし、サブディレクトリ内のファイルを含め、詳細なファイルの列挙を提供する設計されたユーティリティです。ディレクトリ構造の徹底的な目録作成や、ディレクトリ内のファイルの整理状態を検証するタスクに不可欠です。

ファイル読み込みツール

https://docs.crewai.com/tools/FileReadTool/
テキストベースのファイルフォーマット(.txt.csv.jsonなど)の読み取りと内容の取得を容易にするためのツール群で、JSONコンテンツをPython辞書に変換するなどの特化機能を提供します。

Seleniumスクレイパーツール

https://docs.crewai.com/tools/SeleniumScrapingTool/
ウェブページから内容を抽出するために設計された効率的なウェブスクレイピングツールで、CSSセレクタを用いて特定の要素をターゲットにしたスクレイピングをサポートします。ユーザーが提供した任意のウェブサイトURLに対して使用可能であり、様々なウェブスクレイピングニーズに対応する汎用性を持っています。

ディレクトリRAG検索ツール

https://docs.crewai.com/tools/DirectorySearchTool/
指定されたディレクトリ内の内容に対してセマンティック検索を行うために設計されており、RAG(Retrieval-Augmented Generation)方式を活用して、与えられたディレクトリのファイルを意味的にナビゲートします。このツールは、ランタイム時に任意のディレクトリを検索するよう動的に設定することができ、また、初期化時に特定のディレクトリ内で検索を制限することも可能です。

PDF RAG検索ツール

https://docs.crewai.com/tools/PDFSearchTool/
PDF内容内でセマンティック検索を実行するために設計されたRAGツールで、検索クエリとPDFドキュメントを入力して、高度な検索技術を利用し関連する内容を効率良く見つけ出すことができます。これにより、大きなPDFファイルから迅速に特定の情報を抽出するのに特に有用です。

TXT RAG検索ツール

https://docs.crewai.com/tools/TXTSearchTool/
テキストファイルの内容内でセマンティック検索を行うために使用され、特定のテキストファイルの内容内でクエリに基づいて意味的に検索することを可能にします。これは、情報を迅速に抽出したり、提供されたクエリに基づいて特定のテキストのセクションを見つけるのに非常に有用です。

CSV RAG検索ツール

https://docs.crewai.com/tools/CSVSearchTool/
CSVファイル内の内容に対してセマンティック検索を行うために設計され、特に大規模なCSVデータセットから情報を抽出する際に伝統的な検索方法よりも効率的です。このツールは、指定されたCSVファイルの内容内でクエリに基づいて意味的に検索を行う機能を提供します。

XML RAG検索ツール

https://docs.crewai.com/tools/XMLSearchTool/
XMLファイル内のセマンティック検索を実行し、効率的に情報を抽出するために設計された先進的なRAGツールです。検索クエリとオプションのXMLファイルパスを入力することで、ターゲットとなるファイルの内容により精度高く検索を行い、関連する検索結果を得ることができます。

JSON RAG検索ツール

https://docs.crewai.com/tools/JSONSearchTool/
JSONファイルの内容内でセマンティック検索を行い、特定のJSONパスを指定することでそのJSONファイル内の検索を特化させ、検索結果の精度を高めるように設計されています。

DOCX RAG検索ツール

https://docs.crewai.com/tools/DOCXSearchTool/
DOCXドキュメント内のセマンティック検索を可能にするRAGツールで、クエリに基づいた検索を通じてDOCXファイルから関連情報を効果的に抽出します。データ分析、情報管理、研究タスクに不可欠で、大量のドキュメントコレクション内の特定情報を見つけるプロセスを簡素化します。

MDX RAG検索ツール

https://docs.crewai.com/tools/MDXSearchTool/
市場データの抽出に特化し、AIセクターにおける即時の市場洞察を必要とする研究者や分析家をサポートするために設計されました。さまざまなデータソースとツールとのインターフェースを提供し、市場データの取得、読み取り、および効率的な整理プロセスを合理化します。

PostgreSQL RAG検索ツール

https://docs.crewai.com/tools/PGSearchTool/
PostgreSQLデータベーステーブル内の内容に対してセマンティック検索を行うために設計され、RAG技術を活用してデータベーステーブルコンテンツのクエリを効率的に行うことができます。特に広範なデータセットを持つPostgreSQLデータベースで高度なクエリを実行するユーザーにとって価値があります。

WebサイトRAG検索ツール

https://docs.crewai.com/tools/WebsiteSearchTool/
ウェブサイトのコンテンツ内でセマンティック検索を行うための概念ツールで、指定されたURLから効率的に情報をナビゲートし抽出することを目指しています。現在実験段階にあり、機能や実装の詳細は開発中ですが、将来的には任意のウェブサイトまたは特定の興味のあるウェブサイトに焦点を当てた検索を可能にする予定です。

GitHub RAG検索ツール

https://docs.crewai.com/tools/GitHubSearchTool/
GitHubリポジトリ内でのセマンティック検索を実現するために設計されたツールで、コード、プルリクエスト、イシュー、リポジトリ全体を横断して必要な情報を見つけ出す高度な検索機能を提供します。開発者や研究者にとって重要なリソースとなります。

コードドキュメントRAG検索ツール

https://docs.crewai.com/tools/CodeDocsSearchTool/
コードドキュメント内でセマンティック検索を行う強力なRAGツールで、特定の情報やトピックを効率的に見つけるために設計されています。ユーザーは、特定のドキュメントサイトに検索を絞り込むためにdocs_urlを提供するか、特定のURLなしで幅広いドキュメントを横断的に検索することができます。

YouTube動画RAG検索ツール

https://docs.crewai.com/tools/YoutubeVideoSearchTool/
YouTube動画コンテンツ内でセマンティック検索を行うために設計されたツールで、RAG技術を利用して、特定の動画内やYouTube動画全般を横断的に検索する柔軟性を提供します。特に、指定されたYouTube動画のURLを基にしたターゲット検索に対応しています。

YouTubeチャンネルRAG検索ツール

https://docs.crewai.com/tools/YoutubeChannelSearchTool/
特定のYouTubeチャンネルのコンテンツ内でセマンティック検索を行うために設計されたツールです。RAG技術を活用して、チャンネル内の情報や特定のコンテンツを手動でビデオを見ずに効率的に検索するのに役立ちます。このツールは研究者、コンテンツクリエイター、特定の情報やトピックを探している視聴者に適しています。

(使用例)旅行計画のプロセスを自動化

https://github.com/joaomdmoura/crewAI-examples/tree/main/trip_planner

(使用例)インスタグラムの投稿を考えるプロセスを自動化

https://github.com/joaomdmoura/crewAI-examples/tree/main/instagram_post

(使用例)銘柄分析プロセスを自動化

https://github.com/joaomdmoura/crewAI-examples/tree/main/stock_analysis

(使用例)ゲームビルダー

https://github.com/joaomdmoura/crewAI-examples/tree/main/game-builder-crew

(使用例)CrewAI+LangGraphでメールを自動的にチェック+下書き作成

https://github.com/joaomdmoura/crewAI-examples/tree/main/CrewAI-LangGraph

(使用例)ランディングページを作成するプロセスを自動化

https://github.com/joaomdmoura/crewAI-examples/tree/main/landing_page_generator

(使用例)会議の準備

https://github.com/joaomdmoura/crewAI-examples/tree/main/prep-for-a-meeting

必ず気をつけること!

チュートリアルだけやるのであればそこまでお金はかかりません。
しかし、色々と遊んでたら一瞬でお金が溶けます!!
すこし複雑なタスクを一回やっただけで私は15ドル溶けました...
すごく泣けます...

CrewAIはデフォルトで使うモデルがgpt-4です。
gpt-4は高いのでgpt-4-turbo-previewにしましょう。絶対です。
あとmax_iter(試行回数)もデフォルトで15回になってます。気をつけてください。
まとめると

  • デフォルトがgpt-4なので、必ずgpt-4-turbo-previewに変更すること。
  • 場合によってはAgentのmax_iterを設定すること。

モデルをgpt-4-turbo-previewへの変更だけは忘れないで...これだけでも値段は1/3になるから...
私はこれで15ドル溶かしたんだよ...

最後に

マルチエージェント系のライブラリはお金がかかるので、みなさん気をつけて計画的に使用してくださいね!

Xやってるのでぜひフォローお願いします。
@hudebakonosoto

https://twitter.com/hudebakonosoto

Discussion