0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

crewai - 定義を yaml ファイルで記述・取得する

Last updated at Posted at 2025-08-25

この記事について

マルチAIエージェントを作れるオープンソースのライブラリ、crewaiについて、諸々学んだことをメモ。

基本編はこちら。

この記事では、エージェントやタスクなどの定義をyamlファイルに記述し、そこから取得する方法をまとめます。
(crewai固有の内容というよりは、Pythonでyamlファイルを扱う基本がわかっていればクリアできる内容です)

この記事でも、簡単に動かせる Google Colab を使用することを前提に書きます。
また、LLMはBedrock のモデルを利用する前提で書きます。

yaml ファイルを扱う

yaml ファイルの記述

エージェントの yaml ファイルの例

agent.yaml
customer_support_agent:
  role: >
    お客様対応の専門家
  goal: >
    お客様の質問に対応し、会社のポリシーに基づく正確な情報を与えることにより返品・返金の要求に対応する。
  backstory: >
    あなたは献身的なお客様対応の専門家で、効果的で礼儀正しい対応を信条としています。お客様の満足を保証するため、技術的な質問についてはTechnical Support Agent と協力します。

タスクの yaml ファイルの例

task.yaml
support_task:
  description: >
    お客様の次の質問に答えてください。: {customer_query}
  expected_output: >
    返金のポリシーに関する詳細な説明
  agent: customer_support_agent

yaml ファイルのアップロード

上記のような yaml ファイルを、colabのノートブックと同じディレクトリに保存すると以下のように見えるはずです。

image.png

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 を表示すると、それぞれ以下のように出力されます。

image.png

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シャツを注文したのですが、届いた時点で穴があいていました。返金してください。"})

結果

正常に実行できていれば、以下のような結果が返ってきます。

image.png

※返金のポリシー自体がハルシネーションであることは、基本編と同様です。こうしたハルシネーショんを避けるためのツールやガードレールの使い方は、今後随時記事を掲載していきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?