Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
Denne artikkelen viser hvordan du konfigurerer en dataagent i Microsoft Fabric ved hjelp av et innsjøhus som eksempeldatakilde. Vi oppretter og fyller først ut et innsjøhus, deretter oppretter vi en Fabric-dataagent og legger til innsjøhuset i det. Hvis du allerede har en Power BI semantisk modell (med nødvendige lese-/skrivetillatelser), et lager, en KQL-database eller en ontologi, følg de samme stegene og velg den kilden i stedet. Selv om denne gjennomgangen bruker et innsjøhus, er mønsteret det samme for andre kilder – bare datakildevalget er forskjellig.
Important
Denne funksjonen er i forhåndsvisning.
Prerequisites
- En betalt F2 eller høyere Fabric-kapasitet, eller en Power BI Premium per kapasitet (P1 eller høyere) kapasitet med Microsoft Fabric aktivert
- Leierinnstillinger for fabric-dataagenten er aktivert.
- kryss-geo-behandling for AI- er aktivert.
- kryss-geo lagring for AI- er aktivert.
- Minst én av disse, med data: Et lager, et lakehouse, en eller flere Power BI semantiske modeller, en KQL-database eller en ontologi.
- Power BI-semantiske modeller via XMLA-endepunkter-leierbryteren er aktivert for datakilder for semantisk power BI-semantisk modell.
Important
Kontroller at den frittstående Copilot-opplevelsen er aktivert i administrasjonsportalen for Power BI (leierinnstillinger > Copilot > frittstående Copilot-opplevelse). Hvis den ikke er aktivert, kan du ikke bruke dataagenten i Copilot-scenarioer selv om andre Copilot-leierbrytere er på. Hvis du vil ha mer informasjon, kan du se Copilot i Power BI-leierinnstillinger.
Opprett et lakehouse med AdventureWorksLH
Først oppretter du et lakehouse og fyller det ut med de nødvendige dataene.
Hvis du allerede har en forekomst av AdventureWorksLH i et lakehouse (eller et lager), kan du hoppe over dette trinnet. Hvis ikke, kan du bruke følgende instruksjoner fra en Fabric-notatblokk til å fylle ut lakehouse med dataene.
Opprett en ny notatblokk i arbeidsområdet der du vil opprette fabric-dataagenten.
På venstre side av Utforsker-ruten velger du + Datakilder. Med dette alternativet kan du legge til et eksisterende lakehouse eller opprette et nytt lakehouse. For klarhet, opprett et nytt innsjøhus og tilordne et navn til det.
Legg til følgende kodesnutt i den øverste cellen:
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)Velg Kjør alle.
Etter noen minutter fylles lakehouse med de nødvendige dataene.
Caution
Notatblokker som fortsetter å kjøre (for eksempel på grunn av utilsiktede uendelige løkker eller konstant avspørring), kan bruke Fabric-kapasitet på ubestemt tid. Når dataene er lastet inn, stopper du alle aktive celler og avslutter notatblokkøkten (Stopp økten på verktøylinjen > for notatblokk) hvis du ikke lenger trenger den. Unngå å legge til langvarige løkker uten tidsavbrudd.
Opprette en fabric-dataagent
Hvis du vil opprette en ny fabric-dataagent, går du til arbeidsområdet og velger knappen + Nytt element, som vist i dette skjermbildet:
Søk etter Fabric-dataagenten på Fanen Alle elementer for å finne det riktige alternativet. Når dette er valgt, blir du bedt om å oppgi et navn for fabric-dataagenten, som vist i dette skjermbildet:
Når du har skrevet inn navnet, fortsetter du med følgende trinn for å justere fabric-dataagenten med dine spesifikke krav.
Velg dataene
Velg innsjøhuset du opprettet i forrige trinn, og velg deretter Legg til, som vist i følgende skjermbilde:
Når innsjøen er lagt til som en datakilde, viser Utforsker-ruten på venstre side av Strukturdataagent-siden navnet på innsjøen. Velg lakehouse for å vise alle tilgjengelige tabeller. Bruk avmerkingsboksene til å velge tabellene du vil gjøre tilgjengelig for kunstig intelligens. Velg disse tabellene for dette scenarioet:
dimcustomerdimdatedimgeographydimproductdimproductcategorydimpromotiondimresellerdimsalesterritoryfactinternetsalesfactresellersales
Gi instruksjoner
Hvis du vil legge til instruksjoner, velger du Instruksjoner for dataagent for å åpne instruksjonsruten til høyre. Du kan legge til følgende instruksjoner.
Datakilden AdventureWorksLH inneholder informasjon fra tre tabeller:
-
dimcustomer, for detaljert kundedemografi og kontaktinformasjon -
dimdate, for datorelaterte data – for eksempel kalender- og regnskapsinformasjon -
dimgeographyfor geografiske detaljer, inkludert bynavn og landsområdekoder.
Bruk denne datakilden for spørringer og analyser som involverer kundedetaljer, tidsbaserte hendelser og geografiske plasseringer.
Gi eksempler
Hvis du vil legge til eksempelspørringer, velger du Eksempelspørringer-knappen for å åpne eksempelspørringsruten til høyre. Denne ruten inneholder alternativer for å legge til eller redigere eksempelspørringer for alle støttede datakilder. For hver datakilde kan du velge Legg til eller rediger eksempelspørringer for å legge inn de relevante eksemplene, som vist i følgende skjermbilde:
Her bør du legge til eksempelspørringer for datakilden for lakehouse som du opprettet.
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
Note
Å legge til eksempelspørrings-/spørsmålspar støttes for øyeblikket ikke for datakilder for semantisk modell for Power BI.
Teste og revidere fabric-dataagenten
Nå som du har konfigurert Fabric-dataagenten, lagt til fabric-dataagentinstruksjoner og gitt eksempelspørringer for lakehouse, kan du samhandle med det ved å stille spørsmål og motta svar. Etter hvert som du fortsetter testingen, kan du legge til flere eksempler og finjustere instruksjonene for å forbedre ytelsen til Fabric-dataagenten ytterligere. Samarbeid med kollegene dine for å samle inn tilbakemeldinger, og kontroller at de angitte eksempelspørringene og instruksjonene samsvarer med spørsmålstypene de vil stille.
Publiser fabric-dataagenten
Når du har validert ytelsen til Fabric-dataagenten, kan du bestemme deg for å publisere den slik at du kan dele den med kollegene dine som ønsker å gjøre Q&A over data. I dette tilfellet velger du Publiser, som vist i dette skjermbildet:
Boksen Publiser dataagent åpnes, som vist i dette skjermbildet:
I denne boksen velger du Publiser for å publisere Fabric-dataagenten. Den publiserte nettadressen for Fabric-dataagenten vises, som vist i dette skjermbildet:
Bruke Fabric-dataagenten i Copilot i Power BI
Du kan bruke Copilot i Power BI til å samhandle med fabric-dataagenten etter at du har publisert den. Med Copilot i Power BI kan du bruke dataagenten og andre elementer direkte (for eksempel rapporter eller semantiske modeller) uten å måtte bytte mellom dem.
Velg Copilot-knappen i den venstre navigasjonsruten for å åpne Copilot i Power BI. Deretter velger du Legg til elementer for bedre resultater i tekstboksen nederst for å legge til dataagenten. Velg Dataagenter i vinduet som åpnes. Du kan bare se dataagentene du har tilgang til. Velg dataagenten du vil bruke, og velg Bekreft. Dette eksemplet viser hvordan du arbeider med én enkelt dataagent, men du kan legge til flere elementer – for eksempel andre dataagenter, rapporter eller semantiske modeller. Følgende skjermbilde illustrerer trinnene med én enkelt dataagent:
Nå som du har lagt til dataagenten i Copilot i Power BI, kan du stille spørsmål relatert til fabric-dataagenten, som vist i følgende skjermbilde:
Bruke Fabric-dataagenten programmatisk
Du kan bruke Fabric-dataagenten programmatisk i en Fabric-notatblokk. Hvis du vil finne ut om Fabric-dataagenten har en publisert URL-verdi, velger du Innstillinger, som vist i følgende skjermbilde:
Før du publiserer fabric-dataagenten, har den ikke en publisert nettadresseverdi, som vist i følgende skjermbilde:
Hvis du ikke har publisert fabric-dataagenten før, kan du publisere den ved å følge instruksjonene i de forrige trinnene. Deretter kan du kopiere den publiserte nettadressen og bruke den i Fabric-notatblokken. På denne måten kan du spørre fabric-dataagenten ved å ringe til Fabric-dataagent-API-en i en Fabric-notatblokk. Lim inn den kopierte URL-adressen i kodesnutten. Deretter erstatter du spørsmålet med alle spørringer som er relevante for fabric-dataagenten. Dette eksemplet brukes \<generic published URL value\> som URL-adresse.
Important
Når du kaller en dataagent programmatisk, implementerer:
- Et tidsavbrudd for avstemning (se eksempel nedenfor) for å unngå ubestemte løkker.
- Minimal avstemningsfrekvens (start på 2–5 sekunder; øk bare om nødvendig).
- Opprydding av opprettede tråder eller ressurser etter fullføring.
- Avstengning av notebook-økten når du er ferdig for å frigjøre Fabric-kapasitet.
Note
Juster versjonspinner (openai, synapseml, pandas, tqdm) til de siste validerte versjonene for Fabric-kjøretiden hvis disse eksakte versjonene blir utdaterte.
%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)