Freigeben über


Beispiel für KI-Fähigkeiten mit dem AdventureWorks-Dataset (Vorschau)

In diesem Artikel wird gezeigt, wie Sie eine KI-Fähigkeit im AdventureWorks-Dataset konfigurieren.

Wichtig

Dieses Feature befindet sich in der Vorschau.

Voraussetzungen

Erstellen eines Lakehouse mit AdventureWorksDW

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

Wenn Sie bereits über eine Instanz von AdventureWorksDW in einem Warehouse oder Lakehouse verfügen, können Sie diesen Schritt überspringen. Wenn nicht, erstellen Sie ein Lakehouse aus einem Notebook. Füllen Sie das Lakehouse über das Notebook mit den Daten auf.

  1. Erstellen Sie ein neues Notebook im Arbeitsbereich, in dem Sie Ihre KI-Fähigkeit erstellen möchten.

  2. Wählen Sie auf der linken Seite des Explorer-Bereichs + Datenquellen aus. Mit dieser Option wird ein bestehendes Lakehouse hinzugefügt oder ein neues Lakehouse erstellt.

  3. 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)
    
  4. Wählen Sie Alle ausführen aus.

    Screenshot eines Notebooks mit dem AdventureWorks-Uploadcode.

Nach ein paar Minuten wird das Lakehouse mit den erforderlichen Daten aufgefüllt.

Erstellen einer KI-Fähigkeit

  1. Um eine neue KI-Fähigkeit zu erstellen, gehen Sie zur Data Science-Experience, und wählen Sie KI-Fähigkeit aus.

    Screenshot: Informationen dazu, wo eine KI-Fähigkeit erstellt werden soll.

  2. Geben Sie zum Erstellen einer KI-Fähigkeit einen Namen ein.

Wählen Sie die Daten aus

Wählen Sie das erstellte Lakehouse und dann Verbinden aus. Anschließend müssen Sie die Tabellen auswählen, auf die die KI-Fähigkeit Zugriff haben soll.

In dieser Übung werden die folgenden Tabellen verwendet:

  • DimCustomer
  • DimDate
  • DimGeography
  • DimProduct
  • DimProductCategory
  • DimPromotion
  • DimReseller
  • DimSalesTerritory
  • FactInternetSales
  • FactResellerSales

Bereitstellen von Anweisungen

Wenn Sie die Fragen zur KI-Fähigkeit zuerst mit den ausgewählten aufgelisteten Tabellen stellen, beantwortet die KI-Fähigkeit sie ziemlich gut. Auf die Frage Welches ist das meistverkaufte Produkt? gibt die KI-Fähigkeit beispielsweise folgende Antwort:

  • Long-Sleeve Logo Jersey, L

Die SQL-Abfrage benötigt jedoch einige Verbesserungen. Zunächst wird nur die Tabelle FactResellerSales betrachtet. Die Tabelle FactInternetSales wird ignoriert. Zweitens werden die Produkte nach Auftragsmenge bestellt, wenn der Gesamtumsatz, der mit dem Produkt verknüpft ist, die wichtigste Überlegung ist, wie in diesem Screenshot gezeigt:

Screenshot zeigt das erste Beispiel einer KI-Fähigkeit mit der Frage nach dem meistverkauften Produkt.

Um die Abfragegenerierung zu verbessern, geben Sie einige Anweisungen an, wie in den folgenden Beispielen gezeigt:

  • Immer wenn ich nach "den meisten verkauften" Produkten oder Artikeln frage, ist der relevante Faktor der Gesamtumsatz und nicht die Bestellmenge.
  • Der zu verwendende Primärschlüssel ist FactInternetSales. Verwenden Sie FactResellerSales nur, wenn explizit nach Wiederverkäufen gefragt wird oder wenn nach dem Gesamtumsatz gefragt wird.

Wenn Sie die Frage erneut stellen, wird eine andere Antwort zurückgegeben: Mountain-200 Black, 46, wie in diesem Screenshot gezeigt:

Der Screenshot zeigt das zweite Beispiel einer KI-Fähigkeit mit der Frage nach dem meistverkauften Produkt.

Die entsprechende SQL bezieht sich auf die Tabelle FactInternetSales und sortiert sie nach der Summe des Umsatzbetrags. Die KI hat die Anweisungen befolgt.

Wenn Sie weiterhin mit Abfragen experimentieren, sollten Sie weitere Anweisungen hinzufügen.

