Freigeben über


Fabric Data Agent-Beispiel mit dem AdventureWorks-Dataset (Vorschau)

In diesem Artikel wird gezeigt, wie Sie einen Datenagenten in Microsoft Fabric mithilfe eines Lakehouses als Beispieldatenquelle einrichten. Zuerst erstellen und füllen wir ein Seehaus, erstellen dann einen Fabric Datenagenten und fügen das Seehaus hinzu. Wenn Sie bereits über ein Power BI semantisches Modell verfügen, stellen Sie sicher, dass Sie über einen Datenagenten Leseberechtigung haben (Schreibberechtigung ist nur erforderlich, um das semantische Modell zu ändern oder Funktionen wie Prep for AI zu verwenden). Führen Sie für ein Lager, eine KQL-Datenbank oder eine Ontologie die gleichen Schritte aus, und wählen Sie stattdessen diese Quelle aus. Obwohl diese exemplarische Vorgehensweise ein Seehaus verwendet, ist das Muster für andere Quellen identisch; nur die Datenquellenauswahl unterscheidet sich.

Von Bedeutung

Dieses Feature befindet sich in der Vorschauphase.

Voraussetzungen

Von Bedeutung

Stellen Sie sicher, dass die eigenständige Copilot-Erfahrung im Power BI Admin-Portal aktiviert ist (Mandanteneinstellungen > Copilot > Eigenständige Copilot-Erfahrung). Wenn sie nicht aktiviert ist, können Sie den Daten-Agent nicht innerhalb Copilot Szenarien verwenden, auch wenn andere Copilot Mandantenoptionen aktiviert sind. Ausführliche Informationen finden Sie unter Copilot in Power BI Mandanteneinstellungen.

Erstellen eines Seehauses mit AdventureWorksLH

Erstellen Sie zuerst ein Lakehouse und füllen Sie es mit den erforderlichen Daten auf.

Wenn Sie bereits über eine Instanz von AdventureWorksLH in einem Seehaus (oder einem Lagerhaus) verfügen, können Sie diesen Schritt überspringen. Wenn nicht, können Sie die folgenden Anweisungen aus einem Fabric Notizbuch verwenden, um das Seehaus mit den Daten aufzufüllen.

  1. Erstellen Sie ein neues Notizbuch im Arbeitsbereich, in dem Sie Ihren Fabric-Daten-Agent erstellen möchten.

  2. Wählen Sie auf der linken Seite des Explorer-Bereichs + Datenquellen aus. Mit dieser Option können Sie ein vorhandenes Seehaus hinzufügen oder ein neues Seehaus erstellen. Um Klarheit zu haben, erstellen Sie ein neues Seehaus, und weisen Sie ihm einen Namen zu.

  3. Fügen Sie in der obersten Zelle den folgenden Codeschnipsel hinzu:

    import pandas as pd
    from tqdm.auto import tqdm
    base = "https://synapseaisolutionsa.z13.web.core.windows.net/data/AdventureWorks"
    
    # load list of tables
    df_tables = pd.read_csv(f"{base}/adventureworks.csv", names=["table"])
    
    for table in (pbar := tqdm(df_tables['table'].values)):
        pbar.set_description(f"Uploading {table} to lakehouse")
    
        # download
        df = pd.read_parquet(f"{base}/{table}.parquet")
    
        # save as lakehouse table
        spark.createDataFrame(df).write.mode('overwrite').saveAsTable(table)
    
  4. Wählen Sie "Alle ausführen" aus.

Screenshot eines Notizbuchs mit dem AdventureWorks-Uploadcode.

Nach ein paar Minuten füllt sich das Seehaus mit den notwendigen Daten.

Vorsicht

Notizbücher, die weiterhin ausgeführt werden (z. B. aufgrund versehentlicher Endlosschleifen oder konstanten Abfragens), können die Fabric-Kapazität auf unbestimmte Zeit beanspruchen. Nachdem die Daten geladen wurden, beenden Sie alle aktiven Zellen, und beenden Sie die Notizbuchsitzung (Notizbuchsymbolleiste Beenden > Sitzung), wenn Sie sie nicht mehr benötigen. Vermeiden Sie das Hinzufügen von langen Schleifen ohne Timeout.

