Microsoft Purview

Microsoft Purview biedt geavanceerde mogelijkheden voor gegevensbeveiliging, naleving en governance voor AI-toepassingen. Door Purview-API's binnen de Agent Framework SDK te integreren, kunnen ontwikkelaars intelligente agents bouwen die standaard zijn beveiligd, terwijl gevoelige gegevens in prompts en antwoorden worden beveiligd en voldoen aan het organisatiebeleid.

Waarom Purview integreren met Agent Framework?

  • Lekken van gevoelige gegevens voorkomen: inline blokkeren van gevoelige inhoud op basis van DLP-beleid (Preventie van gegevensverlies).
  • Governance inschakelen: AI-interacties vastleggen in Purview voor controle, communicatiecompatibiliteit, intern risicobeheer, eDiscovery en gegevenslevenscyclusbeheer.
  • Acceptatie versnellen: Enterprise-klanten vereisen naleving voor AI-apps. De Purview-integratie deblokkert de implementatie.

Prerequisites

Voordat u begint, moet u ervoor zorgen dat u het volgende heeft:

  • Microsoft Azure-abonnement met Microsoft Purview geconfigureerd.
  • Microsoft 365-abonnement met een E5-licentie en pay-as-you-go-facturering.
  • Agent Framework SDK: Om de Agent Framework SDK te installeren:
    • Python: Voer uit pip install agent-framework.
    • .NET: Installeren vanuit NuGet.

Microsoft Purview integreren in uw agent

In de middleware-pijplijn voor werkstromen van uw agent kunt u de Microsoft Purview-beleidsmiddleware toevoegen om prompts en antwoorden te onderscheppen en te bepalen of ze voldoen aan het beleid dat is ingesteld in Microsoft Purview. De Agent Framework SDK kan chatclientprompts en -antwoorden van agents naar agent of eindgebruiker onderscheppen.

In het volgende codevoorbeeld ziet u hoe u de Middleware van het Microsoft Purview-beleid toevoegt aan uw agentcode. Zie Een agent maken en uitvoeren met Agent Framework als u nieuw bent bij 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 is handig voor ontwikkeling, maar vereist zorgvuldige overwegingen in de productieomgeving. Overweeg in productie een specifieke referentie te gebruiken (bijvoorbeeld ManagedIdentityCredential) om latentieproblemen, onbedoelde referentieprobing en potentiële beveiligingsrisico's van terugvalmechanismen te voorkomen.

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

Python-inhoudsbeoordeling en handhaving

De middleware beoordeelt elk niet-leeg onderdeel van de berichtinhoud, niet alleen platte tekst. Tekst en redeneringstekst worden geëvalueerd als tekst. URI-nettoladingen van Base64-gegevens worden geëvalueerd als binaire inhoud. Niet-base64-gegevens, URI-inhoud, functieaanroepen, functieresultaten en andere gestructureerde inhoud worden geserialiseerd als tekst, zodat ze niet worden overgeslagen. Alleen lege inhoud en usage inhoud worden weggelaten.

Beleidsevaluatie mislukt wanneer de middleware een gebruikers-id, tenant of toepassingslocatie niet kan oplossen. Identiteit afleiden van een gevalideerd token aan de serverzijde in plaats van door aanroeper beheerde berichtvelden. Alleen instellen ignore_exceptions wanneer u bewust de voorkeur geeft aan beschikbaarheid boven afdwingen. Met deze instelling wordt afdwinging voor elke fout overgeslagen.

Kies Python middlewareplaatsing

PurviewPolicyMiddleware en PurviewChatPolicyMiddleware dwingen hetzelfde beleid af op verschillende pijplijngrenzen:

Gedrag agent middleware chatmiddleware
Evaluatiebereik Evalueert de invoer en het eindantwoord van de aanroeper eenmaal per agentuitvoering. Evalueert het voorbereide verzoek en antwoord bij elke modelaanroep.
Toolgegevens en contextgegevens Evalueren van de uitvoer van de contextprovider of een aanroep van een modelhulpprogramma voordat het hulpprogramma wordt uitgevoerd. Evalueert uitvoer van contextproviders, opnieuw afgespeelde geschiedenis en aanroepen van modelhulpprogramma's vóór de uitvoering. De resultaten van hulpprogramma's worden geëvalueerd in de volgende modeloproep.
Geschiedenis van geblokkeerde antwoorden Het oorspronkelijke antwoord kan al zijn opgeslagen voordat de middleware deze vervangt voor de aanroeper. De vervanging is beschikbaar voordat Agent Framework de gespreksbeurt opslaat. Door de provider beheerde opslag behoudt mogelijk nog steeds het oorspronkelijke antwoord.

Gebruik PurviewChatPolicyMiddleware voor preventie van gegevensverlies wanneer het beleid de volledige modelaanvraag moet dekken. Gebruik PurviewPolicyMiddleware wanneer een enkele controle bij de uitvoeringsgrens van de agent voldoende is. Plaats in beide middlewarelijsten de Purview-middleware voor het laatst, zodat latere middleware inhoud niet kan vervangen nadat Purview deze heeft geëvalueerd.

Beide middlewaretypen bufferen een gestreamde respons volledig en evalueren deze voordat er een update wordt vrijgegeven. Streaming levert dus geen inhoud incrementeel wanneer Purview-middleware is gekoppeld.


Volgende stappen 

Nu u de bovenstaande code aan uw agent hebt toegevoegd, voert u de volgende stappen uit om de integratie van Microsoft Purview in uw code te testen:

  1. Entra-registratie: Registreer uw agent en voeg de vereiste Microsoft Graph-machtigingen (ProtectionScopes.Compute.All, ContentActivity.Write, Content.Process.All) toe aan de service-principal. Zie Een toepassing registreren in Microsoft Entra ID en dataSecurityAndGovernance-resourcetype voor meer informatie. In de volgende stap hebt u de app-id van Microsoft Entra nodig.
  2. Purview-beleid: Purview-beleid configureren met behulp van de Microsoft Entra-app-id om communicatiegegevens van agents naar Purview te laten stromen. Zie Microsoft Purview configureren voor meer informatie.

Resources

Opmerking

Ondersteuning voor deze functie is binnenkort beschikbaar. Zie de opslagplaats Agent Framework Go voor de meest recente status.