In diesem Szenario werden die folgenden Anweisungen verwendet:

  • Immer wenn ich nach "den meisten verkauften" Produkten oder Artikeln frage, ist der relevante Faktor der Umsatz und nicht die Bestellmenge.
  • Der zu verwendende Primärschlüssel ist FactInternetSales. Verwenden Sie FactResellerSales nur, wenn explizit nach Wiederverkäufen gefragt wird oder wenn nach dem Gesamtumsatz gefragt wird.
  • Wenn Sie über die Auswirkungen von Werbeaktionen gefragt werden, tun Sie dies bei der Erhöhung des Umsatzes, nicht nur auf die Anzahl der verkauften Einheiten.
  • Konzentrieren Sie sich bei Kundenerkenntnissen auf den Gesamtumsatz pro Kunde und nicht auf die Anzahl der Bestellungen.
  • Verwenden Sie DimDate, um bestimmte Zeiträume (z. B. Jahr, Monat) zu extrahieren, wenn eine zeitbasierte Analyse durchgeführt wird.
  • Priorisieren Sie bei der Analyse geografischer Daten den Gesamtumsatz und den durchschnittlichen Umsatz pro Bestellung für jede Region.
  • Verwenden Sie für Produktkategorienerkenntnisse immer DimProductCategory, um Produkte entsprechend zu gruppieren.
  • Verwenden Sie beim Vergleichen der Umsätze zwischen Regionen DimSalesTerritory für genaue Gebietsdetails.
  • Verwenden Sie DimCurrency, um Umsatzdaten zu normalisieren, wenn die Umsätze in verschiedenen Währungen analysiert werden.
  • Verknüpfen Sie für detaillierte Produktinformationen immer FactInternetSales mit DimProduct.
  • Verwenden Sie DimPromotion, um die Effektivität verschiedener Werbekampagnen zu analysieren.
  • Konzentrieren Sie sich bei der Händlerleistung auf den Gesamtumsatz und nicht nur auf die Anzahl der verkauften Produkte.
  • Wenn Sie Trends im Laufe der Zeit analysieren, verwenden Sie FactInternetSales und verknüpfen Sie mit DimDate, um Daten nach Monat, Quartal oder Jahr zu gruppieren.
  • Überprüfen Sie immer auf Datenkonsistenz, indem Sie FactInternetSales mit den entsprechenden Dimensionstabellen verknüpfen.
  • Verwenden Sie SUMME zum Aggregieren von Umsatzdaten, um sicherzustellen, dass Sie die Gesamtwerte genau erfassen.
  • Priorisieren Sie Umsatzmetriken über die Bestellmenge, um die finanziellen Auswirkungen genau zu messen.
  • Gruppieren Sie immer nach relevanten Dimensionen (z. B. Produkt, Kunde, Datum), um detaillierte Einblicke zu erhalten.
  • Wenn Sie nach Kundendemografien gefragt werden, verknüpfen Sie DimCustomer mit relevanten Faktentabellen.
  • Für Verkäufe nach Werbung können Sie FactInternetSales mit DimPromotion und Gruppennamen beitreten.
  • Normalisieren Sie Verkaufszahlen mithilfe von DimCurrency für Vergleiche mit unterschiedlichen Währungen.
  • Verwenden Sie ORDER BY-Klauseln, um Ergebnisse nach der gewünschten Metrik (z. B. Umsatz, Gesamtbestellungen) zu sortieren.
  • ListPrice in DimProduct ist der vorgeschlagene Verkaufspreis, während UnitPrice in FactInternetSales und FactResellerSales der tatsächliche Preis ist, zu dem jede Einheit verkauft wurde. Für die meisten Anwendungsfälle bei Einnahmen sollte der Einzelpreis verwendet werden.
  • Rangieren Sie top Reseller nach Umsatzbetrag.

Wenn Sie diesen Text in die Notizen für das Modelltextfeld kopieren, bezieht sich die KI auf diese Anweisungen, wenn sie ihre SQL-Abfragen generiert.

Bereitstellen von Beispielen

Neben Anweisungen dienen Beispiele als eine weitere effektive Möglichkeit, die KI zu leiten. Wenn Sie Fragen haben, die Ihre KI-Fähigkeit häufig erhält, oder Fragen, die komplexe Verknüpfungen erfordern, sollten Sie Beispiele für sie hinzufügen.

Die Frage: Wie viele aktive Kunden hatten wir am 1. Juni 2013 generiert einige gültige SQL, wie in diesem Screenshot gezeigt:

Screenshot mit der ersten Beispielfrage zur aktiven KI-Fähigkeit zur Kundenanzahl.

Es ist jedoch keine gute Antwort.

