Megosztás a következőn keresztül:


Fabric adatügynök példa az AdventureWorks adathalmazzal (előzetes verzió)

Ez a cikk bemutatja, hogyan állíthat be egy adatügynököt a Microsoft Fabricben egy lakehouse használatával, mint példaadatforrás. Először létrehozunk és feltöltünk egy tóházat, majd létrehozunk egy Fabric-adatügynököt, és hozzáadjuk a tóházat. Ha már rendelkezik Power BI szemantikai modellel (a szükséges olvasási/írási engedélyekkel), egy raktárral, egy KQL-adatbázissal vagy egy ontológiával, kövesse ugyanazokat a lépéseket, és válassza ki helyette a forrást. Bár ez az útmutató egy tóházat használ, a minta más források esetében is ugyanaz – csak az adatforrás kiválasztása különbözik.

Fontos

Ez a funkció előzetes verzióban érhető el.

Előfeltételek

Fontos

Győződjön meg arról, hogy az önálló Copilot-élmény engedélyezve van a Power BI felügyeleti portálján (Bérlői beállítások > A Copilot > önálló copilot felülete). Ha nincs engedélyezve, nem fogja tudni használni az adatügynököt a Copiloton belüli forgatókönyvekben, még akkor sem, ha más Copilot bérlői kapcsolók be vannak kapcsolva. További részletekért lásd a Copilotot a Power BI-bérlői beállításokban.

Tóház létrehozása az AdventureWorksLH használatával

Először hozzon létre egy tóházat, és töltse ki a szükséges adatokkal.

Ha már rendelkezik egy AdventureWorksLH-példánysal egy tóházban (vagy egy raktárban), kihagyhatja ezt a lépést. Ha nem, a Fabric-jegyzetfüzet alábbi utasításait követve feltöltheti a tóházat az adatokkal.

  1. Hozzon létre egy új jegyzetfüzetet a munkaterületen, ahol létre szeretné hozni a Fabric-adatügynököt.

  2. Az Explorer panel bal oldalán válassza a + Adatforrások lehetőséget. Ezzel a beállítással hozzáadhat egy meglévő tóházat, vagy létrehozhat egy új tóházat. Az egyértelműség kedvéért hozzon létre egy új tóházat, és rendeljen hozzá egy nevet.

  3. A felső cellába adja hozzá a következő kódrészletet:

    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. Válassza a Összes futtatása lehetőséget.

Képernyőkép egy jegyzetfüzetről az AdventureWorks feltöltési kódjával.

Néhány perc múlva a tóház feltöltődik a szükséges adatokkal.

Caution

A továbbra is futó jegyzetfüzetek (például véletlen végtelen ciklusok vagy állandó lekérdezések miatt) korlátlan ideig használhatják a Fabric-kapacitást. Miután az adatok betöltése befejeződött, állítsa le az aktív cellákat, és fejezze be a jegyzetfüzet-munkamenetet (Jegyzetfüzet eszköztár > – Munkamenet leállítása), ha már nincs rá szüksége. Kerülje az időtúllépés nélküli, hosszú ideig futó hurkok hozzáadását.

Fabric adatügynök létrehozása

Új Fabric-adatügynök létrehozásához lépjen a munkaterületére, és válassza a + Új elem gombot, ahogyan az ezen a képernyőképen látható:

A Fabric-adatügynökök létrehozásának helyét bemutató képernyőkép.

A Minden elem fülön keresse a Szövet adatügynök a megfelelő beállítás megkereséséhez. Miután kiválasztotta, egy üzenet arra kéri, hogy adjon nevet a Fabric-adatügynöknek, ahogyan az a képernyőképen látható:

Képernyőkép a Fabric-adatügynök nevének megadásáról.

A név megadása után folytassa a következő lépésekkel, hogy a Fabric-adatügynök megfeleljen a megadott követelményeknek.

Válassza ki az adatokat

