【CrewAIでマルチエージェントシステムを構築する:究極の楽しいガイド!】
みなさん、こんにちは!今日はマルチエージェントシステムの世界に飛び込みます。そして今回は、CrewAIに注目です!AIエージェントのチームを作って、一緒に作業したり、コミュニケーションしたり、さらには意思決定まで行うことを想像してみてください。CrewAIは、AIエージェントが協力して複雑な目標を達成するのを簡単にするオープンソースのフレームワークです。
このガイドには、説明、例、コードスニペット、そしてちょっとした楽しみが詰まっています。それでは始めましょう!
🧭 CrewAIとは?
CrewAIは、AIシステムの作成と管理を手助けするオープンソースのPythonフレームワークです。CrewAIは、AIエージェントに役割とタスクを割り当て、彼らがシームレスに協力して作業できるようにします。これにより、AIエージェントたちは単独のエージェントよりも大きな問題を解決することができます。
CrewAIの美しさは、役割ベースの設計、柔軟なタスクの委任、そしてエージェント間の協力にあります。これらすべてが使いやすいPythonライブラリでまとめられています。さあ、CrewAIを使って強力なマルチエージェントシステムを構築する方法を探っていきましょう。
🤖 CrewAIの構成要素
エージェント(Agents): 各エージェントはシステム内の自律的なユニットで、特定のタスクを持っています。環境を独自に分析し、意思決定を行い、他のエージェントと動的にやり取りします。
タスク(Tasks): エージェントはタスクを割り当てられます。これはデータ分析からシステム制御まで多岐にわたり、タスクは特定のリソースを必要とするサブタスクに分割されることもあります。
クルー(Crew): エージェントのグループです。クルーはタスクをユニットとして実行し、各エージェントの特有のスキルを最大限に活用します。
ツール(Tools): エージェントはツールを使って行動を実行します。これは検索機能からAPIとの統合まで幅広いです。
プロセス(Processes): プロジェクトマネージャーがプロジェクトを指揮するように、タスクの実行を調整します。
🛡️ CrewAIを試してみる
このガイドでは、次の2つのシステムを構築します:
ウェブ検索ツール:ウェブサイトをスクレイピングし、エージェントが質問に答えられるようにする。
レコメンデーションシステム:学生に最適なコースを提案するシステム。
準備はいいですか?さあ始めましょう!
💪 スタートガイド:インストールとセットアップ
まず最初に、依存関係をインストールして環境をセットアップする必要があります。
仮想環境を作成する:
python -m venv venv source venv/bin/activate # Ubuntuの場合 venv\Scripts\activate # Windowsの場合
依存関係をインストールする:
pip install crewai-tools crewai langchain_openai python-dotenv
環境をセットアップする:
プロジェクト用の新しいフォルダを作成し、OpenAI APIキーを保存するための.envファイルを作成します。
.envファイルに次の内容を追加します:
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を使えばエージェントをシームレスに調整して複雑な目標を達成できます。