Ein Teil des Problems ist, dass "aktiver Kunde" keine formale Definition hat. Weitere Anweisungen im Textfeld "Notizen" zum Modell können hilfreich sein, aber Benutzer stellen diese Frage häufig. Stellen Sie sicher, dass die KI die Frage richtig behandelt. Die relevante Abfrage ist moderat komplex. Geben Sie daher ein Beispiel an, indem Sie die Schaltfläche "Bearbeiten" auswählen.

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

Anschließend können Sie ein Beispiel hochladen.

Screenshot einer BEISPIEL-SQL-Abfrage mit KI-Fähigkeiten.

Eine Wiederholung der Frage gibt eine verbesserte Antwort zurück.

Screenshot des zweiten Beispiels zeigt die Frage nach der Anzahl der aktiven KI-Kunden.

Sie können Beispiele manuell hinzufügen, aber Sie können sie auch aus einer JSON-Datei hochladen. Das Bereitstellen von Beispielen aus einer Datei ist hilfreich, wenn Sie über viele SQL-Abfragen verfügen, die Sie alle gleichzeitig hochladen möchten, anstatt die Abfragen einzeln manuell hochzuladen. Verwenden Sie für diese Übung die folgenden Beispiele:

{
    "how many active customers did we have June 1st, 2010?": "SELECT COUNT(DISTINCT fis.CustomerKey) AS ActiveCustomerCount FROM factinternetsales fis JOIN dimdate dd ON fis.OrderDateKey = dd.DateKey WHERE dd.FullDateAlternateKey BETWEEN DATEADD(MONTH, -6, '2010-06-01') AND '2010-06-01' GROUP BY fis.CustomerKey HAVING COUNT(fis.SalesOrderNumber) >= 2;",
    "which promotion was the most impactful?": "SELECT dp.EnglishPromotionName, SUM(fis.SalesAmount) AS PromotionRevenue FROM factinternetsales fis JOIN dimpromotion dp ON fis.PromotionKey = dp.PromotionKey GROUP BY dp.EnglishPromotionName ORDER BY PromotionRevenue DESC;",
    "who are the top 5 customers by total sales amount?": "SELECT TOP 5 CONCAT(dc.FirstName, ' ', dc.LastName) AS CustomerName, SUM(fis.SalesAmount) AS TotalSpent FROM factinternetsales fis JOIN dimcustomer dc ON fis.CustomerKey = dc.CustomerKey GROUP BY CONCAT(dc.FirstName, ' ', dc.LastName) ORDER BY TotalSpent DESC;",
    "what is the total sales amount by year?": "SELECT dd.CalendarYear, SUM(fis.SalesAmount) AS TotalSales FROM factinternetsales fis JOIN dimdate dd ON fis.OrderDateKey = dd.DateKey GROUP BY dd.CalendarYear ORDER BY dd.CalendarYear;",
    "which product category generated the highest revenue?": "SELECT dpc.EnglishProductCategoryName, SUM(fis.SalesAmount) AS CategoryRevenue FROM factinternetsales fis JOIN dimproduct dp ON fis.ProductKey = dp.ProductKey JOIN dimproductcategory dpc ON dp.ProductSubcategoryKey = dpc.ProductCategoryKey GROUP BY dpc.EnglishProductCategoryName ORDER BY CategoryRevenue DESC;",
    "what is the average sales amount per order by territory?": "SELECT dst.SalesTerritoryRegion, AVG(fis.SalesAmount) AS AvgOrderValue FROM factinternetsales fis JOIN dimsalesterritory dst ON fis.SalesTerritoryKey = dst.SalesTerritoryKey GROUP BY dst.SalesTerritoryRegion ORDER BY AvgOrderValue DESC;",
    "what is the total sales amount by currency?": "SELECT dc.CurrencyName, SUM(fis.SalesAmount) AS TotalSales FROM factinternetsales fis JOIN dimcurrency dc ON fis.CurrencyKey = dc.CurrencyKey GROUP BY dc.CurrencyName ORDER BY TotalSales DESC;",
    "which product had the highest sales revenue last year?": "SELECT dp.EnglishProductName, SUM(fis.SalesAmount) AS TotalRevenue FROM factinternetsales fis JOIN dimproduct dp ON fis.ProductKey = dp.ProductKey JOIN dimdate dd ON fis.ShipDateKey = dd.DateKey WHERE dd.CalendarYear = YEAR(GETDATE()) - 1 GROUP BY dp.EnglishProductName ORDER BY TotalRevenue DESC;",
    "what are the monthly sales trends for the last year?": "SELECT dd.CalendarYear, dd.MonthNumberOfYear, SUM(fis.SalesAmount) AS TotalSales FROM factinternetsales fis JOIN dimdate dd ON fis.ShipDateKey = dd.DateKey WHERE dd.CalendarYear = YEAR(GETDATE()) - 1 GROUP BY dd.CalendarYear, dd.MonthNumberOfYear ORDER BY dd.CalendarYear, dd.MonthNumberOfYear;",
    "how did the latest promotion affect sales revenue?": "SELECT dp.EnglishPromotionName, SUM(fis.SalesAmount) AS PromotionRevenue FROM factinternetsales fis JOIN dimpromotion dp ON fis.PromotionKey = dp.PromotionKey WHERE dp.StartDate >= DATEADD(MONTH, 0, GETDATE()) GROUP BY dp.EnglishPromotionName ORDER BY PromotionRevenue DESC;",
    "which territory had the highest sales revenue?": "SELECT dst.SalesTerritoryRegion, SUM(fis.SalesAmount) AS TotalSales FROM factinternetsales fis JOIN dimsalesterritory dst ON fis.SalesTerritoryKey = dst.SalesTerritoryKey GROUP BY dst.SalesTerritoryRegion ORDER BY TotalSales DESC;",
    "who are the top 5 resellers by total sales amount?": "SELECT TOP 5 dr.ResellerName, SUM(frs.SalesAmount) AS TotalSales FROM factresellersales frs JOIN dimreseller dr ON frs.ResellerKey = dr.ResellerKey GROUP BY dr.ResellerName ORDER BY TotalSales DESC;",
    "what is the total sales amount by customer region?": "SELECT dg.EnglishCountryRegionName, SUM(fis.SalesAmount) AS TotalSales FROM factinternetsales fis JOIN dimcustomer dc ON fis.CustomerKey = dc.CustomerKey JOIN dimgeography dg ON dc.GeographyKey = dg.GeographyKey GROUP BY dg.EnglishCountryRegionName ORDER BY TotalSales DESC;",
    "which product category had the highest average sales price?": "SELECT dpc.EnglishProductCategoryName, AVG(fis.UnitPrice) AS AvgPrice FROM factinternetsales fis JOIN dimproduct dp ON fis.ProductKey = dp.ProductKey JOIN dimproductcategory dpc ON dp.ProductSubcategoryKey = dpc.ProductCategoryKey GROUP BY dpc.EnglishProductCategoryName ORDER BY AvgPrice DESC;"
}

