Κοινή χρήση μέσω


Παράδειγμα δεξιοτήτων AI με το σύνολο δεδομένων AdventureWorks (προεπισκόπηση)

Αυτό το άρθρο περιγράφει τον τρόπο ρύθμισης μιας δεξιότητας AI, χρησιμοποιώντας ένα lakehouse ως προέλευση δεδομένων. Για να απεικονίσουμε τη διαδικασία, πρώτα δημιουργούμε ένα lakehouse και, στη συνέχεια, προσθέτουμε δεδομένα σε αυτή. Στη συνέχεια, δημιουργούμε μια δεξιότητα AI και διαμορφώνουμε το lakehouse ως προέλευση δεδομένων του. Εάν έχετε ήδη ένα σημασιολογικό μοντέλο Power BI (με τα απαραίτητα δικαιώματα ανάγνωσης/εγγραφής), μια αποθήκη ή μια βάση δεδομένων KQL, μπορείτε να ακολουθήσετε τα ίδια βήματα αφού δημιουργήσετε την δεξιότητα AI για να προσθέσετε τις προελεύσεις δεδομένων σας. Παρόλο που τα βήματα που εμφανίζονται εδώ εστιάζουν στο lakehouse, η διαδικασία είναι παρόμοια για άλλες προελεύσεις δεδομένων. Χρειάζεται απλώς να κάνετε προσαρμογές με βάση τη συγκεκριμένη επιλογή σας.

Σημαντικό

Αυτή η δυνατότητα είναι σε προεπισκόπηση.

Προαπαιτούμενα στοιχεία

Δημιουργία lakehouse με AdventureWorksLH

Πρώτα, δημιουργήστε ένα lakehouse και συμπληρώστε το με τα απαραίτητα δεδομένα.

Εάν έχετε ήδη μια παρουσία της AdventureWorksLH σε ένα lakehouse (ή αποθήκη), μπορείτε να παραλείψετε αυτό το βήμα. Εάν όχι, μπορείτε να χρησιμοποιήσετε τις ακόλουθες οδηγίες από ένα σημειωματάριο Fabric για να συμπληρώσετε το lakehouse με τα δεδομένα.

  1. Δημιουργήστε ένα νέο σημειωματάριο στον χώρο εργασίας όπου θέλετε να δημιουργήσετε τις δεξιότητα AI.

  2. Στην αριστερή πλευρά του παραθύρου Εξερεύνηση , επιλέξτε + Προελεύσεις δεδομένων. Αυτή η επιλογή σάς επιτρέπει να προσθέσετε μια υπάρχουσα λίμνη ή δημιουργεί ένα νέο lakehouse. Για λόγους σαφήνειας, δημιουργήστε ένα νέο lakehouse και εκχωρήστε ένα όνομα σε αυτό.

  3. Στο επάνω κελί, προσθέστε το ακόλουθο τμήμα κώδικα:

    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)
    
  4. Επιλέξτε Εκτέλεση όλων.

    Στιγμιότυπο οθόνης που εμφανίζει ένα σημειωματάριο με τον κώδικα αποστολής του AdventureWorks.

Μετά από λίγα λεπτά, το lakehouse συμπληρώνεται με τα απαραίτητα δεδομένα.

Δημιουργία δεξιότητας AI

Για να δημιουργήσετε μια νέα δεξιότητα AI, μεταβείτε στον χώρο εργασίας σας και επιλέξτε το κουμπί + Νέο στοιχείο, όπως φαίνεται σε αυτό το στιγμιότυπο οθόνης:

Στιγμιότυπο οθόνης που δείχνει πού μπορείτε να δημιουργήσετε δεξιότητες AI.

Στην καρτέλα Όλα τα στοιχεία, κάντε αναζήτηση για δεξιότητα AI για να εντοπίσετε την κατάλληλη επιλογή. Όταν επιλεγεί, ένα μήνυμα σάς ζητά να δώσετε ένα όνομα για την δεξιότησή σας AI, όπως φαίνεται σε αυτό το στιγμιότυπο οθόνης:

Στιγμιότυπο οθόνης που εμφανίζει πού πρέπει να καταχωρήσετε το όνομα για τις δεξιότητες AI.

Αφού εισαγάγετε το όνομα, ακολουθήστε τα παρακάτω βήματα για να ευθυγραμμίσετε την δεξιότητα AI με τις συγκεκριμένες απαιτήσεις σας.

Επιλογή των δεδομένων

Επιλέξτε τη λίμνη που δημιουργήσατε στο προηγούμενο βήμα και, στη συνέχεια, επιλέξτε Προσθήκη. Μόλις προστεθεί το lakehouse ως προέλευση δεδομένων, το τμήμα παραθύρου Explorer του στην αριστερή πλευρά της σελίδας δεξιοτήτων AI εμφανίζει το όνομα του lakehouse. Επιλέξτε τη λίμνη για να δείτε όλους τους διαθέσιμους πίνακες. Χρησιμοποιήστε τα πλαίσια ελέγχου για να επιλέξετε τους πίνακες που θέλετε να καταστήσετε διαθέσιμους στο AI. Για αυτό το σενάριο, επιλέξτε αυτούς τους πίνακες:

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

στιγμιότυπο οθόνης που εμφανίζει πού μπορείτε να επιλέξετε πίνακες για AI.

Παροχή οδηγιών

Για να προσθέσετε οδηγίες AI, επιλέξτε το κουμπί οδηγίες AI για να ανοίξετε το τμήμα παραθύρου Οδηγίες AI στη δεξιά πλευρά. Μπορείτε να προσθέσετε τις παρακάτω οδηγίες.

