Zdieľať cez


Príklad dátového agenta tkaniny s množinou údajov AdventureWorks (ukážka)

V tomto článku sa dozviete, ako nastaviť dátového agenta v Microsoft Fabric pomocou jazera ako príkladu zdroja údajov. Najprv vytvoríme a naplníme lakehouse, potom vytvoríme dátového agenta Fabric a pridáme k nemu lakehouse. Ak už máte sémantický model Power BI (s potrebnými oprávneniami na čítanie/zápis), sklad, KQL databázu alebo ontológiu, postupujte podľa rovnakých krokov a vyberte tento zdroj. Hoci tento návod používa jazerný dom, vzor je rovnaký pre ostatné zdroje – líši sa iba výber zdroja údajov.

Dôležité

Táto funkcia je vo verzii Preview.

Požiadavky

Dôležité

Uistite sa, že na portáli na správu služby Power BI je povolené samostatné prostredie Copilot (nastavenia > nájomníka Copilot > Samostatné prostredie Copilot). Ak nie je povolený, nebudete môcť používať dátového agenta v scenároch Copilota, aj keď sú zapnuté iné prepínače nájomníka Copilot. Podrobnosti nájdete v téme Copilot v nastaveniach nájomníka služby Power BI.

Vytvorte si dom pri jazere s AdventureWorksLH

Najprv vytvorte dom pri jazere a naplňte ho potrebnými údajmi.

Ak už máte inštanciu AdventureWorksLH v dome pri jazere (alebo sklade), môžete tento krok preskočiť. Ak nie, môžete použiť nasledujúce pokyny z poznámkového bloku Fabric na vyplnenie jazera údajmi.

  1. Vytvorte nový poznámkový blok v pracovnom priestore, v ktorom chcete vytvoriť dátového agenta služby Fabric.

  2. Na ľavej strane tably Prieskumník vyberte položku + Zdroje údajov. Táto možnosť vám umožňuje pridať existujúci dom pri jazere alebo vytvoriť nový dom pri jazere. Pre prehľadnosť vytvorte nový dom pri jazere a priraďte mu názov.

  3. Do hornej bunky pridajte nasledujúci útržok kódu:

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

Snímka obrazovky zobrazujúca poznámkový blok s kódom na nahrávanie AdventureWorks.

Po niekoľkých minútach sa jazerár naplní potrebnými údajmi.

Caution

Poznámkové bloky, ktoré pokračujú v prevádzke (napríklad v dôsledku náhodných nekonečných slučiek alebo neustáleho dotazovania), môžu spotrebúvať kapacitu štruktúry neobmedzene dlho. Po dokončení načítavania údajov zastavte všetky aktívne bunky a ukončite reláciu poznámkového bloku (panel s nástrojmi > poznámkového bloku Zastaviť reláciu), ak ju už nepotrebujete. Vyhnite sa pridávaniu dlhotrvajúcich slučiek bez časového limitu.

Vytvorenie dátového agenta služby Fabric

Ak chcete vytvoriť nového agenta údajov Fabric, prejdite do pracovného priestoru a vyberte tlačidlo + Nová položka , ako je to znázornené na tejto snímke obrazovky:

Snímka obrazovky znázorňujúca, kde vytvoriť agentov údajov Fabric.

Na karte Všetky položky vyhľadajte údajového agenta Fabric a vyhľadajte príslušnú možnosť. Po výbere sa zobrazí výzva na zadanie názvu dátového agenta služby Fabric, ako je to znázornené na tejto snímke obrazovky:

Snímka obrazovky znázorňujúca, kde zadať názov dátového agenta Fabric.

Po zadaní názvu pokračujte nasledujúcimi krokmi, aby ste zosúladili dátového agenta služby Fabric s vašimi konkrétnymi požiadavkami.

Vyberte údaje

Vyberte dom pri jazere, ktorý ste vytvorili v predchádzajúcom kroku, a potom vyberte položku Pridať, ako je to znázornené na nasledujúcej snímke obrazovky:

Snímka obrazovky znázorňujúca krok pridania jazerného domu.

Po pridaní jazerára ako zdroja údajov sa na table Prieskumník na ľavej strane stránky Agent údajov Fabric zobrazí názov jazera. Výberom domu pri jazere zobrazíte všetky dostupné tabuľky. Pomocou začiarkavacích políčok vyberte tabuľky, ktoré chcete sprístupniť umelej inteligencii. V tomto scenári vyberte tieto tabuľky:

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

Snímka obrazovky zobrazujúca, kde môžete vybrať tabuľky pre AI.

Poskytnite pokyny

Ak chcete pridať pokyny, vyberte tlačidlo Pokyny pre dátového agenta a otvorte tablu s pokynmi na pravej strane. Môžete pridať nasledujúce pokyny.

Zdroj AdventureWorksLH údajov obsahuje informácie z troch tabuliek:

  • dimcustomer, pre podrobné demografické údaje zákazníkov a kontaktné informácie
  • dimdate, pre údaje súvisiace s dátumom – napríklad kalendárne a fiškálne informácie
  • dimgeography, pre geografické podrobnosti vrátane názvov miest a kódov regiónov krajín.

Tento zdroj údajov použite na dotazy a analýzy, ktoré zahŕňajú podrobnosti o zákazníkovi, udalosti založené na čase a geografické polohy.

Snímka obrazovky zobrazujúca, kde môžete AI poskytnúť pokyny.

Uveďte príklady

Ak chcete pridať vzorové dotazy, výberom tlačidla Príklady dotazov otvorte tablu s ukážkovými dotazmi na pravej strane. Táto tabla poskytuje možnosti na pridanie alebo úpravu vzorových dotazov pre všetky podporované zdroje údajov. Pre každý zdroj údajov môžete vybrať položku Pridať alebo upraviť vzorové dotazy a zadať príslušné príklady, ako je to znázornené na nasledujúcej snímke obrazovky:

