Beispiel für KI-Fähigkeiten mit dem AdventureWorks-Dataset (Vorschau)
In diesem Artikel wird beschrieben, wie Sie eine KI-Fähigkeit einrichten, indem Sie ein Seehaus als Datenquelle verwenden. Um den Prozess zu veranschaulichen, erstellen wir zuerst ein Seehaus und fügen ihr dann Daten hinzu. Anschließend erstellen wir eine KI-Fähigkeit und konfigurieren das Seehaus als Datenquelle. Wenn Sie bereits über ein Power BI-Semantikmodell (mit den erforderlichen Lese-/Schreibberechtigungen), einem Lager oder einer KQL-Datenbank verfügen, können Sie dieselben Schritte ausführen, nachdem Sie die KI-Fähigkeit zum Hinzufügen Ihrer Datenquellen erstellt haben. Während sich die hier gezeigten Schritte auf das Seehaus konzentrieren, ist der Prozess für andere Datenquellen ähnlich – Sie müssen nur Anpassungen basierend auf Ihrer spezifischen Auswahl vornehmen.
Wichtig
Dieses Feature befindet sich in der Vorschau.
Voraussetzungen
- Eine kostenpflichtige F64- oder höhere Fabric-Kapazitätsressource
- Der Mandantenwechsel mit KI-Skill ist aktiviert.
- Der Copilot-Mandantenwechsel ist aktiviert.
- Cross-Geo-Verarbeitung für KI ist aktiviert.
- Cross-Geo-Speicherung für KI ist aktiviert.
- Ein Data Warehouse, ein Lakehouse, Power BI-Semantikmodelle und KQL-Datenbanken mit Daten.
- Power BI-Semantikmodelle für XMLA-Endpunkte und die Mandantenumschaltung sind für Power BI-Semantikmodelldatenquellen aktiviert.
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 Ihre KI-Fähigkeit 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.blob.core.windows.net/public/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.
Erstellen einer KI-Fähigkeit
Um eine neue KI-Fähigkeit zu erstellen, navigieren Sie 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 KI-Fähigkeit, um die entsprechende Option zu finden. Nach der Auswahl fordert Sie eine Aufforderung auf, einen Namen für Ihre KI-Fähigkeiten anzugeben, wie in diesem Screenshot gezeigt:
Nachdem Sie den Namen eingegeben haben, fahren Sie mit den folgenden Schritten fort, um die KI-Fähigkeit 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ügenaus. Sobald das Seehaus als Datenquelle hinzugefügt wird, zeigt der bereich Explorer auf der linken Seite der KI-Qualifikationsseite den Namen des Seehauses. 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
cactresellersales
Bereitstellen von Anweisungen
Um KI-Anweisungen hinzuzufügen, wählen Sie die KI-Anweisungen Schaltfläche aus, um den Ki-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 -
dimdate
fü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
Anmerkung
Das Hinzufügen von Beispielabfrage-/Fragepaaren wird für Power BI-Semantikmodelldatenquellen derzeit nicht unterstützt.
Testen und Überarbeiten der KI-Fähigkeiten
Nachdem Sie nun die KI-Fähigkeit konfiguriert, KI-Anweisungen hinzugefügt und Beispielabfragen für das Seehaus bereitgestellt haben, können Sie damit interagieren, indem Sie Fragen stellen und Antworten erhalten. Während Sie mit dem Testen fortfahren, können Sie weitere Beispiele hinzufügen und die Anweisungen verfeinern, um die Leistung der KI-Fähigkeiten 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.
Programmgesteuertes Verwenden der KI-Fähigkeit
Sie können die KI-Fähigkeit programmgesteuert in einem Fabric-Notebook verwenden. Um festzustellen, ob die KI-Fähigkeit einen veröffentlichten URL-Wert aufweist, wählen Sie Einstellungen aus, wie in diesem Screenshot gezeigt:
Bevor Sie die KI-Fähigkeit veröffentlichen, hat sie keinen veröffentlichten URL-Wert, wie in diesem Screenshot gezeigt:
Nachdem Sie die Leistung der KI-Fähigkeit überprüft haben, können Sie sie veröffentlichen, damit Sie sie mit Ihren Kollegen teilen können, die Q&A über Daten ausführen möchten. Wählen Sie in diesem Fall Veröffentlichen aus, wie in diesem Screenshot gezeigt:
Die veröffentlichte URL für die KI-Fähigkeit wird angezeigt, wie in diesem Screenshot gezeigt:
Anschließend können Sie die veröffentlichte URL kopieren und im Fabric-Notebook verwenden. Auf diese Weise können Sie die KI-Fähigkeit abfragen, indem Sie Aufrufe der KI-Fähigkeits-API in einem Fabric-Notebook durchführen. Fügen Sie die kopierte URL in diesen Codeschnipsel ein. Ersetzen Sie dann die Frage durch jede Abfrage, die für Ihre KI-Fähigkeiten relevant ist. In diesem Beispiel wird \<generic published URL value\>
als URL verwendet.
%pip install "openai==1.14.1"
%pip install httpx==0.27.2
import requests
import json
import pprint
import typing as t
import time
import uuid
from openai import OpenAI
from openai._exceptions import APIStatusError
from openai._models import FinalRequestOptions
from openai._types import Omit
from openai._utils import is_given
from synapse.ml.mlflow import get_mlflow_env_config
from sempy.fabric._token_provider import SynapseTokenProvider
base_url = "https://<generic published base URL value>"
question = "What datasources 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
while run.status == "queued" or run.status == "in_progress":
run = fabric_client.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id,
)
print(run.status)
time.sleep(2)
# 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)