Microsoft Purview

A Microsoft Purview oferece capacidades de segurança de dados, conformidade e governação de nível empresarial para aplicações de IA. Ao integrar APIs Purview no SDK do Agent Framework, os programadores podem construir agentes inteligentes que são seguros por design, garantindo ao mesmo tempo que os dados sensíveis nos prompts e respostas são protegidos e cumprem as políticas organizacionais.

Porque integrar o Purview com o Agent Framework?

  • Prevenir fugas de dados sensíveis: Bloqueio em linha de conteúdos sensíveis com base nas políticas de Prevenção de Perda de Dados (DLP).
  • Permitir governação: Registar interações de IA em Auditoria, Conformidade de Comunicação, Gestão de Riscos Internos, eDiscovery e Gestão do Ciclo de Vida de Dados.
  • Acelerar a adoção: Os clientes empresariais exigem conformidade para aplicações de IA. A integração com Purview desbloqueia a implementação.

Pré-requisitos

Antes de começar, certifique-se de que tem:

  • Subscripção Microsoft Azure com Microsoft Purview configurada.
  • Subscrição Microsoft 365 com licença E5 e configuração de faturação pay-as-you-go.
  • SDK do Agent Framework: Para instalar o SDK do Agent Framework:
    • Python: Executa pip install agent-framework.
    • .NET: Instalar a partir do NuGet.

Como integrar o Microsoft Purview no seu agente

No pipeline de middleware de workflow do seu agente, pode adicionar middleware de políticas do Microsoft Purview para intercetar prompts e respostas e determinar se eles cumprem as políticas estabelecidas no Microsoft Purview. O SDK do Agent Framework é capaz de interceptar prompts e respostas de chat entre agentes ou utilizadores finais.

O exemplo de código seguinte demonstra como adicionar o middleware de políticas Microsoft Purview ao código do seu agente. Se és novo no Agent Framework, vê Criar e executar um agente com Agent Framework.


using Azure.AI.Projects;
using Azure.Core;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Purview;

string endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
string deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-4o-mini";
string purviewClientAppId = Environment.GetEnvironmentVariable("PURVIEW_CLIENT_APP_ID") ?? throw new InvalidOperationException("PURVIEW_CLIENT_APP_ID is not set.");

TokenCredential browserCredential = new InteractiveBrowserCredential(
    new InteractiveBrowserCredentialOptions
    {
        ClientId = purviewClientAppId
    });

AIAgent agent = new AIProjectClient(
    new Uri(endpoint),
    new DefaultAzureCredential())
    .AsAIAgent(
        model: deploymentName,
        instructions: "You are a secure assistant.")
    .AsBuilder()
    .WithPurview(browserCredential, new PurviewSettings("My Secure Agent"))
    .Build();

AgentResponse response = await agent.RunAsync("Summarize zero trust in one sentence.").ConfigureAwait(false);
Console.WriteLine(response);

Warning

DefaultAzureCredential é conveniente para o desenvolvimento, mas requer uma consideração cuidadosa na produção. Em produção, considere usar uma credencial específica (por exemplo, ManagedIdentityCredential) para evitar problemas de latência, sondagens não intencionais de credenciais e potenciais riscos de segurança provenientes de mecanismos de recurso.

import asyncio
import os
from agent_framework import Agent, Message
from agent_framework.openai import OpenAIChatCompletionClient
from agent_framework.microsoft import PurviewPolicyMiddleware, PurviewSettings
from azure.identity import AzureCliCredential, InteractiveBrowserCredential

# Set default environment variables if not already set
os.environ.setdefault("AZURE_OPENAI_ENDPOINT", "<azureOpenAIEndpoint>")
os.environ.setdefault("AZURE_OPENAI_CHAT_COMPLETION_MODEL", "<azureOpenAIChatDeploymentName>")

