Příklad dovednosti AI s datovou sadou AdventureWorks (Preview)
Tento článek popisuje, jak nastavit dovednost AI s použitím lakehouse jako zdroje dat. Abychom mohli tento proces ilustrovat, nejprve vytvoříme jezero a pak do něj přidáme data. Pak vytvoříme dovednost umělé inteligence a nakonfigurujeme jezero jako zdroj dat. Pokud už máte sémantický model Power BI (s potřebnými oprávněními ke čtení a zápisu), sklad nebo databázi KQL, můžete po vytvoření dovednosti AI přidat zdroje dat stejným postupem. I když se zde uvedené kroky zaměřují na jezero, proces je podobný pro ostatní zdroje dat – stačí provést úpravy na základě vašeho konkrétního výběru.
Důležité
Tato funkce je ve verzi Preview.
Požadavky
- placený prostředek Fabric kapacity F64 nebo vyšší
- Přepínač tenanta dovedností AI je povolený.
- Je povolený přepínač tenanta Copilot.
- Křížové geografické zpracování pro umělou inteligenci je povoleno.
- je povolené křížové geografické ukládání pro AI.
- Sklad, síťové úložiště, sémantické modely Power BI a KQL databáze s daty.
- sémantické modely Power BI prostřednictvím koncových bodů XMLA s přepínáním tenantů jsou povoleny pro zdroje dat sémantických modelů Power BI.
Vytvořte lakehouse pomocí AdventureWorksLH
Nejprve vytvořte jezerní dům a naplňte ho potřebnými daty.
Pokud už máte instanci AdventureWorksLH v jezeře (nebo skladu), můžete tento krok přeskočit. Pokud ne, můžete pomocí následujících pokynů z poznámkového bloku Fabric naplnit jezero daty.
Vytvořte nový poznámkový blok v pracovním prostoru, ve kterém chcete vytvořit dovednosti umělé inteligence.
Na levé straně podokna Průzkumník vyberte + Zdroje dat. Tato možnost umožňuje přidat existující jezerní dům nebo vytvořit nový jezerní dům. Kvůli přehlednosti vytvořte nový jezerní dům a přiřaďte mu název.
Do horní buňky přidejte následující fragment kódu:
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)
Vyberte Spustit vše.
Po několika minutách se datové úložiště naplní potřebnými daty.
Vytvoření dovednosti umělé inteligence
Pokud chcete vytvořit novou dovednost umělé inteligence, přejděte do svého pracovního prostoru a vyberte tlačítko + Nová položka, jak je znázorněno na tomto snímku obrazovky:
Na kartě Všechny položky vyhledejte dovednost umělé inteligence pro nalezení příslušné možnosti. Po výběru se zobrazí výzva, abyste zadali název dovednosti AI, jak je znázorněno na tomto snímku obrazovky:
Po zadání jména pokračujte následujícími kroky, abyste sladili dovednost AI s vašimi konkrétními požadavky.
Výběr dat
Vyberte lakehouse, který jste vytvořili v předchozím kroku, a potom vyberte Přidat. Po přidání objektu lakehouse jako zdroje dat se v podokně Explorer na levé straně stránky dovedností AI zobrazí název jezera. Výběrem lakehouse zobrazíte všechny dostupné tabulky. Pomocí zaškrtávacích políček vyberte tabulky, které chcete zpřístupnit umělé inteligenci. V tomto scénáři vyberte tyto tabulky:
dimcustomer
dimdate
dimgeography
dimproduct
dimproductcategory
dimpromotion
dimreseller
dimsalesterritory
factinternetsales
cactresellersales
Uveďte pokyny
Pokud chcete přidat pokyny pro AI, vyberte tlačítko pokyny pro AI a vpravo otevřete podokno s pokyny pro AI. Můžete přidat následující pokyny.
Zdroj dat AdventureWorksLH
obsahuje informace ze tří tabulek:
-
dimcustomer
, podrobné demografické údaje o zákaznících a kontaktní údaje -
dimdate
, pro data související s datem – například kalendářní a fiskální informace -
dimgeography
, pro geografické podrobnosti, včetně názvů měst a kódů oblastí zemí.
Tento zdroj dat použijte pro dotazy a analýzy, které zahrnují podrobnosti o zákaznících, události založené na čase a zeměpisná umístění.
Uveďte příklady
Pokud chcete přidat ukázkové dotazy, vyberte tlačítko Ukázkové dotazy a otevřete napravo podokno ukázkových dotazů. Toto podokno poskytuje možnosti pro přidání nebo úpravu ukázkových dotazů pro všechny podporované zdroje dat. Pro každý zdroj dat můžete vybrat Přidat nebo upravit ukázkové dotazy pro zadání relevantních příkladů, jak je znázorněno na následujícím snímku obrazovky:
Tady byste měli přidat ukázkové dotazy pro zdroj dat lakehouse, který jste vytvořili.
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
Poznámka
Přidání ukázkových párů dotazů/otázek není v současné době podporováno pro zdroje dat sémantických modelů Power BI.
Testování a revize dovednosti AI
Teď, když jste nakonfigurovali dovednost AI, přidali instrukce AI a poskytli ukázkové dotazy na jezeře, můžete s ní pracovat tak, že položíte otázky a dostanete odpovědi. Když budete pokračovat v testování, můžete přidat další příklady a upřesnit pokyny, abyste dále zlepšili výkon dovednosti AI. Spolupracujte s kolegy a shromážděte zpětnou vazbu a na základě jejich vstupu zajistěte, aby zadané ukázkové dotazy a pokyny odpovídaly typům otázek, které chtějí položit.
Použití dovednosti AI prostřednictvím kódu programu
Dovednosti AI můžete použít programově v poznámkovém bloku Fabric. Pokud chcete zjistit, jestli má dovednost AI publikovanou hodnotu adresy URL, vyberte Nastavení, jak je znázorněno na tomto snímku obrazovky:
Před publikováním dovednosti AI nemá publikovanou hodnotu adresy URL, jak je znázorněno na tomto snímku obrazovky:
Po ověření výkonu dovednosti AI se můžete rozhodnout ji publikovat, abyste ji mohli sdílet s kolegy, kteří chtějí provádět Q&A přes data. V tomto případě vyberte Publikovat, jak je znázorněno na tomto snímku obrazovky:
Zobrazí se publikovaná adresa URL dovednosti AI, jak je znázorněno na tomto snímku obrazovky:
Pak můžete zkopírovat publikovanou adresu URL a použít ji v poznámkovém bloku Infrastruktury. Tímto způsobem můžete dotazovat dovednosti AI voláním rozhraní API pro dovednosti AI v poznámkovém bloku Fabric. Vložte zkopírovanou adresu URL do tohoto fragmentu kódu. Pak tuto otázku nahraďte libovolným dotazem, který je relevantní pro vaši dovednost umělé inteligence. Tento příklad se používá \<generic published URL value\>
jako adresa 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)