Jaa


Fabric-dataagentin esimerkki AdventureWorks-aineiston kanssa (esikatselu)

Tässä artikkelissa näytetään, miten dataagentti asetetaan Microsoft Fabric -järjestelmään käyttäen esimerkkinä lakehousea. Luomme ensin järvenrakennuksen, sitten luomme Fabric-dataagentin ja lisäämme järvenrakennuksen siihen. Jos sinulla on jo Power BI:n semanttinen malli, varmista, että sinulla on lukulupa olla vuorovaikutuksessa sen kanssa dataagentin kautta (kirjoituslupa vaaditaan vain semanttisen mallin muokkaamiseen tai ominaisuuksien, kuten tekoälyn valmistelun, käyttöön). Varaston, KQL-tietokannan tai ontologian kohdalla noudata samoja vaiheita ja valitse kyseinen lähde. Vaikka tämä kävelykierros käyttää järvitaloa, kaava on sama muissa lähteissä; vain tietolähteen valinta eroaa.

Important

Tämä ominaisuus on esikatselutilassa.

Prerequisites

Important

Varmista, että itsenäinen Copilot-kokemus on käytössä Power BI ylläpitäjäportaalissa (Tenant settings > Copilot > Standalone Copilot experience). Jos se ei ole käytössä, et voi käyttää dataagenttia Copilot-tilanteissa, vaikka muut Copilot-vuokralaisten kytkimet olisivat päällä. Lisätietoja löytyy Copilot Power BI vuokralaisasetuksista.

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 et, voit käyttää seuraavia ohjeita Fabric-muistikirjasta täyttääksesi järvenrakennuksen datalla.

  1. Luo uusi muistikirja työtilaan, johon haluat luoda Fabric-dataagenttisi.

  2. Valitse Resurssienhallinta-ruudun vasemmassa reunassa + 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.z13.web.core.windows.net/data/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.

Caution

Muistikirjat, jotka jatkavat toimintaansa (esimerkiksi sattumanvaraisten äärettömien silmukoiden tai jatkuvan kyselyn vuoksi), voivat kuluttaa Fabric-kapasiteettia loputtomasti. Kun tiedot on latautunut, pysäytä kaikki aktiiviset solut ja lopeta muistikirjan istunto (Muistikirjan työkalurivin > Lopeta istunto), jos et enää tarvitse niitä. Vältä pitkäkestoisten silmukoiden lisäämistä ilman aikakatkaisua.

Luo Fabric-dataagentti

Uuden Fabric-dataagentin luomiseksi siirry työtilaasi ja valitse + New Item -painike, kuten tässä kuvakaappauksessa näkyy:

Screenshot, jossa näkyy, missä Fabric dataagentit luodaan.

Kaikki kohteet -välilehdeltä etsi Fabric data agent löytääksesi sopivan vaihtoehdon. Kun valinta on valittu, kehote pyytää sinua antamaan nimen Fabric-dataagentillesi, kuten tässä kuvakaappauksessa näkyy:

Kuvakaappaus, jossa näkyy, missä Fabric dataagentille annetaan nimi.

Kun olet syöttänyt nimen, jatka seuraavilla vaiheilla sovittaaksesi Fabric-dataagentin omiin tarpeisiisi.

Valitse tiedot

Valitse edellisessä vaiheessa luomasi lakehouse ja valitse sitten Lisää, kuten seuraavassa näyttökuvassa näkyy:

Näyttökuva, jossa näkyy Lakehouse-vaiheen lisääminen.

Kun järvenrakennus lisätään tietolähteeksi, Explorer-paneeli Fabric-dataagenttisivun vasemmalla puolella näyttää järventalon nimen. 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
  • factresellersales

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

Semanttisten mallien käyttöoikeudet tietoagenteissa

