Использование агента данных Microsoft Fabric (предварительная версия)

Важно

Элементы, помеченные (предварительная версия) в этой статье, в настоящее время находятся в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания, и мы не рекомендуем ее для рабочих нагрузок. Некоторые функции могут не поддерживаться или могут иметь ограниченные возможности. Дополнительные сведения см. в разделе Supplemental Terms of Use for Microsoft Azure Previews.

Примечание

Ознакомьтесь с рекомендациями по оптимизации использования инструментов.

Используйте агент данных Microsoft Fabric со службой агента Foundry для анализа корпоративных данных в чате. Агент данных Fabric преобразует корпоративные данные в разговорный опыт вопросов и ответов.

Сначала создайте и опубликуйте агент данных Fabric. Затем подключите агент данных Fabric к опубликованной конечной точке. Когда пользователь отправляет запрос, агент определяет, следует ли использовать агент данных Fabric. Если это так, он использует удостоверение конечного пользователя для создания запросов по данным, к которых у них есть доступ. Наконец, агент создает ответы на основе запросов, возвращаемых агентом данных Fabric. С помощью передачи удостоверения (от имени) эта интеграция упрощает доступ к данным предприятия в Fabric при сохранении прочной безопасности, обеспечивая надлежащий контроль доступа и корпоративную защиту.

Поддержка использования

В следующей таблице показана поддержка пакета SDK и настройки.

поддержка Microsoft Foundry пакет SDK Python C# SDK JavaScript SDK пакет SDK Java REST API Базовая настройка агента Настройка стандартного агента
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

Необходимые условия

Примечание

  • Выбранная модель во время настройки агента используется только для координации и создания ответа. Это не влияет на выбор модели, которую агент данных Fabric использует для NL2SQL.
  • Чтобы помочь агенту надежно вызвать средство Fabric, включите четкие инструкции по инструменту в инструкции агента (например, "Для данных о продажах клиентов и продуктов используйте средство Fabric"). Вы также можете принудительно использовать инструмент с помощью tool_choice.
  • Создайте и опубликуйте агент данных Fabric.

  • Назначьте разработчикам и конечным пользователям по крайней мере роль Azure AI User Azure RBAC. Дополнительные сведения см. в разделе Azure управление доступом на основе ролей в Foundry.

  • Предоставьте разработчикам и конечным пользователям по крайней мере READ доступ к агенту данных Fabric. Пользователям также требуется минимальное разрешение на каждый базовый источник данных:

    Источник данных Минимальное разрешение
    семантическая модель Power BI Build (включает чтение). Только чтение недостаточно, так как агент создает запросы модели, требующие сборки.
    Lakehouse Прочитайте элемент Lakehouse (и доступ к таблицам, если они применяются).
    Склад Чтение (SELECT в соответствующих таблицах).
    База данных KQL Роль читателя в базе данных.

    Полные сведения см. в разделе "Базовые разрешения источника данных".

  • Убедитесь, что ваш агент данных Fabric и проект Foundry находятся у одного арендатора.

  • Используйте проверку подлинности удостоверения пользователя. Аутентификация служебного субъекта не поддерживается для агента данных Fabric.

  • Получите эти значения перед выполнением примеров:

    • Конечная точка проекта Foundry: FOUNDRY_PROJECT_ENDPOINT
    • Имя развертывания модели: FOUNDRY_MODEL_DEPLOYMENT_NAME
    • Идентификатор подключения Fabric (идентификатор подключения проекта): FABRIC_PROJECT_CONNECTION_ID.
  • Для примера REST также задано следующее:

    • AGENT_TOKEN (маркер носителя). Временный маркер можно получить с помощью Azure CLI:

      az account get-access-token --scope https://ai.azure.com/.default
      

    Настройка подключения Microsoft Fabric

    Перед запуском примеров создайте подключение проекта к агенту данных Fabric.

    1. В Microsoft Fabric откройте агент данных.
    2. Скопируйте значения из URL-адреса workspace_id и artifact_id.

    Путь URL-адреса выглядит примерно так..../groups/<workspace_id>/aiskills/<artifact_id>... Оба значения являются идентификаторами GUID.

    1. На портале Foundry откройте проект.
    2. В левой области выберите центр управления и выберите "Подключенные ресурсы".
    3. Создайте подключение типа Microsoft Fabric.
    4. Введите значения workspace_id и artifact_id.
    5. Сохраните подключение и скопируйте идентификатор подключения.

    Используйте идентификатор подключения в качестве значения FABRIC_PROJECT_CONNECTION_ID. Значение выглядит как /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.CognitiveServices/accounts/<foundryAccountName>/projects/<foundryProjectName>/connections/<connectionName>.

    Сквозная передача удостоверений и управление доступом

    Эта интеграция использует механизм передачи идентификационных данных (On-Behalf-Of). Средство Fabric выполняет запросы с помощью удостоверения пользователя, вошедшего в систему.

    • Предоставьте каждому пользователю доступ к агенту данных Fabric и его базовым источникам данных, или вызов средства завершается сбоем.
    • Используйте проверку подлинности удостоверения пользователя. Аутентификация служебного субъекта не поддерживается для агента данных Fabric.
    • Дополнительные сведения о том, как работает удостоверение агента, см. в разделе " Удостоверение агента".

