Exemplo de agente de dados do Fabric com o conjunto de dados AdventureWorks (versão prévia)

Este artigo mostra como configurar um agente de dados em Microsoft Fabric usando um lakehouse como a fonte de dados de exemplo. Primeiro criamos e populamos uma lakehouse, depois criamos um agente de dados Fabric e adicionamos o lakehouse a ele. Se você já tiver um modelo semântico Power BI, verifique se tem permissão de leitura para interagir com ele por meio de um agente de dados (a permissão de gravação só é necessária para modificar o modelo semântico ou usar recursos como o Prep for AI). Para um armazém, um banco de dados KQL ou uma ontologia, siga as mesmas etapas e selecione essa fonte. Embora este passo a passo use uma lakehouse, o padrão é o mesmo para outras fontes; apenas a seleção da fonte de dados é diferente.

Importante

Esse recurso está na versão prévia.

Pré-requisitos

Importante

Garanta que a experiência autônoma do Copilot esteja habilitada em Catálogo do OneLake>>>>Copilot>Experiência autônoma do Copilot. Se ele não estiver habilitado, você não poderá usar o agente de dados dentro dos cenários do Copilot, mesmo se outras opções de tenant do Copilot estiverem ativadas. Para obter detalhes, consulte Copilot nas configurações do locatário no Power BI.

Crie um lakehouse com o AdventureWorksLH

Primeiro, crie um lakehouse e preencha-o com os dados necessários.

Se você já tiver uma instância do AdventureWorksLH em um depósito ou lakehouse, pode ignorar esta etapa. Caso contrário, você pode usar as instruções a seguir de um notebook Fabric para preencher o lakehouse com os dados.

  1. Crie um novo bloco de anotações no workspace em que você deseja criar seu agente de dados Fabric.

  2. No lado esquerdo do painel Explorer, selecione + Fontes de dados. Essa opção permite que você adicione um lakehouse já existente ou crie um novo lakehouse. Para fins de clareza, crie um novo lakehouse e atribua um nome a ele.

  3. Na célula superior, adicione o seguinte snippet de código:

    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. Selecione Executar tudo.

Captura de tela mostrando um Notebook com o código de upload do AdventureWorks.

Após alguns minutos, o lakehouse é preenchido com os dados necessários.

Cuidado

Notebooks que continuam em execução (por exemplo, devido a loops infinitos acidentais ou interrogamento constante) podem consumir a capacidade do Fabric indefinidamente. Depois que os dados terminarem de carregar, interrompa as células ativas e encerre a sessão do notebook (Sessão de parada da barra de ferramentas > do Notebook) se você não precisar mais dela. Evite adicionar loops de execução longa sem timeout.

Criar um agente de dados Fabric

Para criar um novo agente de dados Fabric, navegue até o workspace e selecione o botão + Novo Item, conforme mostrado nesta captura de tela:

Screenshot mostrando onde criar agentes de dados do Fabric.

Na guia Todos os itens, pesquise agente de dados do Fabric para localizar a opção apropriada. Depois de selecionado, um prompt solicita que você forneça um nome para o agente de dados Fabric, conforme mostrado nesta captura de tela:

Screenshot mostrando onde fornecer o nome do agente de dados Fabric.

Depois de inserir o nome, prossiga com as etapas a seguir para alinhar o agente de dados Fabric com seus requisitos específicos.

Selecione os dados

Selecione o lakehouse que você criou na etapa anterior e, em seguida, selecione Adicionar, conforme mostrado na seguinte captura de tela:

Captura de tela mostrando a etapa adicionar um lakehouse.

Depois que o lakehouse é adicionado como uma fonte de dados, o painel Explorer no lado esquerdo da página do agente de dados Fabric mostra o nome do lakehouse. Selecione o lakehouse para exibir todas as tabelas disponíveis. Use as caixas de seleção para selecionar as tabelas que você deseja disponibilizar para a IA. Para este cenário, selecione estas tabelas:

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

Captura de tela mostrando onde você pode selecionar tabelas para a IA.

Permissões para modelos semânticos em agentes de dados

Os usuários só precisam de permissão de leitura em um modelo semântico Power BI para adicioná-lo a um agente de dados e fazer perguntas por meio do agente. O acesso ao workspace (função membro) e a permissão Build não são necessários para interação por meio de agentes de dados. A permissão de gravação é necessária apenas para modificar o modelo semântico ou usar recursos como Preparação para IA.

Essa alteração de permissões se aplica somente a interações por meio de agentes de dados. Outros padrões de acesso (por exemplo, Analisar em Excel ou criação direta de relatório) seguem permissões de Power BI padrão.

Fornecer instruções

Para adicionar instruções, selecione o botão instruções do agente de dados para abrir o painel de instruções à direita. Você pode adicionar as instruções a seguir.

A fonte de dados AdventureWorksLH contém informações de três tabelas:

  • dimcustomer, para informações detalhadas de dados demográficos e de contato do cliente
  • dimdate, para dados relacionados à data – por exemplo, informações de calendário e fiscais
  • dimgeography, para obter detalhes geográficos, incluindo nomes de cidade e códigos de região do país.

Use essa fonte de dados para consultas e análises que envolvem detalhes do cliente, eventos baseados em tempo e localizações geográficas.

Captura de tela mostrando onde você pode fornecer as instruções para a IA.

Forneça exemplos

