Udostępnij za pośrednictwem


Przykład umiejętności sztucznej inteligencji z zestawem danych AdventureWorks (wersja zapoznawcza)

W tym artykule pokazano, jak skonfigurować umiejętności sztucznej inteligencji w zestawie danych AdventureWorks.

Ważne

Ta funkcja jest dostępna w wersji zapoznawczej.

Wymagania wstępne

Tworzenie bazy danych lakehouse za pomocą elementu AdventureWorksDW

Najpierw utwórz magazyn lakehouse i wypełnij go niezbędnymi danymi.

Jeśli masz już wystąpienie bazy danych AdventureWorksDW w magazynie lub lakehouse, możesz pominąć ten krok. Jeśli nie, utwórz magazyn lakehouse na podstawie notesu. Użyj notesu, aby wypełnić magazyn lakehouse danymi.

  1. Utwórz nowy notes w obszarze roboczym, w którym chcesz utworzyć umiejętności sztucznej inteligencji.

  2. Po lewej stronie okienka Eksplorator wybierz pozycję + Źródła danych. Ta opcja powoduje dodanie istniejącego jeziora lub utworzenie nowego jeziora.

  3. W górnej komórce dodaj następujący fragment kodu:

    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. Wybierz pozycję Uruchom wszystko.

    Zrzut ekranu przedstawiający notes z kodem przekazywania AdventureWorks.

Po kilku minutach jezioro zostanie wypełnione niezbędnymi danymi.

Tworzenie umiejętności sztucznej inteligencji

  1. Aby utworzyć nową umiejętność sztucznej inteligencji, przejdź do środowiska Nauka o danych i wybierz pozycję Umiejętności sztucznej inteligencji.

    Zrzut ekranu przedstawiający miejsce tworzenia umiejętności sztucznej inteligencji.

  2. Wprowadź nazwę, aby utworzyć umiejętności sztucznej inteligencji.

Wybieranie danych

Wybierz utworzoną usługę Lakehouse i wybierz pozycję Połącz. Następnie musisz wybrać tabele, dla których chcesz, aby umiejętności sztucznej inteligencji miały dostęp.

W tym ćwiczeniu są używane następujące tabele:

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

Podaj instrukcje

Gdy najpierw zadajesz pytania dotyczące umiejętności sztucznej inteligencji z wybranymi tabelami, umiejętności sztucznej inteligencji odpowiadają na nie dość dobrze. Na przykład w przypadku pytania Co to jest najbardziej sprzedany produkt?, umiejętność sztucznej inteligencji zwraca następujące elementy:

  • Long-Sleeve Logo Jersey, L

Jednak zapytanie SQL wymaga pewnych ulepszeń. Najpierw patrzy tylko na tabelę FactResellerSales . Ignoruje tabelę FactInternetSales . Po drugie, zamawia produkty według ilości zamówień, gdy całkowity przychód ze sprzedaży skojarzony z produktem jest najważniejszy, jak pokazano na poniższym zrzucie ekranu:

Zrzut ekranu przedstawiający pierwsze przykładowe pytanie dotyczące najwyższego poziomu sprzedaży umiejętności sztucznej inteligencji.

Aby ulepszyć generowanie zapytań, podaj kilka instrukcji, jak pokazano w poniższych przykładach:

  • Za każdym razem, gdy pytam o "najbardziej sprzedane" produkty lub przedmioty, metryka procentowa to całkowity przychód ze sprzedaży, a nie ilość zamówień.
  • Podstawowa tabela do użycia to FactInternetSales. Użyj FactResellerSales tylko wtedy, gdy zostanie jawnie wyświetlony monit o odsprzedaż lub zapytany o łączną sprzedaż.

Ponowne zadawanie pytania zwraca inną odpowiedź, Mountain-200 Black, 46jak pokazano na poniższym zrzucie ekranu:

Zrzut ekranu przedstawiający drugie przykładowe pytanie dotyczące najwyższego poziomu sprzedaży umiejętności sztucznej inteligencji.