Η AdventureWorksLH προέλευση δεδομένων περιέχει πληροφορίες από τρεις πίνακες:

  • dimcustomer, για λεπτομερή δημογραφικά στοιχεία πελατών και στοιχεία επικοινωνίας
  • dimdate, για δεδομένα που σχετίζονται με ημερομηνίες - για παράδειγμα, ημερολογιακές και οικονομικές πληροφορίες
  • dimgeography, για γεωγραφικές λεπτομέρειες, συμπεριλαμβανομένων των ονομάτων πόλεων και των κωδικών περιοχών.

Χρησιμοποιήστε αυτήν την προέλευση δεδομένων για ερωτήματα και αναλύσεις που αφορούν λεπτομέρειες πελατών, συμβάντα βάσει χρόνου και γεωγραφικές θέσεις.

Στιγμιότυπο οθόνης που εμφανίζει πού μπορείτε να παρέχετε τις οδηγίες στο AI.

Παροχή παραδειγμάτων

Για να προσθέσετε παραδείγματα ερωτημάτων, επιλέξτε το κουμπί Παραδείγματα ερωτημάτων για να ανοίξετε το τμήμα παραθύρου παραδείγματος ερωτημάτων στη δεξιά πλευρά. Αυτό το τμήμα παραθύρου παρέχει επιλογές για την προσθήκη ή επεξεργασία παραδειγμάτων ερωτημάτων για όλες τις υποστηριζόμενες προελεύσεις δεδομένων. Για κάθε προέλευση δεδομένων, μπορείτε να επιλέξετε Προσθήκη ή Επεξεργασία παραδειγμάτων ερωτημάτων για να εισαγάγετε τα σχετικά παραδείγματα, όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης:

Στιγμιότυπο οθόνης που εμφανίζει πού μπορείτε να προσθέσετε τα παραδείγματα που παρέχετε στο AI.

Εδώ, θα πρέπει να προσθέσετε Παραδείγματα ερωτημάτων για την προέλευση δεδομένων 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

Στιγμιότυπο οθόνης που εμφανίζει την προσθήκη παραδειγμάτων SQL.

Σημείωση

Η προσθήκη δειγμάτων ζευγών ερωτημάτων/ερωτήσεων δεν υποστηρίζεται προς το παρόν για προελεύσεις δεδομένων σημασιολογικού μοντέλου Power BI.

Δοκιμή και αναθεώρηση της δεξιότητας AI

Τώρα που ρυθμίσατε τις παραμέτρους της δεξιότητας AI, προσθέσατε οδηγίες AI και δώσατε παραδείγματα ερωτημάτων για το lakehouse, μπορείτε να αλληλεπιδράσετε με αυτή κάνοντας ερωτήσεις και λαμβάνοντας απαντήσεις. Καθώς συνεχίζετε τις δοκιμές, μπορείτε να προσθέσετε περισσότερα παραδείγματα και να βελτιώσετε τις οδηγίες, για να βελτιώσετε περαιτέρω τις επιδόσεις της δεξιότητας AI. Συνεργαστείτε με τους συναδέλφους σας για να συγκεντρώσετε σχόλια και, με βάση τα σχόλιά τους, βεβαιωθείτε ότι τα παραδείγματα ερωτημάτων και οδηγιών που παρέχονται ευθυγραμμίζονται με τους τύπους ερωτήσεων που θέλουν να κάνουν.

Χρήση της δεξιότητας AI μέσω προγραμματισμού

Μπορείτε να χρησιμοποιήσετε την δεξιότητα AI μέσω προγραμματισμού μέσα σε ένα σημειωματάριο Fabric. Για να προσδιορίσετε αν η δεξιότητα AI διαθέτει μια δημοσιευμένη τιμή διεύθυνσης URL, επιλέξτε Ρυθμίσεις, όπως φαίνεται σε αυτό το στιγμιότυπο οθόνης:

Στιγμιότυπο οθόνης που εμφανίζει την επιλογή ρυθμίσεων δεξιοτήτων AI.

Πριν δημοσιεύσετε την δεξιότητα AI, δεν διαθέτει δημοσιευμένη τιμή διεύθυνσης URL, όπως φαίνεται σε αυτό το στιγμιότυπο οθόνης:

Στιγμιότυπο οθόνης που δείχνει ότι μια δεξιότητα AI δεν έχει δημοσιευμένη τιμή διεύθυνσης URL πριν από τη δημοσίευση.

Αφού επικυρώσετε την απόδοση της δεξιότητας AI, μπορεί να αποφασίσετε να τη δημοσιεύσετε, ώστε να μπορείτε να τη μοιραστείτε με τους συναδέλφους σας που θέλουν να εκτελέσουν τις Ερωτήσεις&Α μέσω δεδομένων. Σε αυτή την περίπτωση, επιλέξτε Δημοσίευση, όπως φαίνεται σε αυτό το στιγμιότυπο οθόνης:

Στιγμιότυπο οθόνης που εμφανίζει την επιλογή δημοσίευσης.

Εμφανίζεται η δημοσιευμένη διεύθυνση URL για την δεξιότητα AI, όπως φαίνεται σε αυτό το στιγμιότυπο οθόνης:

Στιγμιότυπο οθόνης που εμφανίζει τη δημοσιευμένη διεύθυνση URL.

Στη συνέχεια, μπορείτε να αντιγράψετε τη δημοσιευμένη διεύθυνση 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)