Testen und Überarbeiten der KI-Fähigkeiten

Sowohl Anweisungen als auch Beispiele wurden der KI-Fähigkeit hinzugefügt. Im Zuge des Testvorgangs können weitere Beispiele und Anweisungen die KI-Fähigkeit noch weiter verbessern. Arbeiten Sie mit Ihren Kollegen zusammen, um zu sehen, ob Sie Beispiele und Anweisungen bereitgestellt haben, die die Arten von Fragen abdecken, 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:

Screenshot der Auswahl der KI-Fähigkeitseinstellungen.

Bevor Sie die KI-Fähigkeit veröffentlichen, hat sie keinen veröffentlichten URL-Wert, wie in diesem Screenshot gezeigt:

Screenshot, der zeigt, dass eine KI-Fähigkeit vor der Veröffentlichung keinen veröffentlichten URL-Wert aufweist.

Wenn Sie die Leistung der KI-Fähigkeit überprüft haben, können Sie sie veröffentlichen. Wählen Sie in diesem Fall Veröffentlichen aus, wie in diesem Screenshot gezeigt:

Screenshot der Auswahl der Option Veröffentlichen.

Die veröffentlichte URL für die KI-Fähigkeit wird angezeigt, wie in diesem Screenshot gezeigt:

Screenshot der veröffentlichten URL.

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 eine für Ihre KI-Fähigkeit relevante Abfrage. In diesem Beispiel wird \<generic published URL value\> als URL verwendet.

import requests
import json
import pprint
from synapse.ml.mlflow import get_mlflow_env_config


# the URL could change if the workspace is assigned to a different capacity
url = "https://<generic published URL value>"

configs = get_mlflow_env_config()

headers = {
    "Authorization": f"Bearer {configs.driver_aad_token}",
    "Content-Type": "application/json; charset=utf-8"
}

question = "{userQuestion: \"what is an example product?\"}"

response = requests.post(url, headers=headers, data = question)

print("RESPONSE: ", response)

print("")

response = json.loads(response.content)

print(response["result"])