Zdieľať cez


Príklad zručností umelej inteligencie s množinou údajov AdventureWorks (ukážka)

Tento článok popisuje, ako nakonfigurovať zručnosti AI pre množinu údajov AdventureWorks.

Dôležité

Táto funkcia je vo verzii Preview.

Požiadavky

Vytvorenie služby Lakehouse pomocou databázy AdventureWorksDW

Najskôr vytvorte jazero a osídľujte ho potrebnými údajmi.

Ak už máte inštanciu AdventureWorksDW v sklade alebo v službe Lakehouse, môžete tento krok preskočiť. Ak nie, vytvorte lakehouse z notebooku. Poznámkový blok použite na naplnenie jazera údajmi.

  1. Vytvorte nový poznámkový blok v pracovnom priestore, v ktorom chcete vytvoriť zručnosti umelej inteligencie.

  2. Na ľavej strane tably Prieskumník vyberte položku + Zdroje údajov. Táto možnosť pridá existujúci lakehouse alebo vytvorí nový lakehouse.

  3. Do hornej bunky pridajte nasledujúci úryvok kódu:

    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. Vyberte položku Spustiť všetko.

    Snímka obrazovky zobrazujúca poznámkový blok s kódom nahrávania v službe AdventureWorks.

Po niekoľkých minútach sa v komplexe lakehouse vyplnia potrebné údaje.

Vytvorenie zručností umelej inteligencie

  1. Ak chcete vytvoriť novú odbornosť umelej inteligencie, najskôr vyberte položku Nová položka, ako je to znázornené na tejto snímke obrazovky:

    Snímka obrazovky zobrazujúca krok Nová položka na vytvorenie zručností umelej inteligencie.

  2. Na ďalšej obrazovke zadajte AI skill do pravého horného textového poľa a vyberte AI Skill (ukážka) vľavo, ako je to znázornené na tejto snímke obrazovky:

    Snímka obrazovky zobrazujúca výber typu položky zručností umelej inteligencie.

  3. Zadajte názov na vytvorenie zručností umelej inteligencie a vyberte položku Create.

Výber údajov

Vyberte objekt lakehouse, ktorý ste vytvorili, a vyberte položku Pripojiť. Potom musíte vybrať tabuľky, pre ktoré chcete mať zručnosti umelej inteligencie k dispozícii.

V tomto cvičení sa používajú tieto tabuľky:

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

Zadanie pokynov

Keď najprv položíte otázky týkajúce sa zručností umelej inteligencie s vybratými uvedenými tabuľkami, odbornosť umelej inteligencie na ne odpovedá pomerne dobre. Napríklad na otázku What is the most sold product? (Ktorý je najpredávanejší produkt?), funkcia zručností umelej inteligencie vráti:

  • Long-Sleeve Logo Jersey, L

Dotaz SQL však vyžaduje určité zlepšenie. Najprv sa pozrie len na tabuľku FactResellerSales . Ignoruje tabuľku FactInternetSales . Po druhé, produkty sa zoradia podľa množstva objednávok, keď sú k produktu najdôležitejšie celkové výnosy z predaja, ako môžete vidieť na tejto snímke obrazovky:

Snímka obrazovky znázorňujúca otázku prvého príkladu zručností s najvyšším predajom produktov.

Ak chcete zlepšiť generovanie dotazu, zadajte niekoľko pokynov, ako je znázornené v týchto príkladoch:

  • Vždy, keď sa spýtam na "najpredávanejšie" produkty alebo položky, metrika úrokov je celkový výnos z predaja a nie množstvo objednávok.
  • Primárna tabuľka, ktorá sa má použiť, je FactInternetSales. Používajte FactResellerSales iba v prípade, že sa explicitne pýtali na predaj, alebo keď sa ho pýtali na celkový predaj.

Položenie otázky opäť vráti inú odpoveď, Mountain-200 Black, 46ako je to znázornené na tejto snímke obrazovky:

