見出し画像

【CrewAIでマルチエージェントシステムを構築する:究極の楽しいガイド!】

みなさん、こんにちは!今日はマルチエージェントシステムの世界に飛び込みます。そして今回は、CrewAIに注目です!AIエージェントのチームを作って、一緒に作業したり、コミュニケーションしたり、さらには意思決定まで行うことを想像してみてください。CrewAIは、AIエージェントが協力して複雑な目標を達成するのを簡単にするオープンソースのフレームワークです。

このガイドには、説明、例、コードスニペット、そしてちょっとした楽しみが詰まっています。それでは始めましょう!


🧭 CrewAIとは?

CrewAIは、AIシステムの作成と管理を手助けするオープンソースのPythonフレームワークです。CrewAIは、AIエージェントに役割とタスクを割り当て、彼らがシームレスに協力して作業できるようにします。これにより、AIエージェントたちは単独のエージェントよりも大きな問題を解決することができます。

CrewAIの美しさは、役割ベースの設計、柔軟なタスクの委任、そしてエージェント間の協力にあります。これらすべてが使いやすいPythonライブラリでまとめられています。さあ、CrewAIを使って強力なマルチエージェントシステムを構築する方法を探っていきましょう。

🤖 CrewAIの構成要素

  • エージェント(Agents): 各エージェントはシステム内の自律的なユニットで、特定のタスクを持っています。環境を独自に分析し、意思決定を行い、他のエージェントと動的にやり取りします。

  • タスク(Tasks): エージェントはタスクを割り当てられます。これはデータ分析からシステム制御まで多岐にわたり、タスクは特定のリソースを必要とするサブタスクに分割されることもあります。

  • クルー(Crew): エージェントのグループです。クルーはタスクをユニットとして実行し、各エージェントの特有のスキルを最大限に活用します。

  • ツール(Tools): エージェントはツールを使って行動を実行します。これは検索機能からAPIとの統合まで幅広いです。

  • プロセス(Processes): プロジェクトマネージャーがプロジェクトを指揮するように、タスクの実行を調整します。

🛡️ CrewAIを試してみる

このガイドでは、次の2つのシステムを構築します:

  1. ウェブ検索ツール:ウェブサイトをスクレイピングし、エージェントが質問に答えられるようにする。

  2. レコメンデーションシステム:学生に最適なコースを提案するシステム。

準備はいいですか?さあ始めましょう!

💪 スタートガイド:インストールとセットアップ

まず最初に、依存関係をインストールして環境をセットアップする必要があります。

  1. 仮想環境を作成する

    1. python -m venv venv source venv/bin/activate # Ubuntuの場合 venv\Scripts\activate # Windowsの場合

  2. 依存関係をインストールする

    1. pip install crewai-tools crewai langchain_openai python-dotenv

  3. 環境をセットアップする

    • プロジェクト用の新しいフォルダを作成し、OpenAI APIキーを保存するための.envファイルを作成します。

    • .envファイルに次の内容を追加します:

      1. OPENAI_API_KEY=sk-proj-7XyPjkdaG_gDl0_...

🛠️ 最初のエージェントを作る:ウェブ検索ツール

このツールでは、ウェブサイトからコンテンツをスクレイピングし、それを保存して質問に答えるのに使います。

依存関係のインポート

まず、app.pyというファイルを作成し、次の内容をインポートします:

from crewai_tools import ScrapeWebsiteTool, FileWriterTool, TXTSearchTool
from crewai import Agent, Task, Crew
import os
from dotenv import load_dotenv

# 環境変数を読み込む
load_dotenv()
os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')

ウェブサイトのスクレイピング 🛏️

ScrapeWebsiteToolを使って、Wikipediaページからテキストを抽出します:

tool = ScrapeWebsiteTool(website_url='https://en.wikipedia.org/wiki/Artificial_Intelligence')
text = tool.run()
print(text)

抽出したテキストをファイルに書き込む

FileWriterToolを使って、スクレイピングしたコンテンツをファイルに保存します:

