แชร์ผ่าน


ตัวอย่างทักษะ AI ที่มีชุดข้อมูล AdventureWorks (ตัวอย่าง)

บทความนี้อธิบายวิธีการตั้งค่าทักษะ AI โดยใช้เลคเฮ้าส์เป็นแหล่งข้อมูล เพื่อแสดงกระบวนการ ก่อนอื่นเราจะสร้างเลคเฮ้าส์ จากนั้นเพิ่มข้อมูลลงในนั้น จากนั้นเราสร้างทักษะ AI และกําหนดค่าเลคเฮ้าส์เป็นแหล่งข้อมูล ถ้าคุณมีแบบจําลองความหมายของ Power BI อยู่แล้ว (ด้วยสิทธิ์การอ่าน/เขียนที่จําเป็น) คลังสินค้า หรือฐานข้อมูล KQL คุณสามารถทําตามขั้นตอนเดียวกันได้หลังจากที่คุณสร้างทักษะ AI เพื่อเพิ่มแหล่งข้อมูลของคุณ ในขณะที่ขั้นตอนที่แสดงที่นี่มุ่งเน้นไปที่ lakehouse กระบวนการจะคล้ายกับแหล่งข้อมูลอื่น ๆ คุณเพียงแค่ทําการปรับเปลี่ยนตามการเลือกเฉพาะของคุณ

สำคัญ

คุณลักษณะนี้อยู่ในตัวอย่าง

ข้อกำหนดเบื้องต้น

สร้างเลคเฮ้าส์ด้วย AdventureWorksLH

ก่อนอื่นสร้างเลคเฮ้าส์และกรอกข้อมูลที่จําเป็น

ถ้าคุณมีอินสแตนซ์ของ AdventureWorksLH อยู่แล้วในเลคเฮ้าส์ (หรือคลัง) คุณสามารถข้ามขั้นตอนนี้ได้ ถ้าไม่เป็นเช่นนั้น คุณสามารถใช้คําแนะนําต่อไปนี้จาก Fabric notebook เพื่อใส่ข้อมูลในเลคเฮ้าส์

  1. สร้างสมุดบันทึกใหม่ในพื้นที่ทํางานที่คุณต้องการสร้างทักษะ AI ของคุณ

  2. ทางด้านซ้ายของบานหน้าต่าง Explorer ให้เลือก + แหล่งข้อมูล ตัวเลือกนี้ช่วยให้คุณสามารถเพิ่มเลคเฮ้าส์ที่มีอยู่หรือสร้างเลคเฮ้าส์ใหม่ เพื่อความชัดเจนสร้างเลคเฮ้าส์ใหม่และกําหนดชื่อให้มัน

  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

หลังจากนั้นไม่กี่นาทีเลคเฮาส์จะมีข้อมูลที่จําเป็น

สร้างทักษะ AI

หากต้องการสร้างทักษะ AI ใหม่ ให้นําทางไปยังพื้นที่ทํางานของคุณและเลือกปุ่ม + รายการใหม่ ดังที่แสดงในภาพหน้าจอนี้:

สกรีนช็อตที่แสดงตําแหน่งที่จะสร้างทักษะ AI

ในแท็บรายการทั้งหมด ค้นหา ทักษะ AI เพื่อค้นหาตัวเลือกที่เหมาะสม เมื่อเลือกแล้ว พร้อมท์จะขอให้คุณใส่ชื่อสําหรับทักษะ AI ของคุณ ดังที่แสดงในสกรีนช็อตนี้:

สกรีนช็อตที่แสดงตําแหน่งที่จะระบุชื่อสําหรับทักษะ AI

หลังจากที่คุณป้อนชื่อ ดําเนินการตามขั้นตอนต่อไปนี้เพื่อปรับทักษะ AI ให้ตรงกับข้อกําหนดเฉพาะของคุณ

เลือกข้อมูล

เลือกเลคเฮ้าส์ที่คุณสร้างขึ้นในขั้นตอนก่อนหน้า จากนั้นเลือก เพิ่ม เมื่อเพิ่มเลคเฮ้าส์เป็นแหล่งข้อมูลแล้ว Explorer บานหน้าต่างทางด้านซ้ายของหน้าทักษะ AI จะแสดงชื่อเลคเฮ้าส์ เลือกเลคเฮาส์เพื่อดูตารางที่มีทั้งหมด ใช้กล่องกาเครื่องหมายเพื่อเลือกตารางที่คุณต้องการทําให้พร้อมใช้งานสําหรับ AI สําหรับสถานการณ์นี้ เลือกตารางเหล่านี้:

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

สกรีนช็อตที่แสดงตําแหน่งที่คุณสามารถเลือกตารางสําหรับ AI

ให้คําแนะนํา

หากต้องการเพิ่มคําแนะนํา AI ให้เลือกคําแนะนํา AI ปุ่มเพื่อเปิดบานหน้าต่างคําแนะนํา AI ทางด้านขวา คุณสามารถเพิ่มคําแนะนําต่อไปนี้

แหล่งข้อมูล AdventureWorksLH ประกอบด้วยข้อมูลจากสามตาราง:

  • dimcustomerข้อมูลประชากรและข้อมูลการติดต่อของลูกค้าโดยละเอียด
  • dimdateสําหรับข้อมูลที่เกี่ยวข้องกับวันที่ - ตัวอย่างเช่น ข้อมูลปฏิทินและบัญชี
  • dimgeographyสําหรับรายละเอียดทางภูมิศาสตร์ รวมถึงชื่อเมืองและรหัสภูมิภาค

ใช้แหล่งข้อมูลนี้สําหรับคิวรีและการวิเคราะห์ที่เกี่ยวข้องกับรายละเอียดลูกค้า เหตุการณ์ตามเวลา และตําแหน่งที่ตั้งทางภูมิศาสตร์

สกรีนช็อตที่แสดงตําแหน่งที่คุณสามารถแจ้งคําแนะนําไปยัง AI ได้

แสดงตัวอย่าง

หากต้องการเพิ่มคิวรีตัวอย่าง ให้เลือกคิวรี Example ปุ่มเพื่อเปิดบานหน้าต่างคิวรีตัวอย่างทางด้านขวา บานหน้าต่างนี้มีตัวเลือกในการเพิ่มหรือแก้ไขคิวรีตัวอย่างสําหรับแหล่งข้อมูลที่ได้รับการสนับสนุนทั้งหมด สําหรับแต่ละแหล่งข้อมูล คุณสามารถเลือก เพิ่มหรือแก้ไขคิวรี่ตัวอย่าง เพื่อป้อนค่าตัวอย่างที่เกี่ยวข้อง ดังที่แสดงในภาพหน้าจอต่อไปนี้:

สกรีนช็อตที่แสดงตําแหน่งที่คุณสามารถเพิ่มตัวอย่างที่คุณให้กับ 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 แล้ว คุณอาจตัดสินใจที่จะเผยแพร่เพื่อให้คุณสามารถแชร์กับเพื่อนร่วมงานของคุณที่ต้องการทํา Q&A ผ่านข้อมูล ในกรณีนี้ เลือก เผยแพร่ ดังที่แสดงในภาพหน้าจอนี้:

สกรีนช็อตที่แสดงการเลือกตัวเลือกเผยแพร่

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)