Пример кода

Примечание

  • Дополнительные сведения см. в разделе "Подготовка к коду".
  • Идентификатор подключения должен быть в формате /subscriptions/{{subscriptionID}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.CognitiveServices/accounts/{{foundryAccountName}}/projects/{{foundryProjectName}}/connections/{{foundryConnectionName}}.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
    PromptAgentDefinition,
    MicrosoftFabricPreviewTool,
    FabricDataAgentToolParameters,
    ToolProjectConnection,
)

# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
FABRIC_CONNECTION_NAME = "my-fabric-connection"

# Create clients to call Foundry API
project = AIProjectClient(
    endpoint=PROJECT_ENDPOINT,
    credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()

# Get connection ID from connection name
fabric_connection = project.connections.get(FABRIC_CONNECTION_NAME)

# Create an agent with the Fabric data agent tool
agent = project.agents.create_version(
    agent_name="MyAgent",
    definition=PromptAgentDefinition(
        model="gpt-4.1-mini",
        instructions="You are a helpful assistant.",
        tools=[
            MicrosoftFabricPreviewTool(
                fabric_dataagent_preview=FabricDataAgentToolParameters(
                    project_connections=[
                        ToolProjectConnection(project_connection_id=fabric_connection.id)
                    ]
                )
            )
        ],
    ),
)
print(f"Agent created (id: {agent.id}, name: {agent.name}, version: {agent.version})")

user_input = input("Enter your question for Fabric (e.g., 'Tell me about sales records'): \n")

# Send the user query and force the agent to use the Fabric tool
response = openai.responses.create(
    tool_choice="required",
    input=user_input,
    extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)

print(f"Response output: {response.output_text}")

# Clean up resources
project.agents.delete_version(agent_name=agent.name, agent_version=agent.version)
print("Agent deleted")

Ожидаемые выходные данные

  • Сообщение, подтверждающее создание агента.
  • Строка, которая начинается с Response output:, за которой следует текст ответа.

Дополнительные сведения см. в примере full Python для агента данных Fabric.

Чтобы разрешить агенту доступ к агенту данных Fabric, используйте MicrosoftFabricAgentTool.

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
var fabricConnectionName = "my-fabric-connection";

// Create project client to call Foundry API
AIProjectClient projectClient = new(
    endpoint: new Uri(projectEndpoint),
    tokenProvider: new DefaultAzureCredential());

// Get connection ID from connection name
AIProjectConnection fabricConnection = projectClient.Connections.GetConnection(connectionName: fabricConnectionName);

FabricDataAgentToolOptions fabricToolOption = new()
{
    ProjectConnections = { new ToolProjectConnection(projectConnectionId: fabricConnection.Id) }
};
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-4.1-mini")
{
    Instructions = "You are a helpful assistant.",
    Tools = { new MicrosoftFabricPreviewTool(fabricToolOption), }
};
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
    agentName: "myAgent",
    options: new(agentDefinition));