Snímka obrazovky znázorňujúca otázku o druhom príklade zručností AI s najvyšším predajom produktov.

Príslušný SQL čerpá z FactInternetSales tabuľky a zoradí ho podľa súčtu objemov predaja. Umelá inteligencia postupovali podľa pokynov.

Ak budete naďalej experimentovať s dotazmi, mali by ste pridať ďalšie pokyny.

V tomto scenári sa používa nasledujúca množina pokynov:

  • Vždy, keď sa spýtam na "najpredávanejšie" produkty alebo položky, metrika úrokov je výnos z predaja a nie množstvo objednávok.
  • Primárna tabuľka, ktorá sa má použiť, je FactInternetSales. Používajte FactResellerSales iba v prípade, že sa explicitne pýtali na predaj, alebo keď sa ho pýtali na celkový predaj.
  • Na otázku o vplyve propagácie tak urobte na zvýšenie výnosov z predaja, nielen na počet predaných jednotiek.
  • V prípade prehľadov zákazníkov sa zamerajte na celkovú čiastku predaja na zákazníka a nie na počet objednávok.
  • Pomocou môžete DimDate extrahovať konkrétne časové obdobia (napríklad rok, mesiac) pri vykonávaní analýzy založenej na čase.
  • Pri analýze geografických údajov uprednostnite celkové výnosy z predaja a priemerný predaj na objednávku pre každú oblasť.
  • V prípade prehľadov kategórií produktov sa vždy používa DimProductCategory na zodpovedajúcim zoskupovanie produktov.
  • Pri porovnávaní predaja medzi oblasťami použite DimSalesTerritory presnú podrobnosti územia.
  • Používa DimCurrency sa na normalizáciu údajov o predaji, ak analyzujete predaj v rôznych menách.
  • Podrobné informácie o produkte získate vždy po pripojení k FactInternetSales .DimProduct
  • Používa DimPromotion sa na analýzu účinnosti rôznych propagačných kampaní.
  • V prípade výkonu predajcu sa zamerajte na celkovú čiastku predaja a nielen na počet predaných produktov.
  • Pri analýze trendov v priebehu času použite FactInternetSales a spojte sa so DimDate skupinou údajov podľa mesiacov, štvrťrokov alebo rokov.
  • Vždy skontrolujte konzistenciu údajov spojením FactInternetSales so zodpovedajúcimi tabuľkami dimenzií.
  • Na presné zaznamenávanie celkových hodnôt použite funkciu SUM na agregovanie údajov o predaji.
  • Stanoviť priority metriky výnosov z predaja pred množstvom objednávok, aby ste presne zhodnotili finančný vplyv.
  • Ak chcete získať podrobné prehľady, vždy ich môžete zoskupiť podľa relevantných dimenzií (napríklad produkt, zákazník, dátum).
  • Na otázku o demografii zákazníkov sa pripojte k DimCustomer relevantným tabuľkám faktov.
  • Pre predaj podľa propagácie, spojte sa a FactInternetSales zoskupte DimPromotion podľa názvu propagácie.
  • Normalizujte údaje o predaji pomocou DimCurrency porovnaní zahŕňajúcich rôzne meny.
  • Použite ORDER BY klauzuly na zoradenie výsledkov podľa metriky úroku (napríklad výnosy z predaja, celkový počet objednávok).
  • ListPrice v DimProduct predstavuje navrhovanú predajnú cenu a UnitPriceFactInternetSalesFactResellerSales predstavuje skutočnú cenu, za ktorú bola každá jednotka predávaná. V prípadoch použitia výnosov vo väčšine prípadov by sa mala použiť jednotková cena.
  • Poradie najpredávaných predajcov podľa čiastky predaja.

Ak skopírujete tento text do poznámok textového poľa modelu, umelá inteligencia pri generovaní svojich dotazov SQL odkazuje na tieto pokyny.

Uveďte príklady

