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
- Ücretli bir F64 veya daha yüksek Fabric kapasite kaynağı
- Yapay zeka becerisi kiracı anahtarı etkinleştirildi.
- Copilot kiracı anahtarı etkinleştirildi.
- Yapay zeka için coğrafi bölgeler arası işleme etkinleştirilir.
- Yapay zeka için coğrafi bölgeler arası depolama etkindir.
- Veri içeren bir depo, göl evi, Power BI anlam modelleri ve KQL veritabanları.
- XMLA uç noktaları kiracı anahtarı aracılığıyla Power BI anlam modellerini Power BI anlam modeli veri kaynakları için etkinleştirilir.
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.
Çalışma alanında yapay zeka becerinizi oluşturmak istediğiniz yeni bir not defteri oluşturun.
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.
Ü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)
Tümünü çalıştır'ı seçin.
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:
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:
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
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.
Ö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:
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
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 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 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:
Yapay zeka becerisinin yayımlanan URL'si, bu ekran görüntüsünde gösterildiği gibi görünür:
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)