Aracılığıyla paylaş


AdventureWorks veri kümesiyle doku veri aracısı örneği (önizleme)

Bu makalede, örnek veri kaynağı olarak bir lakehouse kullanarak Microsoft Fabric'te veri aracısını ayarlama gösterilmektedir. Önce bir lakehouse oluşturup doldururuz, ardından bir Fabric data agent oluşturup lakehouse'u buna ekleriz. Zaten bir Power BI anlam modeliniz (gerekli okuma/yazma izinlerine sahip), bir ambar veya KQL veritabanınız varsa, aynı adımları izleyin ve bunun yerine bu kaynağı seçin. Bu kılavuz bir Lakehouse kullansa da, model diğer kaynaklar için aynıdır; yalnızca veri kaynağı seçimi farklılık gösterir.

Önemli

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

Önkoşullar

Önemli

Power BI yönetim portalında bağımsız Copilot deneyiminin etkinleştirildiğinden emin olun (Tenant ayarları > Copilot > Bağımsız Copilot deneyimi). Etkinleştirilmemişse, diğer Copilot kiracı ayarları açık olsa bile Copilot senaryolarında veri ağ geçidini kullanamazsınız. Ayrıntılar için Power BI kiracı ayarlarında Copilot'a bakın.

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. Fabric veri ajanınızı oluşturmak istediğiniz çalışma alanında 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.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)
    
  4. Tümünü çalıştır'ı seçin.

AdventureWorks yükleme kodunu içeren bir defteri gösteren ekran görüntüsü.

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

Dikkat

Çalışmaya devam eden defterler (örneğin, yanlışlıkla sonsuz döngüler veya sürekli yoklama nedeniyle) Fabric kapasitesini süresiz olarak tüketebilir. Verilerin yüklenmesi tamamlandıktan sonra, artık ihtiyacınız yoksa tüm etkin hücreleri durdurun ve not defteri oturumunu sonlandırın (Not defteri araç çubuğu > Oturumu durdur). Zaman aşımı olmadan uzun süre çalışan döngüler eklemekten kaçının.

Fabric veri aracısı oluştur

Yeni bir Doku veri aracısı 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:

doku veri aracılarının nerede oluşturulacağını gösteren ekran görüntüsü .

Tüm öğeler sekmesinde, uygun seçeneği bulmak için Doku veri aracısı'nı arayın. Seçildikten sonra, bu ekran görüntüsünde gösterildiği gibi doku veri aracınız için bir ad girmeniz istenir:

Fabric veri aracısı için adın sağlandığı yeri gösteren ekran görüntüsü.

Adı girdikten sonra Fabric veri aracısını gereksinimlerinize uygun hale getirmek için aşağıdaki adımlara devam edin.

Verileri seçme

Aşağıdaki ekran görüntüsünde gösterildiği gibi, önceki adımda oluşturduğunuz lakehouse'ı ve ardından Ekle'yi seçin:

Göl kenarı evi eklemek adımını gösteren ekran görüntüsü.

Lakehouse bir veri kaynağı olarak eklendikten sonra, Fabric veri aracısı sayfasının sol tarafındaki Gezgin bölmesinde lakehouse adı gösterilir. 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
  • factresellersales

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

Yönergeleri sağlayın

Yönergeler eklemek için Veri aracısı yönergeleri düğmesini seçerek sağ taraftaki yönergeler 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 nereye ekleyebileceğinizi 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.

Ağ veri aracısını test edin ve düzeltin

Doku veri aracısını yapılandırdığınıza, Doku veri aracısı yönergeleri eklediğinize ve lakehouse için örnek sorgular sağladığınıza göre, sorular sorarak ve yanıtlar alarak onunla etkileşim kurabilirsiniz. Teste devam ettikçe, Doku veri aracısının 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.

Fabric veri aracısını yayınla

Fabric veri aracısının performansını doğruladıktan sonra, daha sonra veri üzerinden Q&A yapmak isteyen iş arkadaşlarınızla paylaşabilmek amacıyla 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ü.

