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ä OneLake-luettelossa>Govern>Configurations>Tenant settings>Copilot>Standalone Copilot -kokemus. 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. Julkaisun jälkeen dataagenttia voidaan käyttää mallikontekstiprotokollan (MCP) palvelimena.

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

Important

Koska OpenAI poisti Assistants API:n käytöstä, sovellusten tulisi käyttää MCP-päätelaitetta agenttien vuorovaikutukseen. Toisin kuin Assistants API, MCP-päätepiste ei tarjoa sisäänrakennettua keskustelunhallintaa, joten soittajien on orkestroittava monikierrosten vuorovaikutus ylläpitämällä keskustelutilaa ja tarjoamalla asiaankuuluvaa kontekstia pyyntöjen yli.

Kysy dataagenttia Python:sta

Seuraava esimerkki yhdistää MCP-päätepisteen, löytää työkalun, lähettää kysymyksen ja tulostaa vastauksen. Se käyttää credential uudelleen from Authenticate to Fabric -vaihetta ja MCP Python SDK:ta. Asenna SDK ensin:

%pip install mcp
import asyncio

from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

workspace_id = "<your-workspace-id>"
data_agent_id = "<your-data-agent-id>"
question = "<your question>"

mcp_url = (
    f"https://api.fabric.microsoft.com/v1/mcp/workspaces/{workspace_id}"
    f"/dataagents/{data_agent_id}/agent"
)


def get_auth_headers():
    token = credential.get_token("https://api.fabric.microsoft.com/.default")
    return {"Authorization": f"Bearer {token.token}"}


async def query_data_agent(question):
    headers = get_auth_headers()

    async with streamablehttp_client(mcp_url, headers=headers) as (read, write, _):
        async with ClientSession(read, write) as session:
            await session.initialize()

            # The data agent exposes a single tool. Discover it, then call it.
            tools = await session.list_tools()
            tool = tools.tools[0]
            question_arg = next(iter(tool.inputSchema["properties"]))

            result = await session.call_tool(tool.name, {question_arg: question})

            answers = [block.text for block in result.content if block.type == "text"]
            return "\n".join(answers)


answer = asyncio.run(query_data_agent(question))
print(answer)