Erstellen Sie einen Fabric Daten-Agenten

Um einen neuen Fabric-Datenagent zu erstellen, navigieren Sie zu Ihrem Arbeitsbereich und wählen Sie die Schaltfläche + Neues Element aus, wie im Screenshot gezeigt.

Screenshot zeigt, wo Fabric-Datenagenten erstellt werden können.

Suchen Sie auf der Registerkarte "Alle Elemente" nach Fabric Data Agent, um die entsprechende Option zu finden. Nach der Auswahl werden Sie aufgefordert, einen Namen für Ihren Fabric Daten-Agent anzugeben, wie in diesem Screenshot gezeigt:

Screenshot zeigt, wo der Name für den Fabric Data Agent angegeben werden soll.

Fahren Sie nach der Eingabe des Namens mit den folgenden Schritten fort, um den Fabric Daten-Agent an Ihre spezifischen Anforderungen auszurichten.

Wählen Sie die Daten aus

Wählen Sie das Seehaus aus, das Sie im vorherigen Schritt erstellt haben, und wählen Sie dann "Hinzufügen" aus, wie im folgenden Screenshot gezeigt:

Screenshot: Schritt „Lakehouse hinzufügen“

Sobald das Seehaus als Datenquelle hinzugefügt wird, zeigt der Bereich Explorer auf der linken Seite der Fabric-Daten-Agent-Seite den Lakehouse-Namen an. Wählen Sie das Seehaus aus, um alle verfügbaren Tabellen anzuzeigen. Verwenden Sie die Kontrollkästchen, um die Tabellen auszuwählen, die Sie der KI zur Verfügung stellen möchten. Wählen Sie für dieses Szenario die folgenden Tabellen aus:

  • dimcustomer
  • dimdate
  • dimgeography
  • dimproduct
  • dimproductcategory
  • dimpromotion
  • dimreseller
  • dimsalesterritory
  • factinternetsales
  • factresellersales

Screenshot, der zeigt, wo Sie Tabellen für KI auswählen können.

Berechtigungen für semantische Modelle in Daten-Agents

Benutzer benötigen nur Leseberechtigungen für ein Power BI semantischen Modell, um es einem Daten-Agent hinzuzufügen und Fragen über den Agent zu stellen. Arbeitsbereichszugriff (Mitgliederrolle) und Buildberechtigung sind für die Interaktion über Daten-Agents nicht erforderlich. Schreibberechtigungen sind nur zum Ändern des Semantikmodells oder zum Verwenden von Funktionen wie Prep für KI erforderlich.

Diese Berechtigungsänderung gilt nur für Interaktionen über Daten-Agents. Andere Zugriffsmuster (z. B. "In Excel analysieren" oder "Direkte Berichtsautorschaft") folgen standardmäßigen Power BI Berechtigungen.

Bereitstellen von Anweisungen

Um Anweisungen hinzuzufügen, wählen Sie die Schaltfläche " Daten-Agent-Anweisungen " aus, um den Anweisungenbereich auf der rechten Seite zu öffnen. Sie können die folgenden Anweisungen hinzufügen.

Die AdventureWorksLH Datenquelle enthält Informationen aus drei Tabellen:

  • dimcustomer, für detaillierte Kundendemografien und Kontaktinformationen
  • dimdatefür datumsbezogene Daten – z. B. Kalender- und Geschäftsinformationen
  • dimgeography, für geografische Details, einschließlich Ortsnamen und Länderregionencodes.

Verwenden Sie diese Datenquelle für Abfragen und Analysen, die Kundendetails, zeitbasierte Ereignisse und geografische Standorte umfassen.

Screenshot, der zeigt, wo Sie die Anweisungen für die KI bereitstellen können.

