Jaa


Esimerkki tekoälyn taidoista AdventureWorks-tietojoukossa (esikatselu)

Tässä artikkelissa kerrotaan, miten voit määrittää tekoälytaidon käyttämällä Lakehouse-tietolähdettä. Prosessin havainnollistamiseksi luomme ensin lakehouse-ympäristön ja lisäämme siihen sitten tietoja. Sitten luomme tekoälytaidon ja määritämme Lakehousen sen tietolähteeksi. Jos sinulla on jo Power BI:n semanttinen malli (tarvittavilla luku- ja kirjoitusoikeuksilla), varasto tai KQL-tietokanta, voit noudattaa samoja vaiheita, kun olet luonut tekoälytaitojen lisäämisen tietolähteesi. Vaikka tässä näytetyt vaiheet keskittyvät Lakehouse-tallennustilaan, prosessi on samankaltainen muiden tietolähteiden kanssa – sinun täytyy vain tehdä muutoksia valitsemasi valinnan perusteella.

Tärkeä

Tämä ominaisuus on esikatselutilassa.

Edellytykset

Luo lakehouse AdventureWorksLH:n avulla

Luo ensin lakehouse ja täytä se tarvittavilla tiedoilla.

Jos sinulla on jo AdventureWorksLH-esiintymä lakehousessa (tai varastossa), voit ohittaa tämän vaiheen. Jos näin ei ole, voit täyttää tiedot Fabric-muistikirjan seuraavien ohjeiden mukaisesti.

  1. Luo työtilaan uusi muistikirja, johon haluat luoda tekoälytaitosi.

  2. Valitse resurssienhallintaruudun vasemmasta reunasta + Tietolähteet. Tämän vaihtoehdon avulla voit lisätä olemassa olevan lakehousen tai luoda uuden lakehousen. Selvyyden vuoksi luo uusi lakehouse ja anna sille nimi.

  3. Lisää yläreunan soluun seuraava koodikatkelman:

    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. Valitse Suorita kaikki.

    Näyttökuva, jossa on muistikirja, jossa on AdventureWorks-latauskoodi.

Muutaman minuutin kuluttua Lakehouse täyttää tarvittavat tiedot.

Tekoälytaidon luominen

Jos haluat luoda uuden tekoälytaidon, siirry työtilaasi ja valitse + Uusi kohde - -painike seuraavassa näyttökuvassa esitetyllä tavalla:

Näyttökuva, joka näyttää, mistä tekoälytaitoja luodaan.

Etsi Kaikki kohteet -välilehdestä tekoälyn osaamista, jotta löydät sopivan vaihtoehdon. Kun tämä pyyntö on valittu, sinua pyydetään antamaan tekoälytaidollesi nimi seuraavassa näyttökuvassa esitetyllä tavalla:

näyttökuva, joka näyttää, mistä tekoälytaidoille annetaan nimi.

Kun olet antanut nimen, jatka seuraavien ohjeiden avulla, jotta tekoälytaidot vastaavat tiettyjä vaatimuksiasi.

Valitse tiedot

Valitse edellisessä vaiheessa luomasi lakehouse-talo ja valitse sitten Lisää. Kun Lakehouse on lisätty tietolähteeksi, Explorerin tekoälyn taitosivun vasemmassa reunassa olevassa ruudussa näkyy Lakehousen nimi. Valitse Lakehouse, jos haluat tarkastella kaikkia käytettävissä olevia taulukoita. Valintaruutujen avulla voit valita taulukot, jotka haluat antaa tekoälyn käyttöön. Valitse tässä skenaariossa seuraavat taulukot:

  • dimcustomer
  • dimdate
  • dimgeography
  • dimproduct
  • dimproductcategory
  • dimpromotion
  • dimreseller
  • dimsalesterritory
  • factinternetsales
  • cactresellersales

Näyttökuva, josta näet, mistä voit valita taulukoita tekoälylle.

Anna ohjeet

Jos haluat lisätä tekoälyohjeita, avaa oikealla oleva tekoälyohjeruutu napsauttamalla tekoälyohjeita -painiketta. Voit lisätä seuraavat ohjeet.