Odpowiedni kod SQL pobiera z FactInternetSales tabeli i sortuje ją według sumy kwoty sprzedaży. Sztuczna inteligencja postępuje zgodnie z instrukcjami.

W miarę kontynuowania eksperymentowania z zapytaniami należy dodać więcej instrukcji.

W tym scenariuszu jest używany następujący zestaw instrukcji:

  • Za każdym razem, gdy pytam o "najbardziej sprzedane" produkty lub przedmioty, metryka zainteresowania to przychody ze sprzedaży, a nie ilość zamówień.
  • Podstawowa tabela do użycia to FactInternetSales. Użyj FactResellerSales tylko wtedy, gdy zostanie jawnie wyświetlony monit o odsprzedaż lub zapytany o łączną sprzedaż.
  • Zapytany o wpływ promocji, zrób to na wzrost przychodów ze sprzedaży, a nie tylko liczbę sprzedanych jednostek.
  • W przypadku szczegółowych informacji o klientach należy skoncentrować się na łącznej wartości sprzedaży na klienta, a nie na liczbie zamówień.
  • Służy DimDate do wyodrębniania określonych okresów (na przykład roku, miesiąca) podczas przeprowadzania analizy opartej na czasie.
  • Podczas analizowania danych geograficznych priorytetyzują całkowity przychód ze sprzedaży i średnią sprzedaż na zamówienie dla każdego regionu.
  • W przypadku szczegółowych informacji o kategorii produktów należy zawsze DimProductCategory używać do grupowania produktów.
  • Podczas porównywania sprzedaży między regionami należy użyć DimSalesTerritory w celu uzyskania dokładnych szczegółów dotyczących terytorium.
  • Służy DimCurrency do normalizacji danych sprzedaży w przypadku analizowania sprzedaży w różnych walutach.
  • Aby uzyskać szczegółowe informacje o produkcie, zawsze dołącz do FactInternetSales DimProductelementu .
  • Służy DimPromotion do analizowania skuteczności różnych kampanii promocyjnych.
  • W przypadku wydajności odsprzedawcy skoncentruj się na łącznej wartości sprzedaży, a nie tylko na liczbie sprzedanych produktów.
  • Podczas analizowania trendów w czasie użyj polecenia FactInternetSales i dołącz DimDate do grupowania danych według miesiąca, kwartału lub roku.
  • Zawsze sprawdzaj spójność danych, łącząc FactInternetSales się z odpowiednimi tabelami wymiarów.
  • Użyj funkcji SUM do agregowania danych sprzedaży, aby upewnić się, że dokładnie przechwytujesz wartości całkowite.
  • Określ priorytety metryk przychodów sprzedaży w porównaniu z ilością zamówienia, aby dokładnie ocenić wpływ finansowy.
  • Zawsze grupuj według odpowiednich wymiarów (na przykład produktu, klienta, daty), aby uzyskać szczegółowe informacje.
  • Zapytany o dane demograficzne klientów, dołącz do DimCustomer odpowiednich tabel faktów.
  • W przypadku sprzedaży według promocji dołącz FactInternetSales i DimPromotion grupuj według nazwy promocji.
  • Normalizuj dane sprzedaży przy użyciu DimCurrency dla porównań obejmujących różne waluty.
  • Użyj ORDER BY klauzul, aby posortować wyniki według metryki zainteresowania (na przykład przychody ze sprzedaży, łączne zamówienia).
  • ListPrice in DimProduct jest sugerowaną ceną sprzedaży, natomiast UnitPrice w FactInternetSales i FactResellerSales jest rzeczywistą ceną, w której każda jednostka została sprzedana. W przypadku większości przypadków użycia przychodu należy użyć ceny jednostkowej.
  • Klasyfikacja najlepszych odsprzedawców według kwoty sprzedaży.

Jeśli skopiujesz ten tekst do notatek dla pola tekstowego modelu, sztuczna inteligencja odwołuje się do tych instrukcji podczas generowania zapytań SQL.

Przykłady

Oprócz instrukcji przykłady służą jako kolejny skuteczny sposób kierowania sztuczną inteligencją. Jeśli masz pytania, które często otrzymuje twoja umiejętność sztucznej inteligencji, lub pytania wymagające złożonych sprzężeń, rozważ dodanie przykładów dla nich.