Käyttäjät tarvitsevat vain lukuluvan Power BI-semanttisessa mallissa voidakseen lisätä sen dataagenttiin ja esittää kysymyksiä agentin kautta. Työtilan käyttöoikeus (Member role) ja Build-oikeudet eivät ole tarpeen dataagenttien väliseen vuorovaikutukseen. Kirjoituslupa tarvitaan vain semanttisen mallin muokkaamiseen tai ominaisuuksien, kuten tekoälyn valmistelun, käyttämiseen.

Tämä käyttöoikeuksien muutos koskee vain dataagenttien kautta tapahtuvia vuorovaikutuksia. Muut käyttötavat (esim. Analyze in Excel tai direct report authorship) noudattavat standardeja Power BI:n käyttöoikeuksia.

Anna ohjeita

Jos haluat lisätä ohjeita, avaa oikeanpuoleinen ohjeruutu valitsemalla Tietoagentin ohjeet -painike. 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ä, avaa esimerkkikyselyt-ruutu oikealla valitsemalla Esimerkkikyselyt-painike . 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ä.

Note

Esimerkkikysely-/kysymysparien lisäämistä ei tällä hetkellä tueta Power BI:n semanttisten mallien tietolähteissä.

Testaa ja päivitä Fabric-dataagentti

Nyt kun olet konfiguroinut Fabric-dataagentin, lisännyt Fabric-dataagentin ohjeet ja antanut esimerkkikyselyitä järvenrakennukselle, voit olla vuorovaikutuksessa sen kanssa esittämällä kysymyksiä ja vastaanottamalla vastauksia. Kun jatkat testaamista, voit lisätä lisää esimerkkejä ja tarkentaa ohjeita, jotta Fabric-dataagentin suorituskyky paranee 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ää.

Julkaise Fabric-dataagentti

Kun olet validoinut Fabric-dataagentin suorituskyvyn, saatat päättää julkaista sen, jotta voit jakaa sen kollegoillesi, jotka haluavat tehdä Q&;-osiota. A ylimääräinen data. Valitse tässä tapauksessa Julkaise tässä näyttökuvassa esitetyllä tavalla:

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

Julkaise tietoagentti -ruutu avautuu seuraavassa näyttökuvassa esitetyllä tavalla:

Näyttökuva, jossa näkyy Julkaise tietoagentti -toiminto.

Tässä laatikossa valitse Publish julkaistaksesi Fabric dataagentin. Julkaistu URL-osoite Fabric-dataagentille näkyy, kuten tässä kuvakaappauksessa näkyy:

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

Käytä Fabric-dataagenttia Copilot-tilassa Power BI:ssä

Voit käyttää Copilot-ohjelmaa Power BI:ssä vuorovaikutukseen Fabric-dataagentin kanssa julkaisun jälkeen. Copilot Power BI:ssä voi suoraan käyttää dataagenttia ja muita kohteita (esimerkiksi raportteja tai semanttisia malleja) ilman, että sinun tarvitsee vaihtaa niiden välillä.

Valitse vasemman navigointipaneelin Copilot-painike avataksesi Copilot Power BI. Valitse seuraavaksi Lisää kohteita, jotta alareunassa olevassa tekstiruudussa olisi parempia tuloksia, jotta tietoagentti voidaan lisätä. Valitse Tietoagentit avautuvassa ikkunassa. Näet vain ne tietoagentit, joihin sinulla on käyttöoikeus. Valitse haluamasi asiakaspalvelija ja valitse Vahvista. Tässä esimerkissä näytetään, miten käsitellään yksittäistä tietoagenttia, mutta voit lisätä kohteita, kuten muita tietoagentteja, raportteja tai semanttisia malleja. Seuraava näyttökuva havainnollistaa vaiheita yksittäisen tietoagentin kanssa:

Screenshot, jossa näkyy Copilot-painike ja painikkeet esimerkiksi Data Agents.

