この記事について
マルチAIエージェントを作れるオープンソースのライブラリ、crewaiについて、諸々学んだことをメモ。
基本編はこちら。
この記事では、エージェントやタスクなどの定義をyamlファイルに記述し、そこから取得する方法をまとめます。
(crewai固有の内容というよりは、Pythonでyamlファイルを扱う基本がわかっていればクリアできる内容です)
この記事でも、簡単に動かせる Google Colab を使用することを前提に書きます。
また、LLMはBedrock のモデルを利用する前提で書きます。
yaml ファイルを扱う
yaml ファイルの記述
エージェントの yaml ファイルの例
customer_support_agent:
role: >
お客様対応の専門家
goal: >
お客様の質問に対応し、会社のポリシーに基づく正確な情報を与えることにより返品・返金の要求に対応する。
backstory: >
あなたは献身的なお客様対応の専門家で、効果的で礼儀正しい対応を信条としています。お客様の満足を保証するため、技術的な質問についてはTechnical Support Agent と協力します。
タスクの yaml ファイルの例
support_task:
description: >
お客様の次の質問に答えてください。: {customer_query}
expected_output: >
返金のポリシーに関する詳細な説明
agent: customer_support_agent
yaml ファイルのアップロード
上記のような yaml ファイルを、colabのノートブックと同じディレクトリに保存すると以下のように見えるはずです。
yaml ファイルの読み込み
yaml ファイルから情報を読み込むには、以下のようなコードを使います。
import yaml
# yaml ファイルからエージェントの情報をロードする
with open("agent.yaml") as file:
agent_info = yaml.safe_load(file)
# yaml ファイルからタスクの情報をロードする
with open("task.yaml") as file:
task_info = yaml.safe_load(file)
agent_info
, task_info
を表示すると、それぞれ以下のように出力されます。
yaml ファイルから読み込んだ情報を使って Agent, Task を作り実行
上記の情報を使って Crew を実行する例です。
インストールは必須です。
!pip install crewai
!pip install boto3
# crewai のインポート
from crewai import Agent, Task, Crew, Process, LLM
# Bedrock の利用に必要な環境変数の設定
import os
os.environ['AWS_ACCESS_KEY_ID'] = "作成したIAMユーザーのアクセスキーID"
os.environ['AWS_SECRET_ACCESS_KEY'] = "作成したIAMユーザーのシークレットアクセスキー"
os.environ['AWS_DEFAULT_REGION'] = "リージョン(ap-northeast-1 など)"
# 利用するモデルの指定(今回は claude 3.5 sonnet を利用)
claude_llm = LLM(
model="anthropic.claude-3-5-sonnet-20240620-v1:0"
)
# ここが今回のポイント
# 定義した yaml ファイルから情報を読み込んでいる
customer_support_agent = Agent(
role=agent_info['customer_support_agent']['role'],
goal=agent_info['customer_support_agent']['goal'],
backstory=agent_info['customer_support_agent']['backstory'],
tools=[],
llm=claude_llm,
verbose=True
)
support_task = Task(
description=task_info['support_task']['description'],
expected_output=task_info['support_task']['expected_output'],
agent=customer_support_agent
)
# Crew の定義
crew = Crew(
agents=[customer_support_agent],
tasks=[support_task]
)
# 呼び出し
result = crew.kickoff({"customer_query": "Tシャツを注文したのですが、届いた時点で穴があいていました。返金してください。"})
結果
正常に実行できていれば、以下のような結果が返ってきます。
※返金のポリシー自体がハルシネーションであることは、基本編と同様です。こうしたハルシネーショんを避けるためのツールやガードレールの使い方は、今後随時記事を掲載していきます。