Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
- Eine kostenpflichtige F2- oder höhere Fabric-Kapazität oder eine Power BI Premium pro Kapazität (P1 oder höher) mit aktivierter Microsoft Fabric-Kapazität
- Fabric-Daten-Agent-Mandanteneinstellungen sind aktiviert.
- Die geoübergreifende Verarbeitung für KI ist aktiviert.
- Das geoübergreifende Speichern für KI ist aktiviert.
- Mindestens eine davon mit Daten: Ein Warehouse, ein Lakehouse, ein oder mehrere Power BI-Semantikmodelle, eine KQL-Datenbank oder eine Ontologie.
- Power BI-Semantikmodelle über den Mandantenwechsel von XMLA-Endpunkten sind für Power BI-Semantikmodelldatenquellen aktiviert.
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.
Erstellen Sie ein neues Notebook im Arbeitsbereich, in dem Sie Ihren Fabric-Datenagent erstellen möchten.
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.
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)Wählen Sie "Alle ausführen" aus.
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:
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:
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:
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:
dimcustomerdimdatedimgeographydimproductdimproductcategorydimpromotiondimresellerdimsalesterritoryfactinternetsalesfactresellersales
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.
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:
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
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:
Das Feld Datenagent veröffentlichen wird geöffnet, wie in diesem Screenshot gezeigt:
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:
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:
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:
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:
Bevor Sie den Fabric-Daten-Agent veröffentlichen, verfügt er nicht über einen veröffentlichten URL-Wert, wie im folgenden Screenshot gezeigt:
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:
- Ein Abfrage-Timeout (siehe Beispiel unten), um endlose Schleifen zu vermeiden.
- Minimale Abrufhäufigkeit (beginnen Sie bei 2 bis 5 Sekunden; erhöhen Sie nur bei Bedarf).
- Bereinigung von erstellten Threads oder Ressourcen nach Abschluss.
- 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)