AdventureWorksLH-tietolähde sisältää tietoja kolmesta taulukosta:

  • dimcustomer: asiakkaiden demografiset tiedot ja yhteystiedot.
  • dimdate, päivämääriin liittyville tiedoille, esimerkiksi kalenteri- ja tilikausitieduksille
  • dimgeographymaantieteellisiä tietoja, mukaan lukien kaupunkien nimet ja maan aluekoodit.

Käytä tätä tietolähdettä kyselyihin ja analyyseihin, joihin liittyy asiakastietoja, aikaan perustuvia tapahtumia ja maantieteellisiä sijainteja.

Näyttökuva, josta näet, missä voit antaa ohjeet tekoälylle.

Anna esimerkkejä

Jos haluat lisätä esimerkkikyselyitä, valitse Esimerkkikyselyt -painike, jolloin oikealla puolella oleva Esimerkkikyselyt-ruutu avautuu. Tässä ruudussa on vaihtoehtoja lisätä tai muokata esimerkkikyselyitä kaikille tuetuille tietolähteille. Voit antaa tarvittavat esimerkit kullekin tietolähteelle valitsemalla Lisää tai Muokkaa esimerkkikyselyitä - seuraavassa näyttökuvassa esitetyllä tavalla:

näyttökuva, jossa näkyy, missä voit lisätä tekoälylle antamasi esimerkit.

Lisää tässä Esimerkkikyselyt luomaasi Lakehouse-tietolähteeseen.

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

Näyttökuva SQL-esimerkkien lisäämisestä.

Huomautus

Power BI:n semanttisen mallin tietolähteiden ei tällä hetkellä tueta mallien kysely/kysymysparien lisäämistä.

Tekoälytaidon testaaminen ja muokkaaminen

Nyt kun olet määrittänyt tekoälytaidon, lisännyt tekoälyohjeita ja antanut esimerkkikyselyitä Lakehouselle, voit käyttää niitä esittämällä kysymyksiä ja vastaanottamalla vastauksia. Kun jatkat testaamista, voit lisätä esimerkkejä ja tarkentaa ohjeita tekoälytaidon suorituskyvyn parantamiseksi entisestään. Tee yhteistyötä työtovereidesi kanssa palautteen keräämiseksi. Varmista annettujen esimerkkikyselyiden ja ohjeiden perusteella, että ne vastaavat niiden kysymysten tyyppiä, joita he haluavat esittää.

Tekoälytaitojen ohjelmallinen käyttö

Voit käyttää tekoälytaitoa ohjelmallisesti Fabric-muistikirjassa. Voit määrittää, onko tekoälytaidolla julkaistu URL-arvo, valitsemalla Asetukset tässä näyttökuvassa esitetyllä tavalla:

Näyttökuva, jossa näkyy tekoälyn taitoasetusten valinta.

Ennen kuin julkaiset tekoälytaidon, sillä ei ole julkaistua URL-arvoa seuraavassa näyttökuvassa esitetyllä tavalla:

Näyttökuva, joka näyttää, että tekoälytaidolla ei ole julkaistua URL-arvoa ennen julkaisemista.

Kun olet vahvistanut tekoälytaidon suorituskyvyn, voit julkaista sen, jotta voit jakaa sen työtovereillesi, jotka haluavat Q&A:n tietojen kautta. Valitse tässä tapauksessa Julkaise tässä näyttökuvassa esitetyllä tavalla:

Näyttökuva, jossa näkyy Julkaise-vaihtoehdon valinta.

Tekoälytaidolle julkaistu URL-osoite tulee näkyviin seuraavassa näyttökuvassa esitetyllä tavalla:

Näyttökuva, jossa näkyy julkaistu URL-osoite.

Voit sitten kopioida julkaistun URL-osoitteen ja käyttää sitä Fabric-muistikirjassa. Näin voit tehdä kyselyjä tekoälytaidoista kutsumalla tekoälyn taitojen ohjelmointirajapintaa Fabric-muistikirjassa. Liitä kopioitu URL-osoite tähän koodikatkelmaan. Korvaa sitten kysymys millä tahansa tekoälytaidollesi liittyvällä kyselyllä. Tätä esimerkkiä käytetään \<generic published URL value\> URL-osoitteena.

%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)