Aller au contenu principal

Traçage CrewAI

Traçage CrewAI avec l'autolog

CrewAI est un framework open source pour orchestrer des agents d'IA autonomes et de jeu de rôle.

MLflow Tracing offre une capacité de traçage automatique pour CrewAI, un framework open source pour la création d'applications multi-agents. En activant le traçage automatique pour CrewAI en appelant la fonction mlflow.crewai.autolog, MLflow capturera les traces imbriquées pour l'exécution du workflow CrewAI et les consignera dans l'Experimentation MLflow active.

Python
import mlflow

mlflow.crewai.autolog()
remarque

Sur les clusters de compute Serverless, la journalisation automatique pour les cadres de traçage genAI n'est pas activée automatiquement. Vous devez activer explicitement l'autologging en appelant la fonction mlflow.<library>.autolog() appropriée pour les intégrations spécifiques que vous souhaitez suivre.

Les traces MLflow capturent automatiquement les informations suivantes sur les agents CrewAI :

  • Tâches et agent qui exécute chaque tâche.
  • Chaque LLM effectue des appels avec des invites d'entrée, des réponses de complétion et diverses métadonnées.
  • Opérations de chargement et d'écriture de la mémoire
  • Latence de chaque opération
  • Toute exception si levée
remarque

Sur les clusters de compute serverless, l'autologging n'est pas activé automatiquement. Vous devez appeler explicitement mlflow.crewai.autolog() pour activer le traçage automatique de cette intégration.

remarque

Actuellement, l'intégration MLflow CrewAI ne prend en charge le traçage que pour l'exécution synchrone des tâches. Les tâches asynchrones et le démarrage ne sont pas pris en charge pour le moment.

Prérequis

Pour utiliser MLflow Tracing avec CrewAI, vous devez installer MLflow et la bibliothèque crewai (qui inclut crewai_tools).

Pour les environnements de développement, installez le package MLflow complet avec les extras Databricks et crewai:

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

Le package mlflow[databricks] complet inclut toutes les fonctionnalités pour le développement local et l’expérimentation sur Databricks.

remarque

MLflow 3 est fortement recommandé pour la meilleure expérience de traçage avec CrewAI.

Avant d'exécuter les exemples, vous devrez configurer votre environnement :

Pour les utilisateurs en dehors des notebooks Databricks : Définissez vos variables d'environnement Databricks :

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

Pour les utilisateurs dans les Notebooks Databricks : ces identifiants sont définis automatiquement pour vous.

Clés API : Assurez-vous que toutes les clés API de fournisseur LLM nécessaires sont configurées. Pour une utilisation en production, utilisez AI Gateway ou les secrets Databricks au lieu de valeurs codées en dur :

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

Exemple d'utilisation

Tout d'abord, activez le traçage automatique pour CrewAI et, en option, créez une expérimentation MLflow pour y écrire les traces. Cela vous aide à mieux organiser vos traces.

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")

Ensuite, définissez un workflow multi-agents en utilisant CrewAI. L'exemple suivant définit un agent de planification de voyage qui utilise la capacité de recherche web comme outil.

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={&quot;preference&quot;: &quot;personal&quot;}
)

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={
&quot;sources&quot;: [string_source],
&quot;metadata&quot;: {&quot;preference&quot;: &quot;personal&quot;},
},
)

result = crew.kickoff()
return result


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

Pour les environnements de production, utilisez AI Gateway ou les secrets Databricks au lieu de valeurs codées en dur ou de variables d'environnement pour une gestion sécurisée des clés d'API.

Désactiver le suivi automatique

Le traçage automatique pour CrewAI peut être désactivé globalement en appelant mlflow.crewai.autolog(disable=True) ou mlflow.autolog(disable=True).