Bereitstellen von Beispielen

Um Beispielabfragen hinzuzufügen, wählen Sie die Schaltfläche " Beispielabfragen " aus, um den Beispielabfragebereich auf der rechten Seite zu öffnen. Dieser Bereich bietet Optionen zum Hinzufügen oder Bearbeiten von Beispielabfragen für alle unterstützten Datenquellen. Für jede Datenquelle können Sie " Beispielabfragen hinzufügen" oder "Bearbeiten" auswählen, um die relevanten Beispiele einzugeben, wie im folgenden Screenshot gezeigt:

Screenshot, der zeigt, wo Sie die Beispiele hinzufügen können, die Sie der KI bereitstellen.

Hier sollten Sie Beispielabfragen für die von Ihnen erstellte Lakehouse-Datenquelle hinzufügen.

Question: Calculate the average percentage increase in sales amount for repeat purchases for every zipcode. Repeat purchase is a purchase subsequent to the first purchase (the average should always be computed relative to the first purchase)

SELECT AVG((s.SalesAmount - first_purchase.SalesAmount) / first_purchase.SalesAmount * 100) AS AvgPercentageIncrease
FROM factinternetsales s
INNER JOIN dimcustomer c ON s.CustomerKey = c.CustomerKey
INNER JOIN dimgeography g ON c.GeographyKey = g.GeographyKey
INNER JOIN (
    SELECT *
    FROM (
        SELECT
            CustomerKey,
            SalesAmount,
            OrderDate,
            ROW_NUMBER() OVER (PARTITION BY CustomerKey ORDER BY OrderDate) AS RowNumber
        FROM factinternetsales
    ) AS t
    WHERE RowNumber = 1
) first_purchase ON s.CustomerKey = first_purchase.CustomerKey
WHERE s.OrderDate > first_purchase.OrderDate
GROUP BY g.PostalCode;

Question: Show the monthly total and year-to-date total sales. Order by year and month.