file_writer_tool = FileWriterTool()
text = text.encode("ascii", "ignore").decode()
result = file_writer_tool._run(filename='ai.txt', content=text, overwrite=True)
print(result)

テキスト検索ツールの設定 🔎

次に、TXTSearchToolを設定して、ai.txtの内容を検索できるようにします:

tool = TXTSearchTool(txt='ai.txt')

タスク用エージェントの作成

抽出した内容に基づいて質問に答えるデータアナリストエージェントを作成します:

data_analyst = Agent(
    role='Educator',
    goal='Based on the context provided, answer the question - What is Natural Language Processing?',
    backstory='You are a data expert',
    verbose=True,
    allow_delegation=False,
    tools=[tool]
)

test_task = Task(
    description="Understand the topic and give the correct response",
    tools=[tool],
    agent=data_analyst,
    expected_output='Give a correct response'
)

crew = Crew(
    agents=[data_analyst],
    tasks=[test_task]
)
output = crew.kickoff()
print(output)

📣 レコメンデーションキャンペーンの生成

次は楽しい部分です!学生の目標やスキルに基づいて最適なコースを提案する会社を運営していると想像してみてください。

依存関係のインポート

from crewai import Agent, Task, Crew, Process
import pandas as pd
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv

load_dotenv()
os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')

LLMモデルの定義

コンテンツを分析するために使用する言語モデルを定義します:

llm = ChatOpenAI(
    model="gpt-3.5-turbo-16k",
    temperature=0.1,
    max_tokens=8000
)

データセットの準備 🤞

学生のプロフィールと推奨されるコースを含むCSVファイルを準備します:

csv = '''Academic Goals, Major, Hobbies, Computer Skills, Interest in Languages
To become a software engineer, Computer Science, Gaming, Advanced, Spanish, 3.7
...'''
from io import StringIO
csvStringIO = StringIO(csv)
df_customers = pd.read_csv(csvStringIO, sep=",")

エージェントの作成

このタスクのためのエージェントを定義します:

student_profiler = Agent(
  role='student_profiler',
  goal='''From limited data, logically deduce student profiles.''',
  backstory='You are an expert psychologist.',
  llm=llm, allow_delegation=False, verbose=True)

course_specialist = Agent(
     role='course specialist',
     goal='Match the suitable course to the students',
     backstory='You have exceptional knowledge of the courses.',
     llm=llm, allow_delegation=False, verbose=True)

エージェントのタスクを定義

各エージェントが実行するタスクを定義します:

def get_ad_campaign_task(agent, customer_description, courses):
  return Task(description=f"You're creating a targeted marketing campaign tailored to the student's profile.",
              agent=agent, expected_output='A refined version of the marketing campaign.')

クルーの実行

df_output_list = []
for index, row in df_customers.iterrows():
  customer_description = f'Academic goals: {row["Academic Goals"]}, Major: {row[" Major"]}.'
  task1 = get_ad_campaign_task(student_profiler, customer_description, courses)
  targetting_crew = Crew(agents=[student_profiler, course_specialist], tasks=[task1], process=Process.sequential)
  targetting_result = targetting_crew.kickoff()
  df_output_list.append({'customer': customer_description, 'targeted_courses': targetting_result})

🎉 アプリを実行する

アプリを次のコマンドで実行します:

python app.py

これで完了です!出力はpandasのDataFrameに期待通り表示されます。

⭐ 締めくくり

CrewAIは、AIエージェントが協力し、意思決定を行い、パフォーマンスを向上させるための可能性の世界を開きます。検索ツールを構築する場合でも、レコメンデーションシステムを構築する場合でも、CrewAIを使えばエージェントをシームレスに調整して複雑な目標を達成できます。

いいなと思ったら応援しよう!

-D-
この記事を最後まで読んでくださり、ありがとうございます。少しでも役に立ったり、楽しんでいただけたなら、とても嬉しいです。 もしよろしければ、サポートを通じてご支援いただけると、新たなコンテンツの制作や専門家への取材、さらに深いリサーチ活動に充てることができます。