async def main():
    chat_client = OpenAIChatCompletionClient(
        model=os.environ["AZURE_OPENAI_CHAT_COMPLETION_MODEL"],
        azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
        api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
        credential=AzureCliCredential(),
    )
    purview_middleware = PurviewPolicyMiddleware(
        credential=InteractiveBrowserCredential(
            client_id="<clientId>",
        ),
        settings=PurviewSettings(app_name="My Secure Agent")
    )
    agent = Agent(
        client=chat_client,
        instructions="You are a secure assistant.",
        middleware=[purview_middleware]
    )
    response = await agent.run(Message(role='user', contents=["Summarize zero trust in one sentence."]))
    print(response)

if __name__ == "__main__":
    asyncio.run(main())

Avaliação e aplicação de conteúdos em Python

O middleware avalia cada item de conteúdo de mensagem não vazio, não apenas texto simples. O texto e o texto de raciocínio são avaliados como texto. As cargas úteis de URI de dados Base64 são tratadas como conteúdo binário. Dados não-base64, conteúdo URI, chamadas de funções, resultados de funções e outro conteúdo estruturado são serializados como texto para não serem ignorados. Apenas conteúdos vazios e usage conteúdos são omitidos.

A avaliação da política falha em modo fechado quando o middleware não consegue resolver o ID de utilizador, o tenant ou a localização da aplicação. Derive a identidade a partir de um token validado do lado do servidor em vez de campos de mensagem controlados pelo chamador. Defina ignore_exceptions apenas quando preferir deliberadamente a disponibilidade em vez da imposição; esta definição contorna a imposição para todos os erros.

Escolha a colocação do middleware em Python

PurviewPolicyMiddleware e PurviewChatPolicyMiddleware impõem as mesmas políticas em diferentes limites do pipeline:

Comportamento Middleware do agente Middleware de chat
Âmbito da avaliação Avalia a entrada e a resposta final do chamador uma vez por execução de agente. Avalia o pedido e a resposta preparados em cada chamada de modelo.
Ferramentas e dados de contexto Não avalia a saída do provedor de contexto nem uma chamada de ferramenta do modelo antes de a ferramenta ser executada. Avalia a saída do fornecedor de contexto, o histórico reproduzido e as chamadas de ferramentas de modelo antes da execução. Os resultados das ferramentas são avaliados na próxima chamada ao modelo.
Histórico de respostas bloqueadas A resposta original pode já estar armazenada antes de o middleware a substituir para o chamador. A substituição está disponível antes de o Agent Framework armazenar a interação. O armazenamento gerido pelo fornecedor pode ainda manter a resposta original.

Use PurviewChatPolicyMiddleware para prevenção da perda de dados quando a política deve cobrir todo o pedido ao modelo. Utilize PurviewPolicyMiddleware quando uma única verificação no limite da execução do agente for suficiente. Em qualquer uma das listas de middleware, coloque o middleware da Purview por último, para que o middleware posterior não possa substituir o conteúdo depois de o Purview o avaliar.

Ambos os tipos de middleware armazenam uma resposta transmitida na íntegra e avaliam-na antes de permitirem qualquer atualização. O streaming, portanto, não entrega conteúdo de forma incremental enquanto o middleware Purview está anexado.


Passos seguintes

Agora que adicionou o código acima ao seu agente, execute os seguintes passos para testar a integração do Microsoft Purview no seu código:

  1. Registo Entra: Registe o teu agente e adiciona as permissões Microsoft Graph necessárias (ProtectionScopes.Compute.All, ContentActivity.Write, Content.Process.All) ao Service Principal. Para mais informações, consulte Registar uma aplicação no Microsoft Entra ID e o tipo de recurso dataSecurityAndGovernance. No próximo passo, vais precisar do ID da aplicação Microsoft Entra.
  2. Políticas do Purview: Configure as políticas do Purview usando o ID da aplicação Microsoft Entra para permitir que os dados das comunicações do agente fluam para o Purview. Para mais informações, consulte Configurar Microsoft Purview.

Resources

Observação

O suporte para esta funcionalidade do go está a chegar em breve. Consulte o repositório Agent Framework Go para o estado mais recente.