// Create the response and make sure we are always using tool.
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);
CreateResponseOptions responseOptions = new()
{
    ToolChoice = ResponseToolChoice.CreateRequiredChoice(),
    InputItems = { ResponseItem.CreateUserMessageItem("What was the number of public holidays in Norway in 2024?") },
};
ResponseResult response = responseClient.CreateResponse(options: responseOptions);

// Print the Agent output.
Assert.That(response.Status, Is.EqualTo(ResponseStatus.Completed));
Console.WriteLine(response.GetOutputText());

// Delete the Agent version to clean up resources.
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);

Ожидаемые выходные данные

  • Текст ответа, напечатанный в консоли. Для примера вопроса ответ должен содержать количество государственных праздников (например, 62).

В следующем примере TypeScript показано, как создать агента ИИ, обладающего возможностями Microsoft Fabric, с помощью клиента MicrosoftFabricAgentTool и синхронного клиента Azure AI Projects. Агент может делать запросы к источникам данных Fabric и предоставлять ответы на основе анализа данных. Для версии примера на JavaScript см. пример JavaScript для агента данных Fabric в Azure SDK для JavaScript на GitHub.

import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
import * as readline from "readline";

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
const FABRIC_CONNECTION_NAME = "my-fabric-connection";

export async function main(): Promise<void> {
  const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
  const openai = project.getOpenAIClient();

  // Get connection ID from connection name
  const fabricConnection = await project.connections.get(FABRIC_CONNECTION_NAME);

  // Define Microsoft Fabric tool that connects to Fabric data sources
  const agent = await project.agents.createVersion("MyFabricAgent", {
    kind: "prompt",
    model: "gpt-4.1-mini",
    instructions: "You are a helpful assistant.",
    tools: [
      {
        type: "fabric_dataagent_preview",
        fabric_dataagent_preview: {
          project_connections: [
            {
              project_connection_id: fabricConnection.id,
            },
          ],
        },
      },
    ],
  });
  console.log(`Agent created (id: ${agent.id}, name: ${agent.name}, version: ${agent.version})`);

  // Prompt user for input
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
  });

  const userInput = await new Promise<string>((resolve) => {
    rl.question(
      "Enter your question for Fabric (e.g., 'Tell me about sales records'): \n",
      (answer) => {
        rl.close();
        resolve(answer);
      },
    );
  });

  // Send the user query and force the agent to use the Fabric tool
  const response = await openai.responses.create(
    {
      input: userInput,
    },
    {
      body: {
        agent: { name: agent.name, type: "agent_reference" },
        tool_choice: "required",
      },
    },
  );

  console.log(`\nResponse output: ${response.output_text}`);

  // Clean up resources by deleting the agent version
  await project.agents.deleteVersion(agent.name, agent.version);
  console.log("Agent deleted");
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Ожидаемые выходные данные

  • Сообщение, подтверждающее создание агента.
  • Строка, которая начинается с Response output:, за которой следует текст ответа.
  • Окончательное подтверждение удаления агента.

Использование Microsoft Fabric в агенте Java

Добавьте зависимость в вашу pom.xml:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-ai-agents</artifactId>
    <version>2.0.0</version>
</dependency>

Создание агента с помощью Microsoft Fabric

import com.azure.ai.agents.AgentsClient;
import com.azure.ai.agents.AgentsClientBuilder;
import com.azure.ai.agents.ResponsesClient;
import com.azure.ai.agents.models.*;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;

import java.util.Arrays;
import java.util.Collections;

