Aracılığıyla paylaş


AdventureWorks veri kümesiyle yapay zeka beceri örneği (önizleme)

Bu makalede, veri kaynağı olarak lakehouse kullanarak yapay zeka becerisinin nasıl ayarlanacağı açıklanır. Süreci göstermek için önce bir göl evi oluşturur ve ardından buna veri ekleriz. Ardından bir yapay zeka becerisi oluşturacak ve lakehouse'u veri kaynağı olarak yapılandıracağız. Zaten bir Power BI anlam modeliniz (gerekli okuma/yazma izinlerine sahip), bir ambarınız veya KQL veritabanınız varsa, veri kaynaklarınızı eklemek için yapay zeka becerisini oluşturduktan sonra aynı adımları izleyebilirsiniz. Burada gösterilen adımlar göl evi üzerinde odaklansa da, süreç diğer veri kaynakları için benzerdir; yalnızca seçiminize göre ayarlamalar yapmanız yeterlidir.

Önemli

Bu özellik önizleme aşamasındadır.

Önkoşullar

AdventureWorksLH ile göl evi oluşturma

İlk olarak bir göl evi oluşturun ve gerekli verilerle doldurun.

Bir göl evinde (veya bir depoda) AdventureWorksLH örneği zaten varsa bu adımı atlayabilirsiniz. Aksi takdirde, lakehouse'u verilerle doldurmak için Fabric not defterindeki aşağıdaki yönergeleri kullanabilirsiniz.

  1. Çalışma alanında yapay zeka becerinizi oluşturmak istediğiniz yeni bir not defteri oluşturun.

  2. Gezgin bölmesinin sol tarafında + Veri kaynakları'nı seçin. Bu seçenek mevcut bir göl evi eklemenize veya yeni bir göl evi oluşturmanıza olanak tanır. Açıklık sağlamak için yeni bir göl evi oluşturun ve ona bir ad atayın.

  3. Üst hücreye aşağıdaki kod parçacığını ekleyin:

    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. Tümünü çalıştır'ı seçin.

    AdventureWorks karşıya yükleme kodunu içeren bir not defterini gösteren ekran görüntüsü.

Birkaç dakika sonra göl evi gerekli verilerle doldurulur.

Yapay zeka becerisi oluşturma

Yeni bir yapay zeka becerisi oluşturmak için çalışma alanınıza gidin ve bu ekran görüntüsünde gösterildiği gibi + Yeni Öğe düğmesini seçin:

Yapay zeka becerilerinin nerede oluşturulacağını gösteren ekran görüntüsü.

Tüm öğeler sekmesinde uygun seçeneği bulmak için yapay zeka becerisi arayın. Seçildikten sonra, bu ekran görüntüsünde gösterildiği gibi bir istem yapay zeka beceriniz için bir ad girmenizi ister:

Yapay zeka becerisi için nerede ad verileceği gösteren ekran görüntüsü.

Adı girdikten sonra, yapay zeka becerisini gereksinimlerinizle uyumlu hale getirmek için aşağıdaki adımlarla devam edin.

Verileri seçme

Önceki adımda oluşturduğunuz lakehouse'ı seçin ve ardından Ekleöğesini seçin. Lakehouse veri kaynağı olarak eklendikten sonra, AI beceri sayfasının sol tarafındaki Gezgini bölmesi, lakehouse adını gösterir. Kullanılabilir tüm tabloları görüntülemek için göl evi'ni seçin. Yapay zeka için kullanılabilir hale getirmek istediğiniz tabloları seçmek için onay kutularını kullanın. Bu senaryo için şu tabloları seçin:

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

Yapay zeka için tabloları seçebileceğiniz yeri gösteren ekran görüntüsü.

Yönergeleri sağlayın

Yapay zeka yönergeleri eklemek için yapay zeka yönergeleri düğmesini seçerek sağ taraftaki yapay zeka yönergeleri bölmesini açın. Aşağıdaki yönergeleri ekleyebilirsiniz.