Para adicionar consultas de exemplo, selecione o botão Consultas de Exemplo para abrir o painel de consultas de exemplo à direita. Este painel fornece opções para adicionar ou editar consultas de exemplo para todas as fontes de dados com suporte. Para cada fonte de dados, você pode selecionar Adicionar ou Editar Consultas de Exemplo para inserir os exemplos relevantes, conforme mostrado na seguinte captura de tela:

Captura de tela mostrando onde você pode editar os exemplos que você fornece à IA.

Aqui, você deve adicionar consultas de exemplo para a fonte de dados do lakehouse que você criou.

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

Captura de tela mostrando a adição de exemplos de SQL.

Observação

No momento, não há suporte para a adição de pares de consulta/pergunta de exemplo para fontes de dados de modelo semântico Power BI.

Testar e revisar o agente de dados Fabric

Agora que você configurou o agente de dados do Fabric, adicionou instruções do agente de dados do Fabric e forneceu consultas de exemplo para o lakehouse, você pode interagir com ele, fazendo perguntas e recebendo respostas. À medida que você continua testando, você pode adicionar mais exemplos e refinar as instruções para melhorar ainda mais o desempenho do agente de dados Fabric. Colabore com seus colegas para coletar comentários e, com base em suas entradas, verifique se as consultas e instruções de exemplo fornecidas se alinham com os tipos de perguntas que eles desejam fazer.

Publicar o agente de dados Fabric

Depois de validar o desempenho do agente de dados Fabric, você poderá decidir publicá-lo para que possa compartilhá-lo com seus colegas que desejam fazer Q& Um sobre dados. Nesse caso, selecione Publicar conforme mostrado nesta captura de tela:

Captura de tela mostrando a seleção da opção Publicar.

A caixa Publicar agente de dados é aberta, conforme mostrado nesta captura de tela:

Captura de tela mostrando o recurso de publicação do agente de dados.

Nesta caixa, selecione Publish para publicar o agente de dados Fabric. Uma vez publicado, o agente de dados pode ser consumido como um servidor de protocolo de contexto modelo (MCP).

Usar o agente de dados Fabric programaticamente

Você pode usar o agente de dados Fabric programaticamente em um bloco de anotações Fabric. Para determinar se o agente de dados Fabric tem ou não um valor de URL publicado, selecione Settings, conforme mostrado na captura de tela a seguir:

Screenshot mostrando a seleção de configurações do agente de dados Fabric.

Antes de publicar o agente de dados Fabric, ele não tem um valor de URL publicado, conforme mostrado na captura de tela a seguir:

Screenshot mostrando que um agente de dados Fabric não possui um valor de URL publicado antes de ser publicado.

Se você não tiver publicado o agente de dados do Fabric antes, poderá publicá-lo seguindo as instruções nas etapas anteriores. Em seguida, você pode copiar a URL publicada e usá-la no bloco de anotações Fabric. Dessa forma, você pode consultar o agente de dados Fabric fazendo chamadas para a API do agente de dados Fabric em um bloco de anotações Fabric. Cole a URL copiada neste snippet de código. Em seguida, substitua a pergunta por qualquer consulta relevante para o agente de dados Fabric. Este exemplo usa \<generic published URL value\> como a URL.

Importante

Ao chamar um agente de dados programaticamente, implemente:

  1. Um tempo limite de sondagem (veja o exemplo abaixo) para evitar loops indefinidos.
  2. Frequência mínima de sondagem (comece em 2 a 5 segundos; aumente somente se necessário).
  3. Limpeza de threads ou recursos criados após a conclusão.
  4. Desligamento da sessão do notebook ao terminar para liberar capacidade do Fabric.

Observação

Ajuste os pinos de versão (openai, synapseml, pandas, tqdm) para as versões mais recentes validadas para o runtime Fabric se essas versões exatas ficarem desatualizadas.

%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

Importante

Desde que a OpenAI aposentou a API Assistants, as aplicações devem usar o endpoint MCP para interações com agentes. Diferentemente da API de Assistants, o endpoint MCP não oferece gerenciamento integrado de conversas, portanto quem faz as chamadas deve orquestrar interações de vários turnos, mantendo o estado da conversa e fornecendo contexto relevante ao longo das requisições.

Consultar o agente de dados de Python

O exemplo a seguir conecta-se ao ponto de extremidade MCP, descobre a ferramenta, envia uma pergunta e imprime a resposta. Reutiliza o credential da etapa Autenticação no Fabric e usa o SDK do MCP para Python. Instale o SDK primeiro:

%pip install mcp
import asyncio

from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

workspace_id = "<your-workspace-id>"
data_agent_id = "<your-data-agent-id>"
question = "<your question>"

mcp_url = (
    f"https://api.fabric.microsoft.com/v1/mcp/workspaces/{workspace_id}"
    f"/dataagents/{data_agent_id}/agent"
)


def get_auth_headers():
    token = credential.get_token("https://api.fabric.microsoft.com/.default")
    return {"Authorization": f"Bearer {token.token}"}


async def query_data_agent(question):
    headers = get_auth_headers()

    async with streamablehttp_client(mcp_url, headers=headers) as (read, write, _):
        async with ClientSession(read, write) as session:
            await session.initialize()

            # The data agent exposes a single tool. Discover it, then call it.
            tools = await session.list_tools()
            tool = tools.tools[0]
            question_arg = next(iter(tool.inputSchema["properties"]))

            result = await session.call_tool(tool.name, {question_arg: question})

            answers = [block.text for block in result.content if block.type == "text"]
            return "\n".join(answers)


answer = asyncio.run(query_data_agent(question))
print(answer)