หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
บทความนี้แสดงวิธีการตั้งค่าตัวแทนข้อมูลใน Microsoft Fabric โดยใช้เลคเฮาส์เป็นแหล่งข้อมูลตัวอย่าง ก่อนอื่นเราสร้างและเติมข้อมูลเลคเฮาส์ จากนั้นสร้างตัวแทนข้อมูล Fabric และเพิ่มเลคเฮาส์ลงไป ถ้าคุณมีแบบจําลองความหมายของ Power BI อยู่แล้ว (ด้วยสิทธิ์การอ่าน/เขียนที่จําเป็น) คลังสินค้า ฐานข้อมูล KQL หรือออนโทโลยี ให้ทําตามขั้นตอนเดียวกันและเลือกแหล่งข้อมูลนั้นแทน แม้ว่าคําแนะนํานี้จะใช้เลคเฮาส์ แต่รูปแบบจะเหมือนกันสําหรับแหล่งข้อมูลอื่นๆ โดยมีเพียงการเลือกแหล่งข้อมูลเท่านั้นที่ต่างกัน
Important
คุณลักษณะนี้อยู่ในตัวอย่าง
Prerequisites
- ความจุ Fabric แบบชําระเงิน F2 หรือสูงกว่า หรือความจุ Power BI Premium ต่อความจุ (P1 หรือสูงกว่า) ที่ เปิดใช้งาน Microsoft Fabric
- เปิดใช้งานการตั้งค่าผู้เช่าของบริษัทตัวแทนข้อมูล Fabric แล้ว
- เปิดใช้งานการประมวลผลข้ามภูมิศาสตร์สําหรับ AI
- เปิดใช้งานการจัดเก็บข้ามภูมิศาสตร์สําหรับ AI
- อย่างน้อยหนึ่งรายการที่มีข้อมูล: คลังสินค้า เลคเฮาส์ แบบจําลองความหมาย Power BI อย่างน้อยหนึ่งตัว ฐานข้อมูล KQL หรือออนโทโลยี
- แบบจําลองความหมายของ Power BI ผ่านสวิตช์ผู้เช่าตําแหน่งข้อมูล XMLA จะเปิดใช้งาน สําหรับแหล่งข้อมูลแบบจําลองความหมายของ Power BI
Important
ตรวจสอบให้แน่ใจว่าได้เปิดใช้งานประสบการณ์ Copilot แบบสแตนด์อโลนในพอร์ทัลผู้ดูแลระบบ Power BI (การตั้งค่า > ผู้เช่า Copilot ประสบการณ์ Copilot > แบบสแตนด์อโลน) หากไม่ได้เปิดใช้งาน คุณจะไม่สามารถใช้ตัวแทนข้อมูลภายในสถานการณ์ Copilot ได้แม้ว่าสวิตช์ผู้เช่า Copilot อื่นๆ จะเปิดอยู่ก็ตาม สําหรับรายละเอียด โปรดดู Copilot ในการตั้งค่าผู้เช่า Power BI
สร้างเลคเฮ้าส์ด้วย AdventureWorksLH
ก่อนอื่นสร้างเลคเฮ้าส์และกรอกข้อมูลที่จําเป็น
ถ้าคุณมีอินสแตนซ์ของ AdventureWorksLH อยู่แล้วในเลคเฮ้าส์ (หรือคลัง) คุณสามารถข้ามขั้นตอนนี้ได้ ถ้าไม่เป็นเช่นนั้น คุณสามารถใช้คําแนะนําต่อไปนี้จาก Fabric notebook เพื่อใส่ข้อมูลในเลคเฮ้าส์
สร้างสมุดบันทึกใหม่ในพื้นที่ทํางานที่คุณต้องการสร้างตัวแทนข้อมูล Fabric ของคุณ
ทางด้านซ้ายของบานหน้าต่าง Explorer ให้เลือก + แหล่งข้อมูล ตัวเลือกนี้ช่วยให้คุณสามารถเพิ่มเลคเฮ้าส์ที่มีอยู่หรือสร้างเลคเฮ้าส์ใหม่ เพื่อความชัดเจนสร้างเลคเฮ้าส์ใหม่และกําหนดชื่อให้มัน
ในเซลล์ด้านบนสุด ให้เพิ่มส่วนย่อยของโค้ดต่อไปนี้:
import pandas as pd from tqdm.auto import tqdm base = "https://synapseaisolutionsa.z13.web.core.windows.net/data/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)เลือก เรียกใช้ทั้งหมด
หลังจากนั้นไม่กี่นาทีเลคเฮาส์จะมีข้อมูลที่จําเป็น
Caution
โน้ตบุ๊กที่ทํางานต่อไป (ตัวอย่างเช่น เนื่องจากการวนซ้ําที่ไม่มีที่สิ้นสุดโดยไม่ได้ตั้งใจหรือการสํารวจอย่างต่อเนื่อง) สามารถใช้ความจุของ Fabric ได้อย่างไม่มีกําหนด หลังจากโหลดข้อมูลเสร็จแล้ว ให้หยุดเซลล์ที่ใช้งานอยู่และสิ้นสุดเซสชันสมุดบันทึก (แถบ > เครื่องมือสมุดบันทึก หยุดเซสชัน) หากคุณไม่ต้องการอีกต่อไป หลีกเลี่ยงการเพิ่มลูปที่ทํางานเป็นเวลานานโดยไม่มีการหมดเวลา
สร้างตัวแทนข้อมูล Fabric
หากต้องการสร้างตัวแทนข้อมูล Fabric ใหม่ ให้นําทางไปยังพื้นที่ทํางานของคุณและเลือกปุ่ม + รายการใหม่ ตามที่แสดงในภาพหน้าจอนี้:
ในแท็บรายการทั้งหมด ค้นหา Fabric data agent เพื่อค้นหาตัวเลือกที่เหมาะสม เมื่อเลือกแล้ว พร้อมท์จะขอให้คุณใส่ชื่อสําหรับตัวแทนข้อมูล Fabric ของคุณ ตามที่แสดงในสกรีนช็อตนี้:
หลังจากที่คุณป้อนชื่อ ดําเนินการตามขั้นตอนต่อไปนี้เพื่อจัดแนวตัวแทนข้อมูล Fabric กับข้อกําหนดเฉพาะของคุณ
เลือกข้อมูล
เลือก เลคเฮาส์ที่คุณสร้างขึ้นในขั้นตอนก่อนหน้า แล้วเลือก เพิ่ม ดังที่แสดงในภาพหน้าจอต่อไปนี้:
เมื่อเพิ่มเลคเฮาส์เป็นแหล่งข้อมูลแล้ว บานหน้าต่าง Explorer ทางด้านซ้ายของหน้า เอเจนต์ข้อมูล Fabric จะแสดงชื่อเลคเฮาส์ เลือกเลคเฮาส์เพื่อดูตารางที่มีทั้งหมด ใช้กล่องกาเครื่องหมายเพื่อเลือกตารางที่คุณต้องการทําให้พร้อมใช้งานสําหรับ AI สําหรับสถานการณ์นี้ เลือกตารางเหล่านี้:
dimcustomerdimdatedimgeographydimproductdimproductcategorydimpromotiondimresellerdimsalesterritoryfactinternetsalesfactresellersales
ให้คําแนะนํา
หากต้องการเพิ่มคําแนะนํา ให้เลือกปุ่ม คําแนะนําของ ตัวแทนข้อมูล เพื่อเปิดบานหน้าต่างคําแนะนําทางด้านขวา คุณสามารถเพิ่มคําแนะนําต่อไปนี้
แหล่งข้อมูล AdventureWorksLH ประกอบด้วยข้อมูลจากสามตาราง:
-
dimcustomerข้อมูลประชากรและข้อมูลการติดต่อของลูกค้าโดยละเอียด -
dimdateสําหรับข้อมูลที่เกี่ยวข้องกับวันที่ - ตัวอย่างเช่น ข้อมูลปฏิทินและบัญชี -
dimgeographyสําหรับรายละเอียดทางภูมิศาสตร์ รวมถึงชื่อเมืองและรหัสภูมิภาค
ใช้แหล่งข้อมูลนี้สําหรับคิวรีและการวิเคราะห์ที่เกี่ยวข้องกับรายละเอียดลูกค้า เหตุการณ์ตามเวลา และตําแหน่งที่ตั้งทางภูมิศาสตร์
ให้ตัวอย่าง
เมื่อต้องการเพิ่มคิวรีตัวอย่าง ให้เลือกปุ่ม คิว รีตัวอย่าง เพื่อเปิดบานหน้าต่างคิวรีตัวอย่างทางด้านขวา บานหน้าต่างนี้มีตัวเลือกในการเพิ่มหรือแก้ไขคิวรีตัวอย่างสําหรับแหล่งข้อมูลที่ได้รับการสนับสนุนทั้งหมด สําหรับแต่ละแหล่งข้อมูล คุณสามารถเลือก เพิ่มหรือแก้ไขคิวรี่ตัวอย่าง เพื่อป้อนค่าตัวอย่างที่เกี่ยวข้อง ดังที่แสดงในภาพหน้าจอต่อไปนี้:
ที่นี่ คุณควรเพิ่มคิวรีตัวอย่างสําหรับแหล่งข้อมูล 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
Note
การเพิ่มคู่คิวรี/คําถามตัวอย่างยังไม่ได้รับการสนับสนุนสําหรับแหล่งข้อมูลแบบจําลองเชิงความหมายของ Power BI ในขณะนี้
ทดสอบและแก้ไขตัวแทนข้อมูล Fabric
ตอนนี้คุณได้กําหนดค่าตัวแทนข้อมูล Fabric เพิ่มคําแนะนําของตัวแทนข้อมูล Fabric และคิวรีตัวอย่างสําหรับ lakehouse แล้ว คุณสามารถโต้ตอบได้โดยการถามคําถามและรับคําตอบ เมื่อคุณทําการทดสอบต่อไป คุณสามารถเพิ่มตัวอย่างเพิ่มเติม และปรับแต่งคําแนะนํา เพื่อปรับปรุงประสิทธิภาพการทํางานของตัวแทนข้อมูล Fabric ได้ ทํางานร่วมกับเพื่อนร่วมงานของคุณเพื่อรวบรวมคําติชม และยึดตามการป้อนข้อมูลของพวกเขา ตรวจสอบให้แน่ใจว่าคิวรีตัวอย่างที่ให้มาและคําแนะนําสอดคล้องกับชนิดของคําถามที่พวกเขาต้องการถาม
เผยแพร่ตัวแทนข้อมูล Fabric
หลังจากที่คุณตรวจสอบประสิทธิภาพของตัวแทนข้อมูล Fabric คุณอาจตัดสินใจที่จะเผยแพร่เพื่อให้คุณสามารถแชร์กับเพื่อนร่วมงานของคุณที่ต้องการทํา Q&A ผ่านข้อมูลได้ ในกรณีนี้ ให้เลือก เผยแพร่ ดังที่แสดงในภาพหน้าจอนี้:
กล่อง ของตัวแทนการเผยแพร่ เปิดขึ้น ตามที่แสดงในสกรีนช็อตนี้:
ในกล่องนี้ ให้เลือก เผยแพร่ เพื่อเผยแพร่ตัวแทนข้อมูล Fabric URL ที่เผยแพร่สําหรับตัวแทนข้อมูล Fabric ปรากฏขึ้น ดังที่แสดงในภาพหน้าจอนี้:
ใช้ตัวแทนข้อมูล Fabric ใน Copilot ใน Power BI
คุณสามารถใช้ Copilot ใน Power BI เพื่อโต้ตอบกับตัวแทนข้อมูล Fabric หลังจากที่คุณเผยแพร่ ด้วย Copilot ใน Power BI คุณสามารถใช้ตัวแทนข้อมูลและรายการอื่น ๆ ได้โดยตรง (ตัวอย่างเช่น รายงาน หรือแบบจําลองความหมาย) โดยไม่จําเป็นต้องสลับไปมาระหว่างกัน
เลือกปุ่ม Copilot บนบานหน้าต่างนําทางด้านซ้าย เพื่อเปิด Copilot ใน Power BI จากนั้นเลือก เพิ่มรายการ เพื่อให้ได้ผลลัพธ์ที่ดีกว่า ในกล่องข้อความที่ด้านล่างเพื่อเพิ่มตัวแทนข้อมูล เลือก ตัวแทนข้อมูล ในหน้าต่างที่เปิดขึ้น คุณสามารถดูได้เฉพาะตัวแทนข้อมูลที่คุณมีสิทธิ์เข้าถึงเท่านั้น เลือกตัวแทนข้อมูลที่คุณต้องการ แล้วเลือก ยืนยัน ตัวอย่างนี้แสดงวิธีการทํางานกับตัวแทนข้อมูลเดียว แต่คุณสามารถเพิ่มรายการเพิ่มเติม เช่น ตัวแทนข้อมูล รายงาน หรือแบบจําลองความหมายอื่นๆ สกรีนช็อตต่อไปนี้แสดงขั้นตอนด้วยตัวแทนข้อมูลเดียว:
ตอนนี้ คุณได้เพิ่มตัวแทนข้อมูลไปยัง Copilot ใน Power BI แล้ว คุณสามารถถามคําถามใด ๆ ที่เกี่ยวข้องกับตัวแทนข้อมูล Fabric ของคุณ ดังที่แสดงในภาพหน้าจอต่อไปนี้:
ใช้ตัวแทนข้อมูล Fabric ทางโปรแกรม
คุณสามารถใช้ตัวแทนข้อมูล Fabric ทางโปรแกรมภายในสมุดบันทึก Fabric ได้ เมื่อต้องการตรวจสอบว่าตัวแทนข้อมูล Fabric มีค่า URL ที่เผยแพร่หรือไม่ ให้เลือก การตั้งค่า ดังที่แสดงในภาพหน้าจอต่อไปนี้:
ก่อนที่คุณจะเผยแพร่ตัวแทนข้อมูล Fabric จะไม่มีค่า URL ที่เผยแพร่ ตามที่แสดงในภาพหน้าจอต่อไปนี้:
ถ้าคุณยังไม่เคยเผยแพร่ตัวแทนข้อมูล Fabric มาก่อน คุณสามารถเผยแพร่ตามคําแนะนําในขั้นตอนก่อนหน้านี้ จากนั้นคุณสามารถคัดลอก URL ที่เผยแพร่และใช้งานได้ในสมุดบันทึกสําหรับ Fabric ด้วยวิธีนี้ คุณสามารถคิวรีตัวแทนข้อมูล Fabric โดยการเรียกใช้ API ของตัวแทนข้อมูล Fabric ใน Fabric วาง URL ที่คัดลอกในส่วนย่อยของโค้ดนี้ จากนั้นแทนที่คําถามด้วยคิวรีใด ๆ ที่เกี่ยวข้องกับตัวแทนข้อมูล Fabric ของคุณ ตัวอย่างนี้ใช้ \<generic published URL value\> เป็น URL
Important
เมื่อเรียกใช้ตัวแทนข้อมูลโดยทางโปรแกรม ให้ใช้:
- การหมดเวลาการสํารวจ (ดูตัวอย่างด้านล่าง) เพื่อหลีกเลี่ยงการวนซ้ําแบบไม่มีกําหนด
- ความถี่ในการสํารวจน้อยที่สุด (เริ่มต้นที่ 2-5 วินาที เพิ่มเฉพาะเมื่อจําเป็น)
- การล้างข้อมูลของเธรดหรือรีซอร์สที่สร้างขึ้นหลังจากเสร็จสิ้น
- การปิดเซสชันโน้ตบุ๊กเมื่อเสร็จสิ้นเพื่อปล่อยความจุ Fabric
Note
ปรับพินเวอร์ชัน (openai, , synapsemlpandas, ) tqdmเป็นเวอร์ชันที่ตรวจสอบแล้วล่าสุดสําหรับรันไทม์ Fabric ของคุณหากเวอร์ชันที่แน่นอนเหล่านี้ล้าสมัย
%pip install "openai==1.70.0"
%pip install "synapseml==1.0.5" # Required for synapse.ml.mlflow (update version as needed)
%pip install pandas tqdm # Skip if already available in the Fabric runtime
import typing as t
import time
import uuid
# OpenAI SDK internals
from openai import OpenAI
from openai._models import FinalRequestOptions
from openai._types import Omit
from openai._utils import is_given
# SynapseML helper for env config
from synapse.ml.mlflow import get_mlflow_env_config
# Removed unused imports: requests, json, pprint, APIStatusError, SynapseTokenProvider
base_url = "https://<generic published base URL value>"
question = "What data sources 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 (avoid indefinite loop)
terminal_states = {"completed", "failed", "cancelled", "requires_action"}
poll_interval = 2
timeout_seconds = 300 # Adjust based on expected workload
start_time = time.time()
while run.status not in terminal_states:
if time.time() - start_time > timeout_seconds:
raise TimeoutError(f"Run polling exceeded {timeout_seconds} seconds (last status={run.status})")
run = fabric_client.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id,
)
print(run.status)
time.sleep(poll_interval)
if run.status != "completed":
print(f"Run finished with status: {run.status}")
# 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)