Foundry hosted agent isolation with Microsoft Agent Framework

ایزوله‌سازی عامل‌های میزبانی‌شده در فاندری (Foundry) با فریمورک عامل مایکروسافت (Microsoft Agent Framework)

نحوه کارکرد ایزوله‌سازی کاربر و نشست‌های میزبانی‌شده در فاندری را با نمونه‌های فریمورک عامل مایکروسافت در .NET و پایتون بیاموزید

ایزوله‌سازی عامل میزبانی‌شده در فاندری دو کنترل مستقل را ارائه می‌دهد. ایزوله‌سازی کاربر مشخص می‌کند که داده‌های چه کسی ممکن است استفاده شود. در عین حال، ایزوله‌سازی نشست میزبانی‌شده در فاندری مشخص می‌کند که کد و فایل‌ها در کجا به حیات خود ادامه می‌دهند.

برای هر کنترل، فاندری می‌تواند مقدار را تعیین کند یا برنامه می‌تواند آن را فراهم کند. بنابراین، گزینه‌های موجود از فراخوانندگان مستقیم، لایه‌های میانی مورد اعتماد، نشست‌های مدیریت‌شده توسط برنامه و استخرهای نشست مشترک پشتیبانی می‌کنند.

در حالی که عامل‌های میزبانی‌شده در فاندری به طور کلی در Microsoft Foundry در دسترس هستند، اما کیت‌های توسعه نرم‌افزار (SDK) مربوط به AgentServer و بسته‌های میزبانی فاندری در Microsoft Agent Framework برای .NET و پایتون همچنان در نسخه‌های پیش‌انتشار قرار دارند.

کنترل‌های ایزوله‌سازی عامل میزبانی‌شده در فاندری

کنترل نشان‌دهنده گزینه‌های موجود
ایزوله‌سازی کاربر کاربر نمایش‌داده‌شده توسط درخواست فعلی هویت Microsoft Entra فراخواننده، یا یک هویت تفویض‌شده ارائه‌شده توسط یک لایه میانی مورد اعتماد
ایزوله‌سازی نشست میزبانی‌شده در فاندری محیط ایزوله‌شده مبتنی بر ماشین مجازی (VM-isolated sandbox)، که با agent_session_id نشان داده می‌شود یک نشست ایجادشده در اولین درخواست، یا یک شناسه نشست موجود که توسط برنامه فراهم شده است
یک نشست میزبانی‌شده در فاندری یک مکالمه نیست. یک مکالمه شامل تاریخچه پیام‌ها و فراخوانی ابزارها است. یک نشست میزبانی‌شده در فاندری شامل پردازش سندباکس و فایل‌های ماندگار (Persisted) است.

گزینه‌های ایزوله‌سازی کاربر

برای دسترسی مستقیم، فاندری کاربر را از توکن Microsoft Entra فراخواننده شناسایی می‌کند. با این حال، برای برنامه‌هایی که کاربران خود را احراز هویت می‌کنند، یک لایه میانی مورد اعتماد می‌تواند یک هویت تفویض‌شده پایدار را در هر درخواست ارسال کند.

علاوه بر این، هویت تفویض‌شده مستقل از شناسه نشست میزبانی‌شده در فاندری است. بنابراین، مکالمات کاربری جداگانه می‌توانند از سندباکس‌های مجزا استفاده کنند یا یک سندباکس انتخاب‌شده توسط لایه میانی را به اشتراک بگذارند.

.NET

    using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry;

ChatClientAgentSession userConversationSession =
    await agent.CreateFoundryHostedAgentSessionAsync(
        /* hostedSessionId: foundryHostedSessionId, */
        userIdentity: userIdentity);

await agent.RunAsync(
    "Analyze the uploaded files.",
    userConversationSession);

string? delegatedUserIdentity =
    userConversationSession.FoundryHostedAgentUserIdentity;
  

پایتون (Python)

    await agent.run(
    "Analyze the uploaded files.",
    session=user_conversation_session,
    client_kwargs={
        "extra_headers": {
            "x-ms-user-identity": user_identity,
        }
    },
)
  

در .NET، فریمورک عامل (Agent Framework) هویت تفویض‌شده را به همراه AgentSession ذخیره می‌کند. استفاده مجدد یا بازیابی آن نشست، همان هویت را در هر اجرا ارسال می‌کند. در پایتون، API فعلی هویت تفویض‌شده را با هر فراخوانی به جلو هدایت می‌کند.

علاوه بر این، مقدار هویت تفویض‌شده برای فریمورک عامل غیرقابل‌درک (مات) است. همچنین، لایه میانی مورد اعتماد مالک نگاشت بین کاربر برنامه‌ی احراز هویت‌شده‌ی خود و آن مقدار است. راهنمای ایزوله‌سازی به ازای هر کاربر مدل مجوز و امنیتی مورد نیاز را توضیح می‌دهد.

ایزوله‌سازی عامل میزبانی‌شده در فاندری با کنترل‌های نشست

هنگامی که یک درخواست فاقد agent_session_id باشد، فاندری یک نشست میزبانی‌شده در فاندری ایجاد کرده و شناسه آن را برمی‌گرداند. با این حال، یک برنامه همچنین می‌تواند یک نشست را از طریق کلاینت پروژه فاندری ایجاد کرده و شناسه بازگردانده‌شده را ارائه دهد.

.NET – ایجاد یک نشست با کلاینت پروژه فاندری

    using Azure.AI.Projects;
using Azure.AI.Projects.Agents;