Bu ekran görüntüsünde gösterildiği gibi Veri aracısı yayımla kutusu açılır:

Veri aracısı yayımlama özelliğini gösteren ekran görüntüsü.

Bu kutuda, Fabric veri aracısını yayımlamak için Yayımla seçeneğini seçin. Fabric veri aracısı için yayımlanan URL, 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ü.

Power BI'da Copilot'ta Fabric veri aracısını kullanma

Power BI'de Copilot'ı kullanarak Fabric veri aracısını yayımladıktan sonra etkileşim kurabilirsiniz. Power BI'daki Copilot ile veri aracısını ve diğer öğeleri (örneğin, raporlar veya anlamsal modeller) aralarında geçiş yapmanıza gerek kalmadan doğrudan kullanabilirsiniz.

Sol gezinti bölmesindeki Copilot düğmesini seçerek Copilot'ı Power BI'da açın. Ardından, veri aracısını eklemek için alttaki metin kutusunda Daha iyi sonuçlar elde etmek için Öğe ekle'yi seçin. Açılan pencerede Veri aracıları'nı seçin. Yalnızca erişim izniniz olan veri aracılarını görebilirsiniz. İstediğiniz veri aracısını seçin ve Onayla'yı seçin. Bu örnekte tek bir veri aracısı ile nasıl çalışabileceğiniz gösterilmektedir, ancak diğer veri aracıları, raporlar veya anlam modelleri gibi daha fazla öğe ekleyebilirsiniz. Aşağıdaki ekran görüntüsünde tek bir veri aracısı ile ilgili adımlar gösterilmektedir:

Veri Aracıları gibi öğeleri eklemek için Copilot düğmesini ve düğmesini gösteren ekran görüntüsü.

Veri aracısını Power BI'daki Copilot'a eklediğinize göre, aşağıdaki ekran görüntüsünde gösterildiği gibi Doku veri aracınızla ilgili tüm soruları sorabilirsiniz:

Bir soruyu yanıtlayan Copilot'un gösterildiği ekran görüntüsü.

Fabric veri aracısını program aracılığıyla kullanma

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

Fabric veri aracısı ayarlarının seçimini gösteren ekran görüntüsü.

Doku veri aracısını yayımlamadan önce, aşağıdaki ekran görüntüsünde gösterildiği gibi yayımlanmış bir URL değeri yoktur:

Fabric veri aracısının, yayımlanmadan önce yayımlanmış bir URL değerine sahip olmadığını gösteren ekran görüntüsü.

Doku veri aracısını daha önce yayımlamadıysanız, önceki adımlarda yer alan yönergeleri izleyerek yayımlayabilirsiniz. Ardından yayımlanan URL'yi kopyalayıp Fabric not defterinde kullanabilirsiniz. Bu şekilde, Doku not defterinde Doku veri aracısı API'sine çağrılar yaparak Doku veri aracısını sorgulayabilirsiniz. Kopyalanan URL'yi bu kod parçacığına yapıştırın. Ardından, soruyu Fabric veri aracınızla ilgili herhangi bir sorguyla değiştirin. Bu örnekte URL olarak kullanılır \<generic published URL value\> .

Önemli

Bir veri aracıyı program aracılığıyla çağırırken şunları uygulayın:

  1. Süresiz döngüleri önlemek için yoklama zaman aşımı (aşağıdaki örniğe bakın).
  2. En az yoklama sıklığı (2-5 saniyede başlayın; yalnızca gerekirse artırın).
  3. Tamamlandıktan sonra oluşturulan iş parçacıklarının veya kaynakların temizlenmesi.
  4. Not defteri oturumu, Fabric kapasitesini serbest bırakmak için tamamlandığında kapatılır.

Uyarı

Bu sürümler güncelliğini yitirirse, sürüm pinlerini (openai, synapseml, pandas, tqdm), Fabric çalışma zamanınız için doğrulanmış en son sürümlere ayarlayın.

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