メインコンテンツまでスキップ

CrewAIトレース

オートログによるCrewAIトレース

CrewAI は、ロールプレイング型の自律型 AI エージェントをオーケストレーションするためのオープンソース フレームワークです。

MLflow Tracing は、マルチエージェント アプリケーションを構築するためのオープンソース フレームワークである CrewAIの自動トレース機能を提供します。mlflow.crewai.autolog 関数 を呼び出すことでCrewAIの自動トレースを有効にする場合、 MLflow は CrewAI ワークフロー実行のネストされたトレースをキャプチャし、それらをアクティブなMLflowエクスペリメントに記録します。

Python
import mlflow

mlflow.crewai.autolog()

MLflow トレースは、CrewAI エージェントに関する次の情報を自動的にキャプチャします。

  • タスクと各タスクを実行するエージェント
  • すべての LLM は、入力プロンプト、完了応答、およびさまざまなメタデータを使用して呼び出します
  • メモリ負荷と書き込み操作
  • 各操作のレイテンシ
  • 例外が発生した場合
注記

現在、MLflow CrewAI 統合では、同期タスク実行のトレースのみがサポートされています。非同期タスクとキックオフは、現在サポートされていません。

前提 条件

MLflow TracingでCrewAIを使用するには、MLflowとcrewai ライブラリ (crewai_tools を含む) をインストールする必要があります。

開発環境の場合は、Databricks の追加機能と crewaiを含む完全な MLflow パッケージをインストールします。

Bash
pip install --upgrade "mlflow[databricks]>=3.1" crewai

フル mlflow[databricks] パッケージには、Databricks でのローカル開発と実験のためのすべての機能が含まれています。

注記

MLflow 3 は、CrewAI で最高のトレース エクスペリエンスを実現することを強くお勧めします。

例を実行する前に、環境を構成する必要があります。

Databricks ノートブックの外部ユーザーの場合 : Databricks 環境変数を設定します。

Bash
export DATABRICKS_HOST="https://your-workspace.cloud.databricks.com"
export DATABRICKS_TOKEN="your-personal-access-token"

Databricks ノートブック内のユーザーの場合 : これらの資格情報は自動的に設定されます。

API キー : 必要な LLM プロバイダー API キーが設定されていることを確認します。

Bash
export OPENAI_API_KEY="your-openai-api-key"
export SERPER_API_KEY="your-serper-api-key"
# Add other provider keys as needed

使用例

まず、 CrewAIの自動トレースを有効にし、オプションでトレースを書き込む MLflow エクスペリメントを作成します。 これにより、トレースをより適切に整理できます。

Python
import mlflow
import os

# Ensure your API keys (e.g., OPENAI_API_KEY, SERPER_API_KEY) are set in your environment
# os.environ["OPENAI_API_KEY"] = "your-openai-key"
# os.environ["SERPER_API_KEY"] = "your-serper-key"

# Turn on auto tracing by calling mlflow.crewai.autolog()
mlflow.crewai.autolog()


# Set up MLflow tracking to Databricks
mlflow.set_tracking_uri("databricks")
mlflow.set_experiment("/Shared/crewai-demo")

次に、CrewAIを使用してマルチエージェントワークフローを定義します。次の例では、Web 検索機能をツールとして使用するトリップ プランナー エージェントを定義しています。

Python
from crewai import Agent, Crew, Task
from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
from crewai_tools import SerperDevTool, WebsiteSearchTool

from textwrap import dedent

content = "Users name is John. He is 30 years old and lives in San Francisco."
string_source = StringKnowledgeSource(
content=content, metadata={"preference": "personal"}
)

search_tool = WebsiteSearchTool()


class TripAgents:
def city_selection_agent(self):
return Agent(
role="City Selection Expert",
goal="Select the best city based on weather, season, and prices",
backstory="An expert in analyzing travel data to pick ideal destinations",
tools=[
search_tool,
],
verbose=True,
)

def local_expert(self):
return Agent(
role="Local Expert at this city",
goal="Provide the BEST insights about the selected city",
backstory="""A knowledgeable local guide with extensive information
about the city, it's attractions and customs""",
tools=[search_tool],
verbose=True,
)


class TripTasks:
def identify_task(self, agent, origin, cities, interests, range):
return Task(
description=dedent(
f"""
Analyze and select the best city for the trip based
on specific criteria such as weather patterns, seasonal
events, and travel costs. This task involves comparing
multiple cities, considering factors like current weather
conditions, upcoming cultural or seasonal events, and
overall travel expenses.
Your final answer must be a detailed
report on the chosen city, and everything you found out
about it, including the actual flight costs, weather
forecast and attractions.

Traveling from: {origin}
City Options: {cities}
Trip Date: {range}
Traveler Interests: {interests}
"""
),
agent=agent,
expected_output="Detailed report on the chosen city including flight costs, weather forecast, and attractions",
)

def gather_task(self, agent, origin, interests, range):
return Task(
description=dedent(
f"""
As a local expert on this city you must compile an
in-depth guide for someone traveling there and wanting
to have THE BEST trip ever!
Gather information about key attractions, local customs,
special events, and daily activity recommendations.
Find the best spots to go to, the kind of place only a
local would know.
This guide should provide a thorough overview of what
the city has to offer, including hidden gems, cultural
hotspots, must-visit landmarks, weather forecasts, and
high level costs.
The final answer must be a comprehensive city guide,
rich in cultural insights and practical tips,
tailored to enhance the travel experience.

Trip Date: {range}
Traveling from: {origin}
Traveler Interests: {interests}
"""
),
agent=agent,
expected_output="Comprehensive city guide including hidden gems, cultural hotspots, and practical travel tips",
)


class TripCrew:
def __init__(self, origin, cities, date_range, interests):
self.cities = cities
self.origin = origin
self.interests = interests
self.date_range = date_range

def run(self):
agents = TripAgents()
tasks = TripTasks()

city_selector_agent = agents.city_selection_agent()
local_expert_agent = agents.local_expert()

identify_task = tasks.identify_task(
city_selector_agent,
self.origin,
self.cities,
self.interests,
self.date_range,
)
gather_task = tasks.gather_task(
local_expert_agent, self.origin, self.interests, self.date_range
)

crew = Crew(
agents=[city_selector_agent, local_expert_agent],
tasks=[identify_task, gather_task],
verbose=True,
memory=True,
knowledge={
"sources": [string_source],
"metadata": {"preference": "personal"},
},
)

result = crew.kickoff()
return result


trip_crew = TripCrew("California", "Tokyo", "Dec 12 - Dec 20", "sports")
result = trip_crew.run()

自動トレースを無効にする

CrewAI の自動トレースは、 mlflow.crewai.autolog(disable=True) または mlflow.autolog(disable=True)を呼び出すことで、グローバルに無効にできます。