Kun dataagentti sisältää Power BI:n semanttisen mallin, käyttäjien tarvitsee vain lukuluvan kyseisessä semanttisessa mallissa ollakseen vuorovaikutuksessa Copilot-mallin kautta; työtilaan pääsyä ei tarvita. Kirjoituslupa tarvitaan edelleen semanttisten mallien muutoksiin ja tekoälyn valmisteluun.

Nyt kun olet lisännyt dataagentin Copilot-ohjelmaan Power BI:ssä, voit kysyä mitä tahansa Fabric-dataagenttiisi liittyviä kysymyksiä, kuten seuraavassa kuvakaappauksessa näkyy:

Screenshot, jossa Copilot vastaa kysymykseen.

Käytä Fabric-dataagenttia ohjelmallisesti

Voit käyttää Fabric-dataagenttia ohjelmallisesti Fabric-muistikirjassa. Määrittääksesi, onko Fabric dataagentilla julkaistu URL-arvo, valitse Settings, kuten seuraavassa kuvakaappauksessa näkyy:

Screenshot, jossa näkyy Fabric dataagentin asetusten valinta.

Ennen kuin julkaiset Fabric-dataagentin, sillä ei ole julkaistua URL-arvoa, kuten seuraavassa kuvakaappauksessa näkyy:

Screenshot, jossa näkyy, että Fabric-dataagentilla ei ole julkaistua URL-arvoa ennen julkaisua.

Jos et ole aiemmin julkaissut Fabric-dataagenttia, voit julkaista sen edellisten ohjeiden mukaisesti. Voit sitten kopioida julkaistun URL-osoitteen ja käyttää sitä Fabric-muistikirjassa. Näin voit kysyä Fabric-dataagenttia tekemällä kutsuja Fabric-dataagentin API:lle Fabric-muistikirjassa. Liitä kopioitu URL-osoite tähän koodikatkelmaan. Sitten korvaa kysymys millä tahansa Fabric-dataagenttiin liittyvällä kyselyllä. Tätä esimerkkiä käytetään \<generic published URL value\> URL-osoitteena.

Important

Kun kutsut tietoagenttia ohjelmallisesti, toteuta:

  1. Kyselyn aikakatkaisu (katso esimerkki alla) määrittelemättömien silmukoiden välttämiseksi.
  2. Pienin kyselytaajuus (aloita 2–5 sekunnista; lisää vain tarvittaessa).
  3. Luotujen säikeiden tai resurssien siivoaminen valmistumisen jälkeen.
  4. Muistikirjan istunto suljetaan Fabric-kapasiteetin vapauttamiseksi.

Note

Säädä versiopinnejä (openai, synapseml, pandas, tqdm) uusimpiin validoituihin versioihin Fabric ajonaikaasi varten, jos nämä tarkat versiot vanhenevat.

%pip install "openai==1.70.0"
%pip install "synapseml==1.0.5"  # Required for synapse.ml.mlflow (update version as needed)
%pip install pandas tqdm  # Skip if already available in the Fabric runtime
import typing as t
import time
import uuid

# OpenAI SDK internals
from openai import OpenAI
from openai._models import FinalRequestOptions
from openai._types import Omit
from openai._utils import is_given

# SynapseML helper for env config
from synapse.ml.mlflow import get_mlflow_env_config

# Removed unused imports: requests, json, pprint, APIStatusError, SynapseTokenProvider
 
base_url = "https://<generic published base URL value>"
question = "What data sources 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 (avoid indefinite loop)
terminal_states = {"completed", "failed", "cancelled", "requires_action"}
poll_interval = 2
timeout_seconds = 300  # Adjust based on expected workload
start_time = time.time()

while run.status not in terminal_states:
    if time.time() - start_time > timeout_seconds:
        raise TimeoutError(f"Run polling exceeded {timeout_seconds} seconds (last status={run.status})")
    run = fabric_client.beta.threads.runs.retrieve(
        thread_id=thread.id,
        run_id=run.id,
    )
    print(run.status)
    time.sleep(poll_interval)

if run.status != "completed":
    print(f"Run finished with status: {run.status}")

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