EXEMPEL på AI-kunskaper med AdventureWorks-datamängden (förhandsversion)
Den här artikeln beskriver hur du konfigurerar en AI-kompetens med hjälp av ett lakehouse som datakälla. För att illustrera processen skapar vi först ett lakehouse och lägger sedan till data i den. Sedan skapar vi en AI-färdighet och konfigurerar lakehouse som datakälla. Om du redan har en Power BI-semantisk modell (med nödvändiga läs-/skrivbehörigheter), ett lager eller en KQL-databas kan du följa samma steg när du har skapat AI-färdigheten för att lägga till dina datakällor. Även om stegen som visas här fokuserar på lakehouse är processen liknande för andra datakällor – du behöver bara göra justeringar baserat på ditt specifika val.
Viktigt!
Den här funktionen är i förhandsversion.
Förutsättningar
- En betald F64- eller högre kapacitetsresurs
- Växling av AI-kompetensklient är aktiverad.
- Copilot-klientväxeln är aktiverad.
- Cross-geo-bearbetning för AI är aktiverad.
- Lagring mellan geografiska områden för AI- är aktiverat.
- Ett datavaruhus, lakehouse, Power BI:s semantiska modeller och KQL-databaser innehållande data.
- Power BI-semantiska modeller via XMLA-slutpunkters klientväxel är aktiverat för datakällor för Power BI-semantiska modeller.
Skapa ett sjöhus med AdventureWorksLH
Först skapar du ett sjöhus och fyller det med nödvändiga data.
Om du redan har en instans av AdventureWorksLH i ett lakehouse (eller ett lager) kan du hoppa över det här steget. Annars kan du använda följande instruktioner från en Fabric-notebook-fil för att fylla lakehouse med data.
Skapa en ny notebook-fil på arbetsytan där du vill skapa din AI-kompetens.
Till vänster i fönstret Utforskaren väljer du + Datakällor. Med det här alternativet kan du lägga till ett befintligt sjöhus eller skapa ett nytt sjöhus. Skapa ett nytt sjöhus för tydlighetens skull och tilldela det ett namn.
Lägg till följande kodfragment i den översta cellen:
import pandas as pd from tqdm.auto import tqdm base = "https://synapseaisolutionsa.blob.core.windows.net/public/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)
Välj Kör alla.
Efter några minuter fylls sjöstugan med den nödvändiga datan.
Skapa en AI-färdighet
Om du vill skapa en ny AI-färdighet går du till din arbetsyta och väljer knappen + Nytt objekt, som du ser i den här skärmbilden:
På fliken Alla objekt söker du efter AI-kompetens för att hitta rätt alternativ. När du har valt det uppmanas du att ange ett namn för din AI-kompetens, som du ser i den här skärmbilden:
När du har angett namnet fortsätter du med följande steg för att anpassa AI-kompetensen till dina specifika krav.
Välj data
Välj det lakehouse som du skapade i föregående steg och välj sedan Lägg till. När lakehouse har lagts till som datakälla visar fönstret Explorer till vänster på AI-färdighetssidan namnet på lakehouse. Välj lakehouse för att visa alla tillgängliga tabeller. Använd kryssrutorna för att markera de tabeller som du vill göra tillgängliga för AI:n. I det här scenariot väljer du följande tabeller:
dimcustomer
dimdate
dimgeography
dimproduct
dimproductcategory
dimpromotion
dimreseller
dimsalesterritory
factinternetsales
cactresellersales
Ge instruktioner
Om du vill lägga till AI-instruktioner väljer du knappen AI-instruktioner för att öppna fönstret AI-instruktioner till höger. Du kan lägga till följande instruktioner.
Den AdventureWorksLH
datakällan innehåller information från tre tabeller:
-
dimcustomer
, för detaljerad kunddemografi och kontaktinformation -
dimdate
, för datumrelaterade data – till exempel kalender- och räkenskapsinformation -
dimgeography
för geografisk information, inklusive ortnamn och landsregionkoder.
Använd den här datakällan för frågor och analyser som omfattar kundinformation, tidsbaserade händelser och geografiska platser.
Ange exempel
Om du vill lägga till exempelfrågor väljer du knappen Exempelfrågor för att öppna fönstret exempelfrågor till höger. Det här fönstret innehåller alternativ för att lägga till eller redigera exempelfrågor för alla datakällor som stöds. För varje datakälla kan du välja Lägg till eller redigera exempelfrågor för att ange relevanta exempel, enligt följande skärmbild:
Här bör du lägga till Exempelfrågor för den lakehouse-datakälla som du skapade.
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
Anmärkning
Det går för närvarande inte att lägga till exempel på fråge-/frågepar för datakällor för Power BI-semantikmodeller.
Testa och revidera AI-kompetensen
Nu när du har konfigurerat AI-färdigheten, lagt till AI-instruktioner och tillhandahållit exempelfrågor för lakehouse kan du interagera med den genom att ställa frågor och få svar. När du fortsätter att testa kan du lägga till fler exempel och förfina instruktionerna för att ytterligare förbättra AI-kompetensens prestanda. Samarbeta med dina kollegor för att samla in feedback och se till att de exempelfrågor och instruktioner som tillhandahålls överensstämmer med de typer av frågor som de vill ställa.
Använda AI-färdigheten programmatiskt
Du kan använda AI-färdigheten programmatiskt i en Fabric-notebook-fil. Om du vill avgöra om AI-färdigheten har ett publicerat URL-värde eller inte väljer du Inställningar, som du ser i den här skärmbilden:
Innan du publicerar AI-färdigheten har den inget publicerat URL-värde, som du ser i den här skärmbilden:
När du har verifierat AI-kompetensens prestanda kan du välja att publicera den så att du sedan kan dela den med dina kollegor som vill göra Q&A över data. I det här fallet väljer du Publicera, som du ser i den här skärmbilden:
Den publicerade URL:en för AI-färdigheten visas, som du ser i den här skärmbilden:
Du kan sedan kopiera den publicerade URL:en och använda den i notebook-filen Infrastruktur. På så sätt kan du fråga AI-färdigheten genom att göra anrop till AI-kunskaps-API:et i en Fabric-notebook-fil. Klistra in den kopierade URL:en i det här kodfragmentet. Ersätt sedan frågan med frågor som är relevanta för din AI-kompetens. Det här exemplet används \<generic published URL value\>
som URL.
%pip install "openai==1.14.1"
%pip install httpx==0.27.2
import requests
import json
import pprint
import typing as t
import time
import uuid
from openai import OpenAI
from openai._exceptions import APIStatusError
from openai._models import FinalRequestOptions
from openai._types import Omit
from openai._utils import is_given
from synapse.ml.mlflow import get_mlflow_env_config
from sempy.fabric._token_provider import SynapseTokenProvider
base_url = "https://<generic published base URL value>"
question = "What datasources 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
while run.status == "queued" or run.status == "in_progress":
run = fabric_client.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id,
)
print(run.status)
time.sleep(2)
# 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)