SELECT
    Year,
    Month,
    MonthlySales,
    SUM(MonthlySales) OVER (PARTITION BY Year ORDER BY Year, Month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS CumulativeTotal
FROM (
    SELECT
       YEAR(OrderDate) AS Year,
       MONTH(OrderDate) AS Month,
       SUM(SalesAmount) AS MonthlySales
    FROM factinternetsales
    GROUP BY YEAR(OrderDate), MONTH(OrderDate)
) AS t

Screenshot, der das Hinzufügen von SQL-Beispielen zeigt.

Hinweis

Das Hinzufügen von Beispielabfrage-/Fragepaaren wird für Power BI Semantikmodell-Datenquellen derzeit nicht unterstützt.

Testen und Überarbeiten des Fabric-Daten-Agents

Nachdem Sie nun den Fabric-Datenagenten konfiguriert, Anweisungen für den Fabric-Datenagenten hinzugefügt und Beispielabfragen für das Lakehouse bereitgestellt haben, können Sie damit interagieren, indem Sie Fragen stellen und Antworten darauf erhalten. Während Sie den Test fortsetzen, können Sie weitere Beispiele hinzufügen und die Anweisungen verfeinern, um die Leistung des Fabric Daten-Agents weiter zu verbessern. Arbeiten Sie mit Ihren Kollegen zusammen, um Feedback zu sammeln und basierend auf deren Eingaben sicherzustellen, dass die bereitgestellten Beispielabfragen und -anweisungen den Arten von Fragen entsprechen, die sie stellen möchten.

Veröffentlichen Sie den Fabric-Daten-Agent

Nachdem Sie die Leistung des Fabric-Datenagents überprüft haben, können Sie ihn veröffentlichen und für Ihre Kollegen freigeben, die Q&A über Daten durchführen möchten. Wählen Sie in diesem Fall Veröffentlichen aus, wie in diesem Screenshot gezeigt:

Screenshot der Auswahl der Option

Das Feld Datenagent veröffentlichen wird geöffnet, wie in diesem Screenshot gezeigt:

Screenshot, der die Funktion „Datenagent veröffentlichen“ anzeigt.

Wählen Sie in diesem Feld Publish aus, um den Fabric Daten-Agent zu veröffentlichen. Die veröffentlichte URL für den Fabric-Daten-Agent wird angezeigt, wie in diesem Screenshot gezeigt:

Screenshot der veröffentlichten URL.

Verwenden Sie den Fabric-Daten-Agenten in Copilot in Power BI

Sie können den Copilot in Power BI verwenden, um mit dem Fabric-Datenagent nach der Veröffentlichung zu interagieren. Mit Copilot in Power BI können Sie den Daten-Agent und andere Elemente (z. B. Berichte oder semantische Modelle) direkt nutzen, ohne zwischen ihnen wechseln zu müssen.

Wählen Sie im linken Navigationsbereich die Schaltfläche Copilot aus, um die Copilot in Power BI zu öffnen. Wählen Sie als Nächstes im Textfeld unten "Elemente für bessere Ergebnisse hinzufügen" aus, um den Datenagenten hinzuzufügen. Wählen Sie Datenagenten im daraufhin geöffneten Fenster aus. Sie können nur die Daten-Agents sehen, auf die Sie über die Berechtigung zum Zugriff verfügen. Wählen Sie den gewünschten Datenagenten und dann "Bestätigen" aus. In diesem Beispiel wird gezeigt, wie Sie mit einem einzelnen Daten-Agent arbeiten, aber Sie können weitere Elemente hinzufügen , z. B. andere Daten-Agents, Berichte oder semantische Modelle. Der folgende Screenshot veranschaulicht die Schritte mit einem einzelnen Daten-Agent:

Screenshot mit der Schaltfläche Copilot und der Schaltfläche zum Hinzufügen von Elementen wie Data Agents.

Wenn ein Daten-Agent ein Power BI Semantikmodell enthält, benötigen Benutzer nur Leseberechtigungen für dieses semantische Modell, um über Copilot damit zu interagieren. Der Arbeitsbereichszugriff ist nicht erforderlich. Schreibberechtigungen sind weiterhin für Semantikmodelländerungen und vorbereitungen für KI erforderlich.

Nachdem Sie nun den Datenagenten zum Copilot in Power BI hinzugefügt haben, können Sie alle Fragen zu Ihrem Fabric Daten-Agent stellen, wie im folgenden Screenshot gezeigt:

Screenshot, der den Copilot zeigt, der eine Frage beantwortet.

Programmgesteuertes Verwenden des Fabric-Daten-Agents

Sie können den Fabric Daten-Agent programmgesteuert in einem Fabric-Notizbuch verwenden. Um festzustellen, ob der Fabric Daten-Agent einen veröffentlichten URL-Wert aufweist, wählen Sie Settings aus, wie im folgenden Screenshot gezeigt:

Screenshot mit Auswahl der Fabric-Datenagent-Einstellungen.

Bevor Sie den Fabric-Daten-Agent veröffentlichen, verfügt er nicht über einen veröffentlichten URL-Wert, wie im folgenden Screenshot gezeigt:

Der Screenshot zeigt, dass ein Fabric-Datenagent vor der Veröffentlichung keinen veröffentlichten URL-Wert hat.

Wenn Sie den Fabric Daten-Agent noch nicht veröffentlicht haben, können Sie ihn nach den Anweisungen in den vorherigen Schritten veröffentlichen. Anschließend können Sie die veröffentlichte URL kopieren und im Fabric Notizbuch verwenden. Auf diese Weise können Sie den Fabric Daten-Agent abfragen, indem Sie Aufrufe an die Fabric Daten-Agent-API in einem Fabric-Notizbuch durchführen. Fügen Sie die kopierte URL in diesen Codeschnipsel ein. Ersetzen Sie dann die Frage durch jede Abfrage, die für Ihren Fabric Daten-Agent relevant ist. In diesem Beispiel wird \<generic published URL value\> als URL verwendet.

Von Bedeutung

Implementieren Sie beim programmgesteuerten Aufrufen eines Daten-Agents Folgendes:

  1. Ein Abfrage-Timeout (siehe Beispiel unten), um endlose Schleifen zu vermeiden.
  2. Minimale Abrufhäufigkeit (beginnen Sie bei 2 bis 5 Sekunden; erhöhen Sie nur bei Bedarf).
  3. Bereinigung von erstellten Threads oder Ressourcen nach Abschluss.
  4. Notebook-Sitzung wird nach Abschluss heruntergefahren, um Fabric-Kapazität freizugeben.

Hinweis

Passen Sie die Versionspins (openai, synapseml, pandas, tqdm) an die neuesten überprüften Versionen für Ihre Fabric-Laufzeitumgebung an, wenn diese exakten Versionen veraltet sind.

%pip install "openai==1.70.0"
%pip install "synapseml==1.0.5"  # Required for synapse.ml.mlflow (update version as needed)
%pip install pandas tqdm  # Skip if already available in the Fabric runtime
import typing as t
import time
import uuid

# OpenAI SDK internals
from openai import OpenAI
from openai._models import FinalRequestOptions
from openai._types import Omit
from openai._utils import is_given

# SynapseML helper for env config
from synapse.ml.mlflow import get_mlflow_env_config

# Removed unused imports: requests, json, pprint, APIStatusError, SynapseTokenProvider
 
base_url = "https://<generic published base URL value>"
question = "What data sources do you have access to?"

configs = get_mlflow_env_config()

# Create OpenAI Client
class FabricOpenAI(OpenAI):
    def __init__(
        self,
        api_version: str ="2024-05-01-preview",
        **kwargs: t.Any,
    ) -> None:
        self.api_version = api_version
        default_query = kwargs.pop("default_query", {})
        default_query["api-version"] = self.api_version
        super().__init__(
            api_key="",
            base_url=base_url,
            default_query=default_query,
            **kwargs,
        )
    
    def _prepare_options(self, options: FinalRequestOptions) -> None:
        headers: dict[str, str | Omit] = (
            {**options.headers} if is_given(options.headers) else {}
        )
        options.headers = headers
        headers["Authorization"] = f"Bearer {configs.driver_aad_token}"
        if "Accept" not in headers:
            headers["Accept"] = "application/json"
        if "ActivityId" not in headers:
            correlation_id = str(uuid.uuid4())
            headers["ActivityId"] = correlation_id

        return super()._prepare_options(options)

# Pretty printing helper
def pretty_print(messages):
    print("---Conversation---")
    for m in messages:
        print(f"{m.role}: {m.content[0].text.value}")
    print()

fabric_client = FabricOpenAI()
# Create assistant
assistant = fabric_client.beta.assistants.create(model="not used")
# Create thread
thread = fabric_client.beta.threads.create()
# Create message on thread
message = fabric_client.beta.threads.messages.create(thread_id=thread.id, role="user", content=question)
# Create run
run = fabric_client.beta.threads.runs.create(thread_id=thread.id, assistant_id=assistant.id)

# Wait for run to complete (avoid indefinite loop)
terminal_states = {"completed", "failed", "cancelled", "requires_action"}
poll_interval = 2
timeout_seconds = 300  # Adjust based on expected workload
start_time = time.time()

while run.status not in terminal_states:
    if time.time() - start_time > timeout_seconds:
        raise TimeoutError(f"Run polling exceeded {timeout_seconds} seconds (last status={run.status})")
    run = fabric_client.beta.threads.runs.retrieve(
        thread_id=thread.id,
        run_id=run.id,
    )
    print(run.status)
    time.sleep(poll_interval)

if run.status != "completed":
    print(f"Run finished with status: {run.status}")

# Print messages
response = fabric_client.beta.threads.messages.list(thread_id=thread.id, order="asc")
pretty_print(response)

# Delete thread
fabric_client.beta.threads.delete(thread_id=thread.id)