Okrem pokynov slúžia príklady ako ďalší účinný spôsob, ako riadiť umelú inteligenciu. Ak máte otázky, ktoré zručnosti umelej inteligencie často dostávajú alebo otázky, ktoré vyžadujú zložité spojenia, zvážte pridanie príkladov.

Napríklad otázka Koľko aktívnych zákazníkov sme mali 1. júna 2013 , vygeneruje platný SQL, ako je to znázornené na tejto snímke obrazovky:

Snímka obrazovky znázorňujúca prvú príklad otázky počtu aktívnych zákazníkov v oblasti umelej inteligencie.

Nie je to však dobrá odpoveď.

Časť problému spočíva v tom, že "aktívny zákazník" nemá formálnu definíciu. Ďalšie pokyny v poznámkach k textovému poľu modelu môžu pomôcť, ale používatelia môžu často klásť túto otázku. Musíte zabezpečiť, aby AI spracovala otázku správne. Relevantný dotaz je mierne zložitý, takže môžete uviesť príklad výberom tlačidla Upraviť.

Snímka obrazovky znázorňujúca, kde môžete upraviť príklady, ktoré poskytnete umelej inteligencii.

Potom môžete nahrať príklad.

Snímka obrazovky znázorňujúca príklad dotazu SQL na rozvoj zručností umelej inteligencie.

Opakovaním otázky sa vráti vylepšená odpoveď.

Snímka obrazovky znázorňujúca otázku týkajúcu sa počtu aktívnych zákazníkov v druhom príklade.

Príklady môžete pridať manuálne, ale môžete ich tiež nahrať zo súboru JSON. Poskytnutie príkladov zo súboru je užitočné, ak máte veľa dotazov SQL, ktoré chcete nahrať všetky naraz, namiesto manuálneho nahrávania dotazov po jednom. V tomto cvičení použite tieto príklady:

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

Testovanie a revízia zručností umelej inteligencie

Do zručností umelej inteligencie boli pridané pokyny aj príklady. S postupným testovaním môže rozvoj zručností umelej inteligencie ešte viac zlepšiť ďalšie príklady a pokyny. Spolupracujte s kolegami a zistite, či ste poskytli príklady a pokyny, ktoré sa týkajú typov otázok, ktoré chcú položiť.

Používanie zručností umelej inteligencie pomocou programovania

Zručnosti umelej inteligencie môžete využiť pomocou programovania v poznámkovom bloku služby Fabric. Ak chcete zistiť, či zručnosť umelej inteligencie má publikovanú hodnotu URL adresy, vyberte položku Nastavenia, ako je znázornené na tejto snímke obrazovky:

Snímka obrazovky zobrazujúca výber nastavení zručností umelej inteligencie.

Pred publikovaním zručnosti umelej inteligencie nemá publikovanú hodnotu URL adresy, ako je to znázornené na tejto snímke obrazovky:

Snímka obrazovky znázorňujúca, že zručnosť umelej inteligencie nemá publikovanú hodnotu URL adresy pred publikovaním.

Po overení výkonu zručností AI sa môžete rozhodnúť, že ju publikujete. V tomto prípade vyberte možnosť Publikovať, ako je to znázornené na tejto snímke obrazovky:

Snímka obrazovky zobrazujúca výber možnosti Publikovať.

Zobrazí sa publikovaná URL adresa zručností umelej inteligencie, ako je znázornené na tejto snímke obrazovky:

Snímka obrazovky zobrazujúca publikovanú URL adresu.

Potom môžete publikovanú URL adresu skopírovať a použiť ju v poznámkovom bloku služby Fabric. Týmto spôsobom môžete získavať dotazy na zručnosti umelej inteligencie prostredníctvom volaní rozhrania API zručností umelej inteligencie v notebooku služby Fabric. Prilepte skopírovanú URL adresu do tohto úryvku kódu. Potom nahraďte otázku ľubovoľným dotazom relevantným pre vašu odbornosť ai. Tento príklad sa používa \<generic published URL value\> ako URL adresa.

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