Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, как настроить агент данных в Microsoft Fabric с помощью lakehouse в качестве источника данных. Чтобы проиллюстрировать процесс, сначала создадим озеро, а затем добавим в него данные. Затем мы создадим агент данных Fabric и настраиваем lakehouse в качестве источника данных. Если у вас уже есть семантическая модель Power BI (с необходимыми разрешениями на чтение и запись), хранилище или база данных KQL, вы можете выполнить те же действия после создания агента данных Fabric для добавления источников данных. Хотя шаги, показанные здесь, сосредоточены на хранилище данных типа lakehouse, процесс похож на процесс для других источников данных — вам просто нужно внести корректировки на основе вашего конкретного выбора.
Это важно
Эта функция доступна в предварительной версии.
Предпосылки
- платный ресурс емкости Fabric F64 или выше
- параметры клиента агента данных Fabric включены.
- Включен коммутатор клиента Copilot.
- Включена перекрестная геообработка для ИИ.
- включено межрегиональное хранение для ИИ.
- По крайней мере одно из них: хранилище, озеро, одна или несколько семантических моделей Power BI или база данных KQL с данными.
- семантические модели Power BI с помощью коммутатора клиента конечных точек XMLA включены для источников данных семантической модели Power BI.
Создание озера с помощью AdventureWorksLH
Сначала создайте озеро и заполните его необходимыми данными.
Если у вас уже есть экземпляр AdventureWorksLH в лейкхаусе (или складе), этот шаг можно пропустить. В противном случае можно использовать следующие инструкции из записной книжки Fabric для заполнения озёрного дома данными.
Создайте записную книжку в рабочей области, в которой вы хотите создать агент данных Fabric.
В левой части области обозревателя выберите +Источники данных. Этот параметр позволяет добавить существующий lakehouse или создать новый lakehouse. Для ясности создайте новое озеро и назначьте ему имя.
В верхней ячейке добавьте следующий фрагмент кода:
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)
Выберите Запустить все.
Через несколько минут лейкхаус заполняется необходимыми данными.
Создание агента данных Fabric
Чтобы создать нового агента данных Fabric, перейдите в рабочую область и нажмите кнопку + Новый элемент, как показано на этом снимке экрана.
#B0 #A1 #A2 #A3 Снимок экрана, показывающий, где создать агентов данных Fabric. #A4 #A5 #A6 #C7
На вкладке "Все элементы" найдите агент данных Fabric, чтобы найти соответствующий параметр. После выбора запрос запрашивает указать имя агента данных Fabric, как показано на снимке экрана:
#B0 #A1 #A2 #A3 скриншот, показывающий, где указать имя для агента данных Fabric. #A4 #A5 #A6 #C7
После ввода имени выполните следующие действия, чтобы настроить агента данных Fabric в соответствии с вашими конкретными требованиями.
Выбор данных
Выберите озерный дом, созданный на предыдущем шаге, и нажмите "Добавить", как показано на следующем снимке экрана.
#B0 #A1 #A2 #A3 Снимок экрана, показывающий шаг по добавлению озёрного дома. #A4 #A5 #A6 #C7
После добавления хранилища данных (lakehouse) в качестве источника данных, область Explorer в левой части страницы агента данных Fabric отображает имя хранилища данных. Выберите lakehouse, чтобы просмотреть все доступные таблицы. Установите флажки, чтобы выбрать таблицы, которые нужно сделать доступными для ИИ. Для этого сценария выберите следующие таблицы:
dimcustomer
dimdate
dimgeography
dimproduct
dimproductcategory
dimpromotion
dimreseller
dimsalesterritory
factinternetsales
cactresellersales
#B0 #A1 #A2 #A3 Снимок экрана, на котором показано, где можно выбрать таблицы для ИИ. #A4 #A5 #A6 #C7
Укажите инструкции
Чтобы добавить инструкции агента данных Fabric, нажмите кнопку Инструкции агента данных, чтобы открыть панель инструкций агента данных Fabric справа. Вы можете добавить следующие инструкции.
Источник данных AdventureWorksLH
содержит сведения из трех таблиц:
-
dimcustomer
, для подробной информации о демографии и контактной информации клиентов -
dimdate
, для данных, связанных с датой, например, календарная и финансовая информация -
dimgeography
для получения географических сведений, включая названия городов и коды регионов страны.
Используйте этот источник данных для запросов и анализа, включающих сведения о клиентах, событиях на основе времени и географических расположениях.
#B0 #A1 #A2 #A3 Скриншот, демонстрирующий, где можно предоставить инструкции для ИИ. #A4 #A5 #A6 #C7
Укажите примеры
Чтобы добавить примеры запросов, нажмите кнопку Примеры запросов, чтобы открыть панель примеров справа. Эта область предоставляет параметры для добавления или изменения примеров запросов для всех поддерживаемых источников данных. Для каждого источника данных можно выбрать добавить или изменить примеры запросов для ввода соответствующих примеров, как показано на следующем снимке экрана:
Скриншот, показывающий, где можно добавить примеры, которые вы предоставляете в ИИ.
Здесь необходимо добавить примеры запросов к созданному источнику данных 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
#B0 #A1 #A2 #A3 снимок экрана, демонстрирующий, как добавляются примеры SQL. #A4 #A5 #A6 #C7
Примечание.
Добавление примеров пар запросов и вопросов в настоящее время не поддерживается для источников данных семантической модели Power BI.
Тестирование и изменение агента данных Fabric
Теперь, когда вы настроили агент данных Fabric, добавили инструкции агента данных Fabric и предоставили примеры запросов к lakehouse, вы можете взаимодействовать с ним, задавая вопросы и получая ответы. При продолжении тестирования можно добавить дополнительные примеры и уточнить инструкции, чтобы повысить производительность агента данных Fabric. Работайте вместе с коллегами, чтобы собирать отзывы, и, учитывая их отзывы, убедитесь, что предоставленные примеры запросов и инструкций соответствуют типам вопросов, которые они хотят задать.
Программное использование агента данных Fabric
Агент данных Fabric можно использовать программным способом в записной книжке Fabric. Чтобы определить, опубликован ли у агента данных Fabric URL-адрес, выберите Настройки, как показано на скриншоте.
#B0 #A1 #A2 #A3 снимок экрана, показывающий выбор параметров агента данных Fabric. #A4 #A5 #A6 #C7
Перед публикацией агента данных Fabric он не имеет опубликованного URL-адреса, как показано на этом скриншоте:
#B0 #A1 #A2 #A3 Скриншот показывает, что агент данных Fabric не имеет значения URL-адреса до публикации. #A4 #A5 #A6 #C7
После того как вы подтвердите производительность агента данных Fabric, вы можете опубликовать его, чтобы затем поделиться им с коллегами, которые хотят проводить вопросы и ответы по данным. В этом случае выберите "Опубликовать", как показано на снимке экрана:
Откроется окно агента публикации данных, как показано на данном снимке экрана:
#B0 #A1 #A2 #A3 снимок экрана, демонстрирующий возможность агента публикации данных. #A4 #A5 #A6 #C7
В этом окне выберите Опубликовать, чтобы опубликовать агент данных Fabric. Появится опубликованный URL-адрес агента данных Fabric, как показано на этом снимке экрана:
Затем вы можете скопировать опубликованный URL-адрес и использовать его в записной книжке Fabric. Таким образом, можно запросить агента данных Fabric, обращаясь к его API в тетради Fabric. Вставьте скопированный URL-адрес в фрагмент кода. Затем замените вопрос любым запросом, соответствующим агенту данных Fabric. Этот пример использует \<generic published URL value\>
в качестве URL-адреса.
%pip install "openai==1.70.0"
%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)
Связанный контент
- Концепция агента данных Fabric
- создание агента данных Fabric