AdventureWorksLH veri kaynağı üç tablodan bilgi içerir:

  • dimcustomer, ayrıntılı müşteri demografisi ve iletişim bilgileri için
  • dimdate, örneğin takvim ve mali bilgiler gibi, tarihle ilgili veriler için
  • şehir adları ve ülke bölge kodları gibi coğrafi ayrıntılar için dimgeography.

Müşteri ayrıntılarını, zamana dayalı olayları ve coğrafi konumları içeren sorgular ve analizler için bu veri kaynağını kullanın.

Yapay zeka yönergelerini nerede sağlayabileceğinizi gösteren ekran görüntüsü.

Örnekler sağlayın

Örnek sorgular eklemek için Örnek sorgular düğmesini seçerek sağ taraftaki örnek sorgular bölmesini açın. Bu bölme, desteklenen tüm veri kaynakları için örnek sorgular ekleme veya düzenleme seçenekleri sağlar. Her veri kaynağı için, aşağıdaki ekran görüntüsünde gösterildiği gibi örnek sorgu ekleme veya düzenleme seçebilirsiniz:

Sağladığınız örnekleri yapay zekaya ekleyebileceğiniz yeri gösteren ekran görüntüsü.

Burada, oluşturduğunuz lakehouse veri kaynağı için Örnek sorgular eklemelisiniz.

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 örnekleri eklemeyi gösteren ekran görüntüsü.

Uyarı

Power BI anlam modeli veri kaynakları için örnek sorgu/soru çiftleri ekleme şu anda desteklenmemektedir.

Yapay zeka becerisini test edin ve düzeltin

Artık yapay zeka becerisini yapılandırdığınıza, yapay zeka yönergeleri eklediğinize ve göl evi için örnek sorgular sağladığınıza göre, sorular sorarak ve yanıtlar alarak bu beceriyle etkileşim kurabilirsiniz. Teste devam ettikçe, yapay zeka becerisinin performansını daha da geliştirmek için daha fazla örnek ekleyebilir ve yönergeleri geliştirebilirsiniz. Geri bildirim toplamak için iş arkadaşlarınızla işbirliği yapın ve girdilerine göre, sağlanan örnek sorguların ve yönergelerin sormak istedikleri soru türleriyle uyumlu olduğundan emin olun.

Yapay zeka becerisini program aracılığıyla kullanma

Yapay zeka becerisini bir Doku not defteri içinde program aracılığıyla kullanabilirsiniz. Yapay zeka becerisinin yayımlanmış bir URL değerine sahip olup olmadığını belirlemek için, bu ekran görüntüsünde gösterildiği gibi Ayarlar'ı seçin:

Yapay zeka beceri ayarlarının seçimini gösteren ekran görüntüsü.

Yapay zeka becerisini yayımlamadan önce, bu ekran görüntüsünde gösterildiği gibi yayımlanmış bir URL değeri yoktur:

Yapay zeka becerisinin yayımlanmadan önce yayımlanmış bir URL değerine sahip olmadığını gösteren ekran görüntüsü.

Yapay zeka becerisinin performansını doğruladıktan sonra, veriler üzerinde Soru&Cevap yapmak isteyen iş arkadaşlarınızla paylaşabilmek için yayımlamaya karar verebilirsiniz. Bu durumda, bu ekran görüntüsünde gösterildiği gibi Yayımla'yı seçin:

Yayımla seçeneğinin seçimini gösteren ekran görüntüsü.

Yapay zeka becerisinin yayımlanan URL'si, bu ekran görüntüsünde gösterildiği gibi görünür:

Yayımlanan URL'yi gösteren ekran görüntüsü.

Ardından yayımlanan URL'yi kopyalayıp Doku not defterinde kullanabilirsiniz. Bu şekilde, Bir Doku not defterinde yapay zeka beceri API'sine çağrılar yaparak yapay zeka becerisini sorgulayabilirsiniz. Kopyalanan URL'yi bu kod parçacığına yapıştırın. Ardından soruyu yapay zeka becerinizle ilgili sorgularla değiştirin. Bu örnekte URL olarak kullanılır \<generic published URL value\> .

%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)