Παράδειγμα δεξιοτήτων AI με το σύνολο δεδομένων AdventureWorks (προεπισκόπηση)
Αυτό το άρθρο περιγράφει τον τρόπο ρύθμισης μιας δεξιότητας AI, χρησιμοποιώντας ένα lakehouse ως προέλευση δεδομένων. Για να απεικονίσουμε τη διαδικασία, πρώτα δημιουργούμε ένα lakehouse και, στη συνέχεια, προσθέτουμε δεδομένα σε αυτή. Στη συνέχεια, δημιουργούμε μια δεξιότητα AI και διαμορφώνουμε το lakehouse ως προέλευση δεδομένων του. Εάν έχετε ήδη ένα σημασιολογικό μοντέλο Power BI (με τα απαραίτητα δικαιώματα ανάγνωσης/εγγραφής), μια αποθήκη ή μια βάση δεδομένων KQL, μπορείτε να ακολουθήσετε τα ίδια βήματα αφού δημιουργήσετε την δεξιότητα AI για να προσθέσετε τις προελεύσεις δεδομένων σας. Παρόλο που τα βήματα που εμφανίζονται εδώ εστιάζουν στο lakehouse, η διαδικασία είναι παρόμοια για άλλες προελεύσεις δεδομένων. Χρειάζεται απλώς να κάνετε προσαρμογές με βάση τη συγκεκριμένη επιλογή σας.
Σημαντικό
Αυτή η δυνατότητα είναι σε προεπισκόπηση.
Προαπαιτούμενα στοιχεία
- έναν εκχωρημένων πόρων F64 ή νεότερης έκδοσης F64 ή νεότερης έκδοσης
- Η αλλαγή μισθωτή δεξιοτήτων AI είναι ενεργοποιημένη.
- Ο διακόπτης μισθωτή Copilot είναι ενεργοποιημένος.
- είναι ενεργοποιημένη η επεξεργασία Διασταυρούμενες γεωγραφικές περιφέρειες για τεχνητής νοημοσύνης.
- είναι ενεργοποιημένη η αποθήκευση Cross-geo για AI.
- Μια αποθήκη, μια λίμνη, σημασιολογικά μοντέλα Power BI και βάσεις δεδομένων KQL με δεδομένα.
- σημασιολογικά μοντέλα Power BI μέσω εναλλαγής μισθωτή τελικών σημείων XMLA ενεργοποιείται για προελεύσεις δεδομένων μοντέλου σημασιολογίας Power BI.
Δημιουργία lakehouse με AdventureWorksLH
Πρώτα, δημιουργήστε ένα lakehouse και συμπληρώστε το με τα απαραίτητα δεδομένα.
Εάν έχετε ήδη μια παρουσία της AdventureWorksLH σε ένα lakehouse (ή αποθήκη), μπορείτε να παραλείψετε αυτό το βήμα. Εάν όχι, μπορείτε να χρησιμοποιήσετε τις ακόλουθες οδηγίες από ένα σημειωματάριο Fabric για να συμπληρώσετε το lakehouse με τα δεδομένα.
Δημιουργήστε ένα νέο σημειωματάριο στον χώρο εργασίας όπου θέλετε να δημιουργήσετε τις δεξιότητα AI.
Στην αριστερή πλευρά του παραθύρου Εξερεύνηση , επιλέξτε + Προελεύσεις δεδομένων. Αυτή η επιλογή σάς επιτρέπει να προσθέσετε μια υπάρχουσα λίμνη ή δημιουργεί ένα νέο lakehouse. Για λόγους σαφήνειας, δημιουργήστε ένα νέο lakehouse και εκχωρήστε ένα όνομα σε αυτό.
Στο επάνω κελί, προσθέστε το ακόλουθο τμήμα κώδικα:
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)
Επιλέξτε Εκτέλεση όλων.
Μετά από λίγα λεπτά, το lakehouse συμπληρώνεται με τα απαραίτητα δεδομένα.
Δημιουργία δεξιότητας AI
Για να δημιουργήσετε μια νέα δεξιότητα AI, μεταβείτε στον χώρο εργασίας σας και επιλέξτε το κουμπί + Νέο στοιχείο, όπως φαίνεται σε αυτό το στιγμιότυπο οθόνης:
Στην καρτέλα Όλα τα στοιχεία, κάντε αναζήτηση για δεξιότητα AI για να εντοπίσετε την κατάλληλη επιλογή. Όταν επιλεγεί, ένα μήνυμα σάς ζητά να δώσετε ένα όνομα για την δεξιότησή σας AI, όπως φαίνεται σε αυτό το στιγμιότυπο οθόνης:
Αφού εισαγάγετε το όνομα, ακολουθήστε τα παρακάτω βήματα για να ευθυγραμμίσετε την δεξιότητα AI με τις συγκεκριμένες απαιτήσεις σας.
Επιλογή των δεδομένων
Επιλέξτε τη λίμνη που δημιουργήσατε στο προηγούμενο βήμα και, στη συνέχεια, επιλέξτε Προσθήκη. Μόλις προστεθεί το lakehouse ως προέλευση δεδομένων, το τμήμα παραθύρου Explorer του στην αριστερή πλευρά της σελίδας δεξιοτήτων AI εμφανίζει το όνομα του lakehouse. Επιλέξτε τη λίμνη για να δείτε όλους τους διαθέσιμους πίνακες. Χρησιμοποιήστε τα πλαίσια ελέγχου για να επιλέξετε τους πίνακες που θέλετε να καταστήσετε διαθέσιμους στο AI. Για αυτό το σενάριο, επιλέξτε αυτούς τους πίνακες:
dimcustomer
dimdate
dimgeography
dimproduct
dimproductcategory
dimpromotion
dimreseller
dimsalesterritory
factinternetsales
cactresellersales
Παροχή οδηγιών
Για να προσθέσετε οδηγίες AI, επιλέξτε το κουμπί οδηγίες AI για να ανοίξετε το τμήμα παραθύρου Οδηγίες AI στη δεξιά πλευρά. Μπορείτε να προσθέσετε τις παρακάτω οδηγίες.
Η AdventureWorksLH
προέλευση δεδομένων περιέχει πληροφορίες από τρεις πίνακες:
-
dimcustomer
, για λεπτομερή δημογραφικά στοιχεία πελατών και στοιχεία επικοινωνίας -
dimdate
, για δεδομένα που σχετίζονται με ημερομηνίες - για παράδειγμα, ημερολογιακές και οικονομικές πληροφορίες -
dimgeography
, για γεωγραφικές λεπτομέρειες, συμπεριλαμβανομένων των ονομάτων πόλεων και των κωδικών περιοχών.
Χρησιμοποιήστε αυτήν την προέλευση δεδομένων για ερωτήματα και αναλύσεις που αφορούν λεπτομέρειες πελατών, συμβάντα βάσει χρόνου και γεωγραφικές θέσεις.
Παροχή παραδειγμάτων
Για να προσθέσετε παραδείγματα ερωτημάτων, επιλέξτε το κουμπί Παραδείγματα ερωτημάτων για να ανοίξετε το τμήμα παραθύρου παραδείγματος ερωτημάτων στη δεξιά πλευρά. Αυτό το τμήμα παραθύρου παρέχει επιλογές για την προσθήκη ή επεξεργασία παραδειγμάτων ερωτημάτων για όλες τις υποστηριζόμενες προελεύσεις δεδομένων. Για κάθε προέλευση δεδομένων, μπορείτε να επιλέξετε Προσθήκη ή Επεξεργασία παραδειγμάτων ερωτημάτων για να εισαγάγετε τα σχετικά παραδείγματα, όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης:
Εδώ, θα πρέπει να προσθέσετε Παραδείγματα ερωτημάτων για την προέλευση δεδομένων lakehouse που δημιουργήσατε.
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
Σημείωση
Η προσθήκη δειγμάτων ζευγών ερωτημάτων/ερωτήσεων δεν υποστηρίζεται προς το παρόν για προελεύσεις δεδομένων σημασιολογικού μοντέλου Power BI.
Δοκιμή και αναθεώρηση της δεξιότητας AI
Τώρα που ρυθμίσατε τις παραμέτρους της δεξιότητας AI, προσθέσατε οδηγίες AI και δώσατε παραδείγματα ερωτημάτων για το lakehouse, μπορείτε να αλληλεπιδράσετε με αυτή κάνοντας ερωτήσεις και λαμβάνοντας απαντήσεις. Καθώς συνεχίζετε τις δοκιμές, μπορείτε να προσθέσετε περισσότερα παραδείγματα και να βελτιώσετε τις οδηγίες, για να βελτιώσετε περαιτέρω τις επιδόσεις της δεξιότητας AI. Συνεργαστείτε με τους συναδέλφους σας για να συγκεντρώσετε σχόλια και, με βάση τα σχόλιά τους, βεβαιωθείτε ότι τα παραδείγματα ερωτημάτων και οδηγιών που παρέχονται ευθυγραμμίζονται με τους τύπους ερωτήσεων που θέλουν να κάνουν.
Χρήση της δεξιότητας AI μέσω προγραμματισμού
Μπορείτε να χρησιμοποιήσετε την δεξιότητα AI μέσω προγραμματισμού μέσα σε ένα σημειωματάριο Fabric. Για να προσδιορίσετε αν η δεξιότητα AI διαθέτει μια δημοσιευμένη τιμή διεύθυνσης URL, επιλέξτε Ρυθμίσεις, όπως φαίνεται σε αυτό το στιγμιότυπο οθόνης:
Πριν δημοσιεύσετε την δεξιότητα AI, δεν διαθέτει δημοσιευμένη τιμή διεύθυνσης URL, όπως φαίνεται σε αυτό το στιγμιότυπο οθόνης:
Αφού επικυρώσετε την απόδοση της δεξιότητας AI, μπορεί να αποφασίσετε να τη δημοσιεύσετε, ώστε να μπορείτε να τη μοιραστείτε με τους συναδέλφους σας που θέλουν να εκτελέσουν τις Ερωτήσεις&Α μέσω δεδομένων. Σε αυτή την περίπτωση, επιλέξτε Δημοσίευση, όπως φαίνεται σε αυτό το στιγμιότυπο οθόνης:
Εμφανίζεται η δημοσιευμένη διεύθυνση URL για την δεξιότητα AI, όπως φαίνεται σε αυτό το στιγμιότυπο οθόνης:
Στη συνέχεια, μπορείτε να αντιγράψετε τη δημοσιευμένη διεύθυνση URL και να τη χρησιμοποιήσετε στο σημειωματάριο Fabric. Με αυτόν τον τρόπο, μπορείτε να υποβάλετε ερωτήματα για την δεξιότητα AI πραγματοποιώντας κλήσεις στο API δεξιοτήτων AI σε ένα σημειωματάριο Fabric. Επικολλήστε τη διεύθυνση URL που αντιγράψατε σε αυτό το τμήμα κώδικα. Στη συνέχεια, αντικαταστήστε την ερώτηση με οποιοδήποτε ερώτημα σχετίζεται με την δεξιότητα AI. Αυτό το παράδειγμα χρησιμοποιείται \<generic published URL value\>
ως διεύθυνση 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)