ตัวอย่างทักษะ AI ที่มีชุดข้อมูล AdventureWorks (ตัวอย่าง)
บทความนี้อธิบายวิธีการตั้งค่าทักษะ AI โดยใช้เลคเฮ้าส์เป็นแหล่งข้อมูล เพื่อแสดงกระบวนการ ก่อนอื่นเราจะสร้างเลคเฮ้าส์ จากนั้นเพิ่มข้อมูลลงในนั้น จากนั้นเราสร้างทักษะ AI และกําหนดค่าเลคเฮ้าส์เป็นแหล่งข้อมูล ถ้าคุณมีแบบจําลองความหมายของ Power BI อยู่แล้ว (ด้วยสิทธิ์การอ่าน/เขียนที่จําเป็น) คลังสินค้า หรือฐานข้อมูล KQL คุณสามารถทําตามขั้นตอนเดียวกันได้หลังจากที่คุณสร้างทักษะ AI เพื่อเพิ่มแหล่งข้อมูลของคุณ ในขณะที่ขั้นตอนที่แสดงที่นี่มุ่งเน้นไปที่ lakehouse กระบวนการจะคล้ายกับแหล่งข้อมูลอื่น ๆ คุณเพียงแค่ทําการปรับเปลี่ยนตามการเลือกเฉพาะของคุณ
สำคัญ
คุณลักษณะนี้อยู่ในตัวอย่าง
ข้อกำหนดเบื้องต้น
- จ่าย F64 หรือสูงกว่าทรัพยากรความจุผ้า
- เปิดใช้งานสวิตช์ ผู้เช่าทักษะ AI
- เปิดใช้งานสวิตช์ ผู้เช่า Copilot
- เปิดใช้งานการประมวลผลข้ามภูมิศาสตร์สําหรับ AI
- เปิดใช้งานการจัดเก็บข้ามภูมิศาสตร์สําหรับ AI
- คลัง แบบจําลองความหมายของ Power BI และฐานข้อมูล KQL ที่มีข้อมูล
- แบบจําลองความหมายของ Power BI ผ่านสวิตช์ผู้เช่าตําแหน่งข้อมูล XMLA จะเปิดใช้งาน สําหรับแหล่งข้อมูลแบบจําลองความหมายของ Power BI
สร้างเลคเฮ้าส์ด้วย AdventureWorksLH
ก่อนอื่นสร้างเลคเฮ้าส์และกรอกข้อมูลที่จําเป็น
ถ้าคุณมีอินสแตนซ์ของ AdventureWorksLH อยู่แล้วในเลคเฮ้าส์ (หรือคลัง) คุณสามารถข้ามขั้นตอนนี้ได้ ถ้าไม่เป็นเช่นนั้น คุณสามารถใช้คําแนะนําต่อไปนี้จาก Fabric notebook เพื่อใส่ข้อมูลในเลคเฮ้าส์
สร้างสมุดบันทึกใหม่ในพื้นที่ทํางานที่คุณต้องการสร้างทักษะ AI ของคุณ
ทางด้านซ้ายของบานหน้าต่าง Explorer ให้เลือก + แหล่งข้อมูล ตัวเลือกนี้ช่วยให้คุณสามารถเพิ่มเลคเฮ้าส์ที่มีอยู่หรือสร้างเลคเฮ้าส์ใหม่ เพื่อความชัดเจนสร้างเลคเฮ้าส์ใหม่และกําหนดชื่อให้มัน
ในเซลล์ด้านบนสุด ให้เพิ่มส่วนย่อยของโค้ดต่อไปนี้:
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)
เลือกเรียกใช้ทั้งหมด
หลังจากนั้นไม่กี่นาทีเลคเฮาส์จะมีข้อมูลที่จําเป็น
สร้างทักษะ AI
หากต้องการสร้างทักษะ AI ใหม่ ให้นําทางไปยังพื้นที่ทํางานของคุณและเลือกปุ่ม + รายการใหม่ ดังที่แสดงในภาพหน้าจอนี้:
ในแท็บรายการทั้งหมด ค้นหา ทักษะ AI เพื่อค้นหาตัวเลือกที่เหมาะสม เมื่อเลือกแล้ว พร้อมท์จะขอให้คุณใส่ชื่อสําหรับทักษะ AI ของคุณ ดังที่แสดงในสกรีนช็อตนี้:
หลังจากที่คุณป้อนชื่อ ดําเนินการตามขั้นตอนต่อไปนี้เพื่อปรับทักษะ AI ให้ตรงกับข้อกําหนดเฉพาะของคุณ
เลือกข้อมูล
เลือกเลคเฮ้าส์ที่คุณสร้างขึ้นในขั้นตอนก่อนหน้า จากนั้นเลือก เพิ่ม เมื่อเพิ่มเลคเฮ้าส์เป็นแหล่งข้อมูลแล้ว Explorer บานหน้าต่างทางด้านซ้ายของหน้าทักษะ AI จะแสดงชื่อเลคเฮ้าส์ เลือกเลคเฮาส์เพื่อดูตารางที่มีทั้งหมด ใช้กล่องกาเครื่องหมายเพื่อเลือกตารางที่คุณต้องการทําให้พร้อมใช้งานสําหรับ AI สําหรับสถานการณ์นี้ เลือกตารางเหล่านี้:
dimcustomer
dimdate
dimgeography
dimproduct
dimproductcategory
dimpromotion
dimreseller
dimsalesterritory
factinternetsales
cactresellersales
ให้คําแนะนํา
หากต้องการเพิ่มคําแนะนํา AI ให้เลือกคําแนะนํา AI ปุ่มเพื่อเปิดบานหน้าต่างคําแนะนํา AI ทางด้านขวา คุณสามารถเพิ่มคําแนะนําต่อไปนี้
แหล่งข้อมูล AdventureWorksLH
ประกอบด้วยข้อมูลจากสามตาราง:
-
dimcustomer
ข้อมูลประชากรและข้อมูลการติดต่อของลูกค้าโดยละเอียด -
dimdate
สําหรับข้อมูลที่เกี่ยวข้องกับวันที่ - ตัวอย่างเช่น ข้อมูลปฏิทินและบัญชี -
dimgeography
สําหรับรายละเอียดทางภูมิศาสตร์ รวมถึงชื่อเมืองและรหัสภูมิภาค
ใช้แหล่งข้อมูลนี้สําหรับคิวรีและการวิเคราะห์ที่เกี่ยวข้องกับรายละเอียดลูกค้า เหตุการณ์ตามเวลา และตําแหน่งที่ตั้งทางภูมิศาสตร์
แสดงตัวอย่าง
หากต้องการเพิ่มคิวรีตัวอย่าง ให้เลือกคิวรี Example ปุ่มเพื่อเปิดบานหน้าต่างคิวรีตัวอย่างทางด้านขวา บานหน้าต่างนี้มีตัวเลือกในการเพิ่มหรือแก้ไขคิวรีตัวอย่างสําหรับแหล่งข้อมูลที่ได้รับการสนับสนุนทั้งหมด สําหรับแต่ละแหล่งข้อมูล คุณสามารถเลือก เพิ่มหรือแก้ไขคิวรี่ตัวอย่าง เพื่อป้อนค่าตัวอย่างที่เกี่ยวข้อง ดังที่แสดงในภาพหน้าจอต่อไปนี้:
ที่นี่ คุณควรเพิ่มคิวรีตัวอย่างสําหรับแหล่งข้อมูล 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 แล้ว คุณอาจตัดสินใจที่จะเผยแพร่เพื่อให้คุณสามารถแชร์กับเพื่อนร่วมงานของคุณที่ต้องการทํา Q&A ผ่านข้อมูล ในกรณีนี้ เลือก เผยแพร่ ดังที่แสดงในภาพหน้าจอนี้:
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)