Microsoft Purview는 AI 애플리케이션을 위한 엔터프라이즈급 데이터 보안, 규정 준수 및 거버넌스 기능을 제공합니다. 개발자는 에이전트 프레임워크 SDK 내에 Purview API를 통합하여 기본적으로 안전한 지능형 에이전트를 빌드하는 동시에 프롬프트 및 응답의 중요한 데이터를 보호하고 조직 정책을 준수할 수 있습니다.
Purview를 에이전트 프레임워크와 통합하는 이유는 무엇인가요?
- 중요한 데이터 누출 방지: DLP(데이터 손실 방지) 정책에 따라 중요한 콘텐츠를 인라인으로 차단합니다.
- 거버넌스 사용: 감사, 통신 규정 준수, 내부자 위험 관리, eDiscovery 및 데이터 수명 주기 관리를 위해 Purview에서 AI 상호 작용을 기록합니다.
- 채택 가속화: 엔터프라이즈 고객은 AI 앱을 준수해야 합니다. Purview 통합은 배포의 차단을 해제합니다.
필수 조건
시작하기 전에 다음 사항을 확인하세요.
- Microsoft Purview가 구성된 Microsoft Azure 구독
- E5 라이선스 및 종량제 청구 설정과 함께 제공되는 Microsoft 365 구독
- 테스트를 위해 Microsoft 365 개발자 프로그램 테넌트를 사용할 수 있습니다. 자세한 내용은 Microsoft 365 개발자 프로그램 참가를 참조하세요.
- 에이전트 프레임워크 SDK: 에이전트 프레임워크 SDK를 설치하려면:
- Python:
pip install agent-framework실행 - .NET: NuGet에서 설치합니다.
- Python:
Microsoft Purview를 에이전트에 통합하는 방법
에이전트의 워크플로 미들웨어 파이프라인에서 Microsoft Purview 정책 미들웨어를 추가하여 프롬프트 및 응답을 가로채 Microsoft Purview에 설정된 정책을 충족하는지 확인할 수 있습니다. 에이전트 프레임워크 SDK는 에이전트 간 또는 최종 사용자 채팅 클라이언트 프롬프트 및 응답을 가로챌 수 있습니다.
다음 코드 샘플에서는 에이전트 코드에 Microsoft Purview 정책 미들웨어를 추가하는 방법을 보여 줍니다. 에이전트 프레임워크를 새로 사용하는 경우 에이전트 프레임워크를 사용하여 에이전트 만들기 및 실행을 참조하세요.
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 은 개발에 편리하지만 프로덕션 환경에서 신중하게 고려해야 합니다. 프로덕션 환경에서는 특정 자격 증명(예: ManagedIdentityCredential)을 사용하여 대기 시간 문제, 의도하지 않은 자격 증명 검색 및 대체 메커니즘의 잠재적인 보안 위험을 방지하는 것이 좋습니다.
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
미들웨어는 일반 텍스트뿐만 아니라 비어 있지 않은 모든 메시지 콘텐츠 항목을 평가합니다. 텍스트 및 추론 텍스트는 텍스트로 평가됩니다. Base64 데이터 URI 페이로드는 이진 콘텐츠로 평가됩니다. Base64가 아닌 데이터, URI 콘텐츠, 함수 호출, 함수 결과 및 기타 구조적 콘텐츠는 텍스트로 직렬화되므로 건너뛰지 않습니다. 빈 콘텐츠와 usage 콘텐츠만 생략됩니다.
미들웨어가 사용자 ID, 테넌트 또는 애플리케이션 위치를 확인할 수 없는 경우 정책 평가가 닫힙니다. 호출자가 제어하는 메시지 필드가 아닌 유효성이 검사된 서버 쪽 토큰에서 ID를 파생합니다. 의도적으로 적용보다 가용성을 선호하는 경우에만 설정합니다 ignore_exceptions . 이 설정은 모든 오류에 대한 적용을 무시합니다.
Python 미들웨어 배치 선택
PurviewPolicyMiddleware 및 PurviewChatPolicyMiddleware는 서로 다른 파이프라인 경계에서 동일한 정책을 적용합니다.
| Behavior | 에이전트 미들웨어 | 채팅 미들웨어 |
|---|---|---|
| 평가 범위 | 에이전트 실행당 한 번 호출자의 입력 및 최종 응답을 평가합니다. | 모든 모델 호출에서 준비된 요청 및 응답을 평가합니다. |
| 도구 및 컨텍스트 데이터 | 도구가 실행되기 전에 컨텍스트 공급자 출력 또는 모델 도구 호출을 평가하지 않습니다. | 실행 전에 컨텍스트 공급자 출력, 재생된 기록 및 모델 도구 호출을 평가합니다. 도구 결과는 다음 모델 호출에서 평가됩니다. |
| 차단된 응답 기록 | 원래 응답은 미들웨어가 호출자에게 전달하기 위해 이를 대체하기 전에 이미 저장되었을 수 있습니다. | 대체 항목은 에이전트 프레임워크가 턴을 저장하기 전에 사용할 수 있습니다. 공급자 관리 스토리지는 원래 응답을 계속 유지할 수 있습니다. |
전체 모델 요청을 포괄해야 하는 경우 데이터 손실 방지를 위해 PurviewChatPolicyMiddleware를 사용합니다. 에이전트 실행 경계에서 단일 검사로 충분할 때 사용합니다 PurviewPolicyMiddleware . 두 미들웨어 목록에서 Purview 미들웨어를 마지막으로 배치하여 Purview가 평가한 후 이후 미들웨어가 콘텐츠를 바꿀 수 없도록 합니다.
두 미들웨어 유형 모두 스트리밍된 응답을 완전히 버퍼링하고 업데이트를 릴리스하기 전에 평가합니다. 따라서 Purview 미들웨어가 연결된 동안 스트리밍은 콘텐츠를 증분 방식으로 제공하지 않습니다.
다음 단계
이제 위의 코드를 에이전트에 추가했으므로 다음 단계를 수행하여 코드에 Microsoft Purview의 통합을 테스트합니다.
- Entra 등록: 에이전트를 등록하고 필요한 Microsoft Graph 권한(ProtectionScopes.Compute.All, ContentActivity.Write, Content.Process.All)을 서비스 주체에 추가합니다. 자세한 내용은 Microsoft Entra ID 및 dataSecurityAndGovernance 리소스 종류에 애플리케이션 등록을 참조하세요. 다음 단계에서 Microsoft Entra 앱 ID가 필요합니다.
- Purview 정책: Microsoft Entra 앱 ID를 사용하여 Purview 정책을 구성하여 에이전트 통신 데이터가 Purview로 전달되도록 합니다. 자세한 내용은 Microsoft Purview 구성을 참조하세요.
Resources
- Nuget: Microsoft. Agents.AI.Purview
- Github: Microsoft. Agents.AI.Purview
- 샘플: AgentWithPurview
비고
이 기능에 대한 지원은 곧 제공될 예정입니다. 최신 상태는 에이전트 프레임워크 Go 리포지토리 를 참조하세요.