ProjectAgentSession foundryHostedSession =
    await projectClient.AgentAdministrationClient.CreateSessionAsync(
        agentName,
        new VersionRefIndicator(agentVersion));

string foundryHostedSessionId =
    foundryHostedSession.AgentSessionId;
  

پایتون – ایجاد یک نشست با کلاینت پروژه فاندری

    from azure.ai.projects.models import VersionRefIndicator

foundry_hosted_session = await project_client.agents.create_session(
    agent_name,
    version_indicator=VersionRefIndicator(
        agent_version=agent_version,
    ),
)

foundry_hosted_session_id = (
    foundry_hosted_session.agent_session_id
)
  

فریمورک عامل، شناسه ایجادشده توسط سرویس یا ارائه‌شده توسط برنامه را روی AgentSession خودش ذخیره می‌کند. علاوه بر این، شیء فریمورک عامل، نشست میزبانی‌شده راه دور در فاندری را ایجاد نمی‌کند. بنابراین، فراخوانی‌های بعدی با آن شیء، شناسه متصل‌شده را ارسال کرده و به همان پوشه کاربر ($HOME) ماندگار، فایل‌های آپلودشده و وضعیت کاری دسترسی پیدا می‌کنند.

.NET – استفاده از نشست میزبانی‌شده در فاندری که توسط فاندری تخصیص داده شده یا توسط برنامه فراهم شده است

    using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry;

ChatClientAgentSession session =
    await agent.CreateFoundryHostedAgentSessionAsync(
        /* hostedSessionId: foundryHostedSessionId
           Omit this argument for Foundry to assign the ID
           on the first invocation. */);

await agent.RunAsync("Analyze the uploaded files.", session);

string? resolvedFoundryHostedSessionId =
    session.FoundryHostedAgentSessionId;
  

پایتون – استفاده از نشست میزبانی‌شده در فاندری که توسط فاندری تخصیص داده شده یا توسط برنامه فراهم شده است

    from agent_framework import AgentSession
from agent_framework.foundry import (
    FOUNDRY_HOSTED_AGENT_SESSION_ID_KEY,
)

session = AgentSession()

# Optional: attach an ID created through the Foundry project client.
session.state[
    FOUNDRY_HOSTED_AGENT_SESSION_ID_KEY
] = foundry_hosted_session_id

await agent.run("Analyze the uploaded files.", session=session)

foundry_hosted_session_id = session.state[
    FOUNDRY_HOSTED_AGENT_SESSION_ID_KEY
]
  

برای مثال، شناسه‌های ارائه‌شده توسط برنامه از آپلود فایل قبل از اولین فراخوانی، مدیریت صریح چرخه حیات، مکان‌یابی پایدار بار کاری و استخرهای نشست محدود پشتیبانی می‌کنند. به همین ترتیب، شناسه‌های ایجادشده توسط سرویس از تخصیص نشست بر اساس تقاضا پشتیبانی می‌کنند.

برای مثال، در یک طراحی مبتنی بر استخر (pooled)، یک لایه میانی کاربران را به مجموعه محدودی از شناسه‌های نشست میزبانی‌شده در فاندری نگاشت می‌کند و هویت تفویض‌شده را با هر درخواست ارسال می‌کند. در عین حال، فاندری زنجیره‌های پاسخ را به ازای هر کاربر خصوصی نگه می‌دارد، در حالی که سیستم فایل سندباکس به صورت اشتراکی باقی می‌ماند. بنابراین، فایل‌های متعلق به برنامه، رکوردهای پایگاه داده و کش‌ها می‌توانند هم از agent_session_id و هم از هویت کاربر به عنوان پارتیشن خود استفاده کنند.

بیشتر بدانید

  • ایزوله‌سازی نشست‌های عامل میزبانی‌شده در فاندری به ازای هر کاربر
  • مدیریت نشست‌های عامل میزبانی‌شده در فاندری
  • چندپخش (Multiplex) چندین کاربر در یک نشست عامل میزبانی‌شده در فاندری
  • عامل‌های میزبانی‌شده در فاندری با فریمورک عامل مایکروسافت
  • نمونه‌های عامل میزبانی‌شده در فاندری برای فریمورک عامل .NET
  • نمونه‌های عامل میزبانی‌شده در فاندری برای فریمورک عامل پایتون
  • از محلی تا محیط تولید (Production): استقرار عامل (Agent) فریم‌ورک عامل مایکروسافت با عوامل میزبانی‌شده در Foundry
  • فریم‌ورک عامل مایکروسافت در رویداد BUILD 2026: ابزار ارزیابی عامل (Agent Harness)، عوامل میزبانی‌شده، CodeAct و موارد دیگر

نظر مهندس بهمن آبادی: تفکیک هویت کاربر از محیط اجرایی (سندباکس) در فاندری، معماری انعطاف‌پذیری برای مدیریت امنیت و وضعیت در برنامه‌های هوش مصنوعی فراهم می‌کند. به عنوان یک توسعه‌دهنده، استفاده از استخرهای نشست مشترک همراه با هویت‌های تفویض‌شده، راهکاری بهینه برای مقیاس‌پذیری و حفظ حریم خصوصی داده‌ها در محیط‌های سازمانی است. طراحان سیستم باید در مدیریت چرخه حیات این شناسه‌ها دقت کنند تا از درز اطلاعات میان کاربران جلوگیری شود.

منبع: https://devblogs.microsoft.com/agent-framework/foundry-hosted-agent-isolation-with-microsoft-agent-framework/