Válassza ki az előző lépésben létrehozott tóházat, majd válassza a Hozzáadás lehetőséget, ahogy az a következő képernyőképen látható.

Képernyőkép, amely a Lakehouse hozzáadásának lépését mutatja.

Miután hozzáadta a lakehouse-t adatforrásként, a Explorer panel a Fabric Data Agent oldal bal oldalán a lakehouse nevét jeleníti meg. Válassza ki a tóházat az összes elérhető tábla megtekintéséhez. A jelölőnégyzetek használatával jelölje ki az AI számára elérhetővé tenni kívánt táblákat. Ebben a forgatókönyvben válassza ki az alábbi táblázatokat:

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

Képernyőkép arról, hogy hol jelölhet ki táblákat az MI-hez.

Utasítások megadása

Utasítások hozzáadásához válassza az Adatügynök utasításai gombot az utasítások panel jobb oldalán való megnyitásához. Az alábbi utasításokat is hozzáadhatja.

A AdventureWorksLH adatforrás három táblából tartalmaz információkat:

  • dimcustomer, az ügyfelek részletes demográfiai adataiért és kapcsolattartási adataiért
  • dimdatedátummal kapcsolatos adatok esetén– például naptár- és pénzügyi információk
  • dimgeographyföldrajzi adatok, beleértve a városneveket és az országrégió kódjait.

Ezt az adatforrást olyan lekérdezésekhez és elemzésekhez használhatja, amelyek magukban foglalják az ügyfelek adatait, az időalapú eseményeket és a földrajzi helyeket.

Képernyőkép arról, hogy hol adhat meg utasításokat az AI-nek.

Példák megadása

Példa lekérdezések hozzáadásához válassza a Példa lekérdezések gombot a minta lekérdezések panel jobb oldalán való megnyitásához. Ez a panel az összes támogatott adatforrás minta lekérdezéseinek hozzáadására és szerkesztésére szolgál. Az egyes adatforrások esetében kiválaszthatja a Példalekérdezések hozzáadása vagy szerkesztése lehetőséget a megfelelő példák beviteléhez, ahogyan az alábbi képernyőképen látható:

Képernyőkép arról, hogy hol adhat hozzá példákat az AI-hoz.

Ebben a példában példa lekérdezéseket kell hozzáadnia a létrehozott lakehouse-adatforráshoz.

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

KÉPERNYŐKÉP AZ SQL-példák hozzáadásáról.

Megjegyzés:

A Power BI szemantikai modell adatforrásai jelenleg nem támogatják a minta lekérdezés-/kérdéspárok hozzáadását.

A Fabric-adatügynök tesztelése és felülvizsgálata

Most, hogy konfigurálta a Fabric-adatügynököt, hozzáadta a Fabric-adatügynök utasításait, és példákat adott a lakehouse-hoz, kérdéseket tehet fel, és válaszokat kaphat. A tesztelés folytatása során további példákat adhat hozzá, és finomíthatja az utasításokat a Fabric-adatügynök teljesítményének további javítása érdekében. A munkatársaival együttműködve visszajelzéseket gyűjthet, és a bemenetük alapján biztosíthatja, hogy a megadott példaként megadott lekérdezések és utasítások összhangban legyenek a feltenni kívánt kérdéstípusokkal.

A Fabric-adatügynök közzététele

Miután ellenőrizte a Fabric adatügynök teljesítményét, dönthet úgy, hogy közzéteszi, így megoszthatja azokat az adatokkal kapcsolatos kérdések és válaszok elvégzésére kíváncsi munkatársaival. Ebben az esetben válassza a Közzététel lehetőséget a képernyőképen látható módon:

Képernyőkép a Közzététel lehetőség kiválasztásáról.

A Adatközlő ügynök mező megnyílik, ahogyan az ezen a képernyőképen látható:

Képernyőkép az adatügynök közzétételi funkcióról.

