Freigeben über


Ablaufverfolgung für CrewAI

CrewAI-Verfolgung über Autolog

CrewAI ist ein Open-Source-Framework für die Orchestrierung von Rollenspiel-, autonomen KI-Agenten.

Die MLflow-Ablaufverfolgung bietet automatische Ablaufverfolgungsfunktionen für CrewAI, ein Open-Source-Framework zum Erstellen von Multi-Agent-Anwendungen. Durch das Aktivieren der automatischen Ablaufverfolgung für CrewAI durch Aufruf der mlflow.crewai.autolog-Funktion erfasst MLflow geschachtelte Ablaufverfolgungen für die Ausführung des CrewAI-Workflows und protokolliert diese im aktiven MLflow-Experiment.

import mlflow

mlflow.crewai.autolog()

Die MLflow-Ablaufverfolgung erfasst automatisch die folgenden Informationen zu CrewAI-Agenten:

  • Aufgaben und Agent, die jede Aufgabe ausführen
  • Alle LLM-Aufrufe mit Eingabeaufforderungen, Abschlussantworten und verschiedenen Metadaten
  • Speicherlade- und Schreibvorgänge
  • Latenz der einzelnen Vorgänge
  • Jede ausgelöste Ausnahme

Hinweis

Derzeit unterstützt die MLflow CrewAI-Integration nur die Ablaufverfolgung für die synchrone Aufgabenausführung. Asynchrone Aufgaben und Start werden derzeit nicht unterstützt.

Voraussetzungen

Um die MLflow-Ablaufverfolgung mit CrewAI zu verwenden, müssen Sie MLflow und die crewai Bibliothek (einschließlich crewai_tools) installieren.

Entwicklung

Für Entwicklungsumgebungen installieren Sie das vollständige MLflow-Paket mit Databricks-Zusatzkomponenten und crewai:

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

Das vollständige mlflow[databricks] Paket enthält alle Features für die lokale Entwicklung und Das Experimentieren mit Databricks.

Produktion

Für die Produktionsimplementierung installieren Sie mlflow-tracing und crewai.

pip install --upgrade mlflow-tracing crewai

Das mlflow-tracing-Paket ist für den Produktionseinsatz optimiert.

Hinweis

Es wird dringend empfohlen, MLflow 3 für das beste Tracking-Erlebnis mit CrewAI zu verwenden.

Bevor Sie die Beispiele ausführen, müssen Sie Ihre Umgebung konfigurieren:

Für Benutzer außerhalb von Databricks-Notizbüchern: Legen Sie Ihre Databricks-Umgebungsvariablen fest:

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

Für Benutzer innerhalb von Databricks-Notizbüchern: Diese Anmeldeinformationen werden automatisch für Sie festgelegt.

API-Schlüssel: Stellen Sie sicher, dass alle erforderlichen LLM-Anbieter-API-Schlüssel konfiguriert sind. Verwenden Sie für die Produktionsverwendung KI-Gateway oder Databricks-Schlüssel anstelle hartcodierter Werte:

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

Anwendungsbeispiel

Aktivieren Sie zunächst die automatische Ablaufverfolgung für CrewAI, und erstellen Sie optional ein MLflow-Experiment, in das die Ablaufverfolgungen geschrieben werden. Dadurch können Sie Ihre Ablaufverfolgungen besser organisieren.

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

Definieren Sie als Nächstes einen Multi-Agent-Workflow mit CrewAI. Im folgenden Beispiel wird ein Reiseplaner-Agent definiert, der websuchfunktion als Tool verwendet.

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

Warnung

Verwenden Sie für Produktionsumgebungen AI-Gateway oder Databricks-Geheime Schlüssel anstelle hartcodierter Werte oder Umgebungsvariablen für die sichere API-Schlüsselverwaltung.

Deaktivieren der automatischen Ablaufverfolgung

Die automatische Ablaufverfolgung für CrewAI kann durch den Aufruf von mlflow.crewai.autolog(disable=True) oder mlflow.autolog(disable=True) global deaktiviert werden.