Freigeben über


Beispiel für einen Fabric-Datenagent 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-Semantikmodell (mit den erforderlichen Lese-/Schreibberechtigungen), einem Lager, einer KQL-Datenbank oder einer Ontologie verfügen, führen Sie 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-Verwaltungsportal aktiviert ist (Mandanteneinstellungen > Copilot > Eigenständige Copilot-Erfahrung). Wenn sie nicht aktiviert ist, können Sie den Daten-Agent in Copilot-Szenarien nicht verwenden, auch wenn andere Copilot-Mandantenschalter aktiviert sind. Ausführliche Informationen finden Sie unter Copilot in den 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 Notebook im Arbeitsbereich, in dem Sie Ihren Fabric-Datenagent 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 Abrufs), können fabric-Kapazität unbegrenzt nutzen. 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 eines Fabric-Datenagents

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

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

Suchen Sie auf der Registerkarte „Alle Elemente“ nach Fabric-Datenagent, um die entsprechende Option zu finden. Nach der Auswahl werden Sie gebeten, einen Namen für Ihren Fabric-Datenagent anzugeben, wie in diesem Screenshot gezeigt:

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

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

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 Lakehouse als Datenquelle hinzugefügt wurde, zeigt der Bereich Explorer auf der linken Seite der Seite „Fabric-Datenagent“ 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.

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-Semantikmodelldatenquellen derzeit nicht unterstützt.

Testen und Überarbeiten des Fabric-Datenagents

Nachdem Sie nun den Fabric-Datenagent konfiguriert, Fabric-Datenagent-Anweisungen hinzugefügt und Beispielabfragen für das Lakehouse bereitgestellt haben, können Sie damit interagieren, indem Sie Fragen stellen und Antworten erhalten. Während Sie den Test fortsetzen, können Sie weitere Beispiele hinzufügen und die Anweisungen verfeinern, um die Leistung des Fabric-Datenagents 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, damit Sie ihn dann für Ihre Kollegen freigeben können, die Fragen und Antworten für Daten stellen 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 Veröffentlichen aus, um den Fabric-Datenagent zu veröffentlichen. Die veröffentlichte URL für den Fabric-Datenagent wird angezeigt, wie in diesem Screenshot gezeigt:

Screenshot der veröffentlichten URL.

Verwenden Sie einen Fabric-Daten-Agent in Copilot in Power BI

Sie können den Copilot in Power BI verwenden, um nach der Veröffentlichung mit dem Fabric-Daten-Agent 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 den 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 der Copilot-Schaltfläche und einer Schaltfläche, um Elemente wie Daten-Agenten hinzuzufügen.

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 mit dem Copilot, der eine Frage beantwortet.

Programmgesteuertes Verwenden des Fabric-Datenagents

Sie können den Fabric-Datenagent programmgesteuert in einem Fabric-Notebook verwenden. Um zu ermitteln, ob der Fabric-Daten-Agent einen veröffentlichten URL-Wert aufweist, wählen Sie "Einstellungen" aus, wie im folgenden Screenshot gezeigt:

Screenshot: 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:

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

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-Notebook verwenden. Auf diese Weise können Sie den Fabric-Datenagent abfragen, indem Sie Aufrufe der Fabric-Datenagent-API in einem Fabric-Notizbuch ausführen. Fügen Sie die kopierte URL in diesen Codeschnipsel ein. Ersetzen Sie dann die Frage durch eine für Ihren Fabric-Datenagent relevante Abfrage. 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. Die Notizbuchsitzung wird heruntergefahren, um die Fabric-Kapazität freizugeben.

Hinweis

Passen Sie Versionspins (openai, synapseml, pandas, tqdm) an die neuesten überprüften Versionen für Ihre Fabric-Laufzeit an, wenn diese genauen 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)