Na przykład pytanie Ilu aktywnych klientów mieliśmy 1 czerwca 2013 r. generuje prawidłowy kod SQL, jak pokazano na poniższym zrzucie ekranu:

Zrzut ekranu przedstawiający pierwsze przykładowe pytanie dotyczące liczby aktywnych klientów umiejętności sztucznej inteligencji.

Nie jest to jednak dobra odpowiedź.

Częścią problemu jest to, że "aktywny klient" nie ma formalnej definicji. Więcej instrukcji w notatek w polu tekstowym modelu może pomóc, ale użytkownicy mogą często zadawać to pytanie. Należy upewnić się, że sztuczna inteligencja poprawnie obsługuje pytanie. Odpowiednie zapytanie jest średnio złożone, dlatego podaj przykład, wybierając przycisk edytuj.

Zrzut ekranu przedstawiający, gdzie można edytować przykłady podane w sztucznej inteligencji.

Następnie możesz przekazać przykład.

Zrzut ekranu przedstawiający przykładowe zapytanie SQL umiejętności sztucznej inteligencji.

Powtórzenie pytania zwraca ulepszoną odpowiedź.

Zrzut ekranu przedstawiający drugie przykładowe pytanie dotyczące liczby aktywnych klientów umiejętności sztucznej inteligencji.

Możesz ręcznie dodać przykłady, ale można je również przekazać z pliku JSON. Udostępnianie przykładów z pliku jest przydatne, gdy masz wiele zapytań SQL, które chcesz przekazać jednocześnie, zamiast ręcznie przekazywać zapytania pojedynczo. W tym ćwiczeniu użyj następujących przykładów:

{
    "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;"
}

Testowanie i poprawianie umiejętności sztucznej inteligencji

Do umiejętności sztucznej inteligencji dodano zarówno instrukcje, jak i przykłady. W miarę kontynuowania testowania więcej przykładów i instrukcji może jeszcze bardziej poprawić umiejętności sztucznej inteligencji. Skontaktuj się ze współpracownikami, aby sprawdzić, czy podano przykłady i instrukcje, które obejmują rodzaje pytań, które chcą zadać.

Programowe używanie umiejętności sztucznej inteligencji

Umiejętności sztucznej inteligencji można używać programowo w notesie sieci Szkieletowej. Aby określić, czy umiejętność sztucznej inteligencji ma opublikowaną wartość adresu URL, wybierz pozycję Ustawienia, jak pokazano na poniższym zrzucie ekranu:

Zrzut ekranu przedstawiający wybór ustawień umiejętności sztucznej inteligencji.

Przed opublikowaniem umiejętności sztucznej inteligencji nie ma opublikowanej wartości adresu URL, jak pokazano na poniższym zrzucie ekranu:

Zrzut ekranu przedstawiający, że umiejętność sztucznej inteligencji nie ma opublikowanej wartości adresu URL przed publikacją.

Po zweryfikowaniu wydajności umiejętności sztucznej inteligencji możesz zdecydować się na jej opublikowanie. W takim przypadku wybierz pozycję Publikuj, jak pokazano na poniższym zrzucie ekranu:

Zrzut ekranu przedstawiający wybór opcji Publikuj.

Zostanie wyświetlony opublikowany adres URL umiejętności sztucznej inteligencji, jak pokazano na poniższym zrzucie ekranu:

Zrzut ekranu przedstawiający opublikowany adres URL.

Następnie możesz skopiować opublikowany adres URL i użyć go w notesie sieci szkieletowej. Dzięki temu możesz wykonywać zapytania dotyczące umiejętności sztucznej inteligencji, wykonując wywołania interfejsu API umiejętności sztucznej inteligencji w notesie usługi Fabric. Wklej skopiowany adres URL w tym fragmencie kodu. Następnie zastąp pytanie dowolnym zapytaniem odpowiadającym umiejętnościom sztucznej inteligencji. W tym przykładzie użyto \<generic published URL value\> adresu URL.

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"])