Ebben a dobozban válassza a Közzététel lehetőséget a Fabric-adatügynök közzétételéhez. Megjelenik a Fabric-adatügynök közzétett URL-címe a képernyőképen látható módon:

Képernyőkép a közzétett URL-címről.

A Fabric-adatügynök használata a Copilotban a Power BI-ban

A Power BI-ban a Copilot használatával kommunikálhat a Fabric-adatügynökkel a közzététel után. A Copilot a Power BI-ban közvetlenül felhasználhatja az adatügynököt és más elemeket (például jelentéseket vagy szemantikai modelleket), anélkül, hogy váltania kellene közöttük.

Válassza a Copilot gombot a bal oldali navigációs panelen, és nyissa meg a Copilotot a Power BI-ban. Ezután válassza az Elemek hozzáadása a jobb eredmény érdekében lehetőséget az alsó szövegmezőben az adatügynök hozzáadásához. Válassza ki az Adatügynököket a megnyíló ablakban. Csak azokat az adatügynököket láthatja, amelyekhez hozzáféréssel rendelkezik. Válassza ki a kívánt adatügynököt, és válassza a Megerősítés lehetőséget. Ez a példa bemutatja, hogyan használható egyetlen adatügynökkel, de további elemeket is hozzáadhat – például más adatügynököket, jelentéseket vagy szemantikai modelleket. Az alábbi képernyőkép egyetlen adatügynökkel szemlélteti a lépéseket:

Képernyőkép a Copilot gombról és az olyan elemek hozzáadásához, mint az Adatügynökök.

Most, hogy hozzáadta az adatügynököt a Copilothoz a Power BI-ban, kérdéseket tehet fel a Fabric-adatügynökkel kapcsolatban, ahogyan az alábbi képernyőképen látható:

Képernyőkép egy kérdésre válaszoló Copilotról.

A Fabric-adatügynök programozott használata

A Fabric-adatügynök programozott módon használható a Fabric-jegyzetfüzetben. Annak megállapításához, hogy a Háló-adatügynök rendelkezik-e közzétett URL-értékkel, válassza a Beállítások lehetőséget az alábbi képernyőképen látható módon:

Képernyőkép, amely a Fabric adatügynök beállításainak kiválasztását mutatja.

A Fabric-adatügynök közzététele előtt nem rendelkezik közzétett URL-értékkel, ahogyan az az alábbi képernyőképen látható:

Képernyőkép arról, hogy a Fabric-adatügynök nem rendelkezik közzétett URL-értékkel a közzététel előtt.

Ha még nem tette közzé a Fabric adatügynököt, az előző lépésekben leírt utasításokat követve megteheti. Ezután másolhatja a közzétett URL-címet, és használhatja a Fabric notebookban. Így lekérdezheti a Fabric-adatügynököt úgy, hogy meghívja a Fabric-adatügynök API-t egy Fabric-jegyzetfüzetben. Illessze be ebben a kódrészletben a másolt URL-címet. Ezután cserélje le a kérdést a Fabric-adatügynökre vonatkozó lekérdezésre. Ez a példa URL-címként szolgál \<generic published URL value\> .

Fontos

Az adatügynök programozott meghívásakor implementálja a következőt:

  1. A lekérdezések időtúllépése (lásd az alábbi példát) a határozatlan idejű hurkok elkerülése érdekében.
  2. Minimális lekérdezési gyakoriság (2–5 másodpercnél kezdődik, csak szükség esetén növekszik).
  3. A létrehozott szálak vagy erőforrások törlése a befejezés után.
  4. A jegyzetfüzet munkamenetének leállítása, ha befejeződött a Fabric-kapacitás felszabadítása.

Megjegyzés:

Ha ezek a verziók elavulttá válnak, állítsa a verziótűket (openai, synapseml, pandas, tqdm) a Fabric futtatókörnyezet legújabb érvényesített verzióira.

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