Snímka obrazovky zobrazujúca, kde môžete pridať príklady, ktoré poskytnete umelej inteligencii.

Tu by ste mali pridať príklady dotazov pre zdroj údajov Lakehouse, ktorý ste vytvorili.

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

Snímka obrazovky s pridaním príkladov SQL.

Poznámka

Pridanie vzorových párov dotaz/otázka nie je momentálne podporované pre zdroje údajov sémantického modelu služby Power BI.

Testovanie a revízia dátového agenta Fabric

Teraz, keď ste nakonfigurovali dátového agenta Fabric, pridali pokyny pre agenta údajov Fabric a poskytli príklady dotazov pre Lakehouse, môžete s ním pracovať kladením otázok a prijímaním odpovedí. Pri ďalšom testovaní môžete pridať ďalšie príklady a spresniť pokyny, aby ste ešte viac zlepšili výkon dátového agenta Fabric. Spolupracujte so svojimi kolegami na získavaní spätnej väzby a na základe ich vstupov sa uistite, že poskytnuté príklady otázok a pokynov sú v súlade s typmi otázok, ktoré chcú položiť.

Publikovanie dátového agenta služby Fabric

Po overení výkonu agenta údajov Fabric sa môžete rozhodnúť ho publikovať, aby ste ho potom mohli zdieľať so svojimi kolegami, ktorí chcú pracovať na otázkach a odpovediach nad údajmi. V takom prípade vyberte položku Publikovať, ako je to znázornené na tejto snímke obrazovky:

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

Otvorí sa okno Publikovať dátového agenta , ako je znázornené na tejto snímke obrazovky:

Snímka obrazovky zobrazujúca funkciu agenta publikovania údajov.

V tomto poli vyberte položku Publikovať a publikujte dátového agenta Fabric. Zobrazí sa publikovaná URL adresa agenta údajov Fabric, ako je znázornené na tejto snímke obrazovky:

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

Použitie dátového agenta Fabric v Copilote v službe Power BI

Copilot v službe Power BI môžete použiť na interakciu s dátovým agentom Fabric po jeho publikovaní. Pomocou aplikácie Copilot v službe Power BI môžete priamo využívať dátového agenta a ďalšie položky (napríklad zostavy alebo sémantické modely) bez toho, aby ste medzi nimi museli prepínať.

Výberom tlačidla Copilot na ľavej navigačnej table otvorte Copilot v službe Power BI. Potom vyberte položku Pridať položky pre lepšie výsledky v textovom poli v dolnej časti a pridajte dátového agenta. V okne, ktoré sa otvorí, vyberte položku Dátoví agenti . Môžete vidieť iba dátových agentov, ku ktorým máte povolenie na prístup. Vyberte požadovaného dátového agenta a vyberte položku Potvrdiť. Tento príklad ukazuje, ako pracovať s jedným dátovým agentom, ale môžete pridať ďalšie položky – napríklad iných dátových agentov, zostavy alebo sémantické modely. Nasledujúca snímka obrazovky znázorňuje kroky s jedným dátovým agentom:

Snímka obrazovky zobrazujúca tlačidlo Copilot a tlačidlo na pridanie položiek, ako sú napríklad dátoví agenti.

Teraz, keď ste pridali dátového agenta do Copilota v službe Power BI, môžete položiť akékoľvek otázky týkajúce sa dátového agenta služby Fabric, ako je znázornené na nasledujúcej snímke obrazovky:

Snímka obrazovky zobrazujúca Copilota odpovedajúceho na otázku.

Programové použitie dátového agenta služby Fabric

Dátového agenta Fabric môžete použiť programovo v rámci poznámkového bloku Fabric. Ak chcete zistiť, či má agent údajov Fabric publikovanú hodnotu URL adresy, vyberte položku Nastavenia, ako je to znázornené na nasledujúcej snímke obrazovky:

Snímka obrazovky zobrazujúca výber nastavení dátového agenta Fabric.

Pred publikovaním dátového agenta Fabric nemá publikovanú hodnotu URL adresy, ako je znázornené na nasledujúcej snímke obrazovky:

Snímka obrazovky znázorňujúca, že agent údajov Fabric nemá pred publikovaním publikovanú hodnotu URL adresy.

Ak ste agenta údajov Fabric ešte nepublikovali, môžete ho publikovať podľa pokynov v predchádzajúcich krokoch. Potom môžete skopírovať publikovanú URL adresu a použiť ju v poznámkovom bloku Fabric. Týmto spôsobom môžete dotazovať agenta údajov Fabric volaním rozhrania API agenta údajov Fabric v poznámkovom bloku Fabric. Vložte skopírovanú URL adresu do tohto útržku kódu. Potom nahraďte otázku akýmkoľvek dotazom relevantným pre vášho agenta údajov Fabric. Tento príklad sa používa \<generic published URL value\> ako adresa URL.

Dôležité

Pri programovom volaní dátového agenta implementujte:

  1. Časový limit hlasovania (pozri príklad nižšie), aby sa predišlo neurčitým slučkám.
  2. Minimálna frekvencia dotazovania (začnite na 2 – 5 sekundách; zvýšte len v prípade potreby).
  3. Čistenie vytvorených vlákien alebo zdrojov po dokončení.
  4. Po dokončení sa relácia poznámkového bloku vypne, aby sa uvoľnila kapacita štruktúry.

Poznámka

Upravte piny verzií (openai, synapseml, , pandas) tqdmna najnovšie overené verzie modulu runtime služby Fabric, ak sú tieto presné verzie zastarané.

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