public class FabricToolExample {
    public static void main(String[] args) {
        // Format: "https://resource_name.ai.azure.com/api/projects/project_name"
        String projectEndpoint = "your_project_endpoint";
        String fabricConnectionId = "your-fabric-connection-id";

        AgentsClientBuilder builder = new AgentsClientBuilder()
            .credential(new DefaultAzureCredentialBuilder().build())
            .endpoint(projectEndpoint);

        AgentsClient agentsClient = builder.buildAgentsClient();
        ResponsesClient responsesClient = builder.buildResponsesClient();

        // Create Microsoft Fabric tool with connection configuration
        MicrosoftFabricPreviewTool fabricTool = new MicrosoftFabricPreviewTool(
            new FabricDataAgentToolParameters()
                .setProjectConnections(Arrays.asList(
                    new ToolProjectConnection(fabricConnectionId)
                ))
        );

        // Create agent with Fabric tool
        PromptAgentDefinition agentDefinition = new PromptAgentDefinition("gpt-4.1-mini")
            .setInstructions("You are a data assistant that can query Microsoft Fabric data.")
            .setTools(Collections.singletonList(fabricTool));

        AgentVersionDetails agent = agentsClient.createAgentVersion("fabric-agent", agentDefinition);
        System.out.printf("Agent created: %s (version %s)%n", agent.getName(), agent.getVersion());

        // Create a response
        AgentReference agentReference = new AgentReference(agent.getName())
            .setVersion(agent.getVersion());

        Response response = responsesClient.createAzureResponse(
            new AzureCreateResponseOptions().setAgentReference(agentReference),
            ResponseCreateParams.builder()
                .input("Query the latest sales data from Microsoft Fabric"));

        System.out.println("Response: " + response.output());

        // Clean up
        agentsClient.deleteAgentVersion(agent.getName(), agent.getVersion());
    }
}

В следующем примере показано, как вызвать REST API агента Foundry с помощью средства агента данных Fabric.

Получение токена доступа:

export AGENT_TOKEN=$(az account get-access-token --scope "https://ai.azure.com/.default" --query accessToken -o tsv)

Важно

AGENT_TOKEN — это учетные данные. Держите его секретом и не проверяйте его в системе управления версиями.

curl --request POST \
  --url "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "'$FOUNDRY_MODEL_DEPLOYMENT_NAME'",
  "input": "Tell me about sales records for the last quarter.",
  "tool_choice": "required",
  "tools": [
    {
      "type": "fabric_dataagent_preview",
      "fabric_dataagent_preview": {
        "project_connections": [
          {
            "project_connection_id": "'$FABRIC_PROJECT_CONNECTION_ID'"
          }
        ]
      }
    }
  ]
}'

Ожидаемые выходные данные

  • 200 Ответ с текстом JSON, содержащим выходные данные модели.

Устранение неполадок

Проблема Причина Разрешение
Artifact Id should not be empty and needs to be a valid GUID. Создано подключение Fabric с недопустимым workspace_id или artifact_id Повторно создайте подключение Fabric. Скопируйте workspace_id и artifact_id из URL-адреса .../groups/<workspace_id>/aiskills/<artifact_id>...агента данных.
Can't add messages to thread_... while a run ... is active. Запуск всё ещё активен для потока Начните новую беседу или дождитесь завершения запущенного процесса, а затем попробуйте снова.
unauthorized Конечный пользователь не имеет доступа к агенту данных Fabric или его базовым источникам данных Предоставьте пользователю доступ в Fabric и убедитесь, что вы используете проверку подлинности пользователя.
Cannot find the requested item Или configuration not found Fabric агент данных не опубликован или изменена его конфигурация Опубликуйте агент данных Fabric и убедитесь, что он активен и его источники данных являются допустимыми.
Ошибки времени ожидания подключения Задержка сети или задержка службы Fabric Увеличьте параметры времени ожидания в конфигурации клиента. Рассмотрите возможность реализации логики повторных попыток с экспоненциальной отсрочкой.
Запрос данных возвращает пустые результаты Запрос не соответствует доступным данным Проверьте источники данных в агенте данных Fabric содержат ожидаемые данные. Сначала протестируйте запросы непосредственно в Fabric.
Invalid workspace ID format Идентификатор рабочей области не является допустимым ИДЕНТИФИКАТОРом GUID Скопируйте точный GUID рабочей области из URL-адреса или портала Fabric. Не изменяйте формат идентификатора.
Агент не использует средство Fabric Средство неправильно настроено или запрос не активирует его. Убедитесь, что средство Fabric включено в определении агента. Обновите запрос, чтобы включить данные, для которых требуется доступ к Fabric.

Дальнейшие действия