Build Your Own AI Agent Harness in C#, the MafClaw Live Series

ساخت ابزار کمکی ایجنت هوش مصنوعی خود در زبان C#، مجموعه برنامه‌های زنده MafClaw

من در حال ساخت یک ایجنت کامل C# به صورت زنده هستم؛ از یک فراخوانی ساده در اطراف یک IChatClient گرفته تا یک ایجنت آماده برای محیط تولید، قابل مشاهده و تحت کنترل، با استفاده از ابزار کمکی Microsoft Agent Framework در یک مجموعه ۴ قسمتی در Microsoft Reactor.

چند هفته پیش درباره نحوه انتقال از دستور dotnet run به یک Foundry Hosted Agent تنها در سه خط کد C# نوشتم. بازخوردها عالی بود. توسعه‌دهندگان سناریوی استقرار، زیرساخت مدیریت‌شده و به‌ویژه بخشی را دوست داشتند که در آن نیازی نبود کل بعدازظهر را صرف نوشتن یک فایل Dockerfile، یک انبار جلسات، یک پایگاه داده‌ی تله‌متری و یک سیستم توزیع‌شده کوچک فقط برای انتشار یک ایجنت کنیم 😅.

اما آن مقاله از نزدیک انتهای مسیر شروع می‌شود. این فرض را در نظر می‌گیرد که شما از قبل یک ایجنت ارزشمند برای استقرار دارید.

بنابراین سوال بعدی این است:

«پیش از استقرار ایجنت، چه چیزی باید درون آن قرار دهم؟»

ابزارها. برنامه‌ریزی. دسترسی ایمن به فایل. تأیید انسانی. حافظه. مهارت‌ها. دستورات شل. اجرای کد. ایجنت‌های پس‌زمینه. قابلیت مشاهده (Observability). حاکمیت. ارزیابی‌ها.

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

خبر خوب این است که لازم نیست زمان اجرا (Runtime) را برای تمام این موارد از صفر بسازید. چارچوب Microsoft Agent Framework شامل یک ابزار کمکی برای ایجنت است و من در حال ساخت یک ایجنت کامل C# با استفاده از آن، به صورت زنده و گام‌به‌گام در یک مجموعه چهار قسمتی به نام «از مدل تا ایجنت: ابزار کمکی Agent Framework، به صورت زنده در C#» هستم.

این مجموعه طی چهار پنج‌شنبه در ماه سپتامبر به طور هم‌زمان در کانال یوتیوب .NET و Microsoft Reactor پخش شد. هر چهار جلسه اکنون به همراه مخزن نمونه کامل C#، اسلایدهای مخاطبان و راهنمای جلسات، به صورت درخواستی (On-demand) در دسترس هستند. بگذارید به شما نشان دهم چه چیزی ساخته‌ایم و چرا این ابزار کمکی همeth چیز را بسیار ساده‌تر می‌کند.

آنچه در طول چهار جلسه می‌سازیم

ما با این مورد شروع می‌کنیم:

    AIAgent agent = chatClient.AsHarnessAgent(new HarnessAgentOptions
{
    ChatOptions = new ChatOptions
    {
        Instructions = instructions,
        Tools = tools
    }
});
  

سپس همان ایجنت را در چهار مرحله توسعه می‌دهیم:

  • به آن ابزارها، جستجوی وب و قابلیت برنامه‌ریزی بدهید.
  • به آن اجازه دهید با فایل‌ها، تأییدها و حافظه ماندگار کار کند.
  • مهارت‌ها، شل، CodeAct و ایجنت‌های پس‌زمینه را اضافه کنید.
  • قابلیت مشاهده، حاکمیت، ارزیابی‌ها و استقرار میزبانی‌شده را اضافه کنید.

این مسیر کامل است: از یک فراخوانی ساده پیرامون یک IChatClient تا یک ایجنت توانمند که می‌توانیم آن را بررسی، ارزیابی، مدیریت کرده و در Microsoft Foundry اجرا کنیم.

ابتدا: ابزار کمکی ایجنت (Agent Harness) چیست؟

یک مدل زبانی می‌تواند متن تولید کند. یک ایجنت به چیز بیشتری نیاز دارد.

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

آن محیط اجرایی پیرامون، همان ابزار کمکی (Harness) است.

ریشه‌ی اصطلاح

تیم Microsoft Agent Framework این مفهوم را در مجموعه عالی Build your own claw and agent harness with Microsoft Agent Framework معرفی کرد. توضیح آن‌ها ساده است: یک «چنگال» (Claw) یک ایجنت به سبک CLI است که بر روی یک ابزار کمکی ساخته شده است. شما مدل، دستورالعمل‌ها و ابزارهای دامنه را فراهم می‌کنید. ابزار کمکی، ماشین‌آلات ایجنت را در اطراف آن‌ها تامین می‌کند.

در دات‌نت، خط اصلی کد این است:

    AIAgent agent = chatClient.AsHarnessAgent(new HarnessAgentOptions
{
    ChatOptions = new ChatOptions
    {
        Instructions = "You are a personal finance education assistant.",
        Tools = [StockTools.GetStockPrice]
    }
});
  

این فراخوانی، یک خط لوله کامل با قابلیت‌هایی مانند موارد زیر را در اختیار ایجنت قرار می‌دهد:

  • فراخوانی خودکار توابع
  • پایداری تاریخچه پس از فراخوانی‌های مدل
  • برنامه‌ریزی با ارائه‌دهندگان مبتنی بر لیست کارهای انجامنی (todo) و حالت ایجنت
  • فشرده‌سازی زمینه (Context compaction)
  • حافظه فایل
  • جستجوی وب هنگامی که سرویس مدل از آن پشتیبانی می‌کند
  • تأیید ابزارها
  • مهارت‌ها
  • ابزار دقیق OpenTelemetry

هر قابلیت قابل تنظیم است. می‌توانید آن را جایگزین کنید، غیرفعال کنید یا ارائه‌دهنده خود را اضافه کنید.

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

ایجنت در حال ساخت ما

در طول این چهار جلسه، ما یک دستیار آموزشی مالی شخصی می‌سازیم.

چرا امور مالی؟ زیرا مرزهای واقع‌گرایانه‌ای را برای بحث در اختیار ما قرار می‌دهد:

  • استعلام قیمت سهام یک فراخوانی ابزاریِ صرفاً خواندنی (read-only) است.
  • خواندن یک سبد سرمایه‌گذاری (پورتفیو) به معنای دسترسی به داده‌های کاربر است.
  • نوشتن یک گزارش، یک فایل را تغییر می‌دهد.
  • ثبت یک معامله شبیه‌سازی‌شده یک اثر جانبی است و نیاز به تأیید دارد.
  • به‌یادسپاری پروفایل ریسک به حافظه‌ای پایدار و مختص کاربر نیاز دارد.
  • محاسبه ارزش سبد سرمایه‌گذاری با استفاده از کد بسیار بهتر از محاسبات مبتنی بر مدل انجام می‌شود.
  • اجرای دستورات پوسته (shell commands) مستلزم محدودسازی و اعمال خط‌مشی است.
  • یک ایجنت مالی در سطح پروداکشن به ردیابی (traced)، حاکمیت و ارزیابی نیاز دارد.

این یک سناریوی آموزشی است

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

کد کامل در مخزن نمونه MafClaw موجود است.

نشست ۱: تبدیل یک مدل به یک ایجنت

در ویدیوی ایجنت خود را بشناسید: یک مهارکننده (Harness) در سه خط سی‌شارپ، کار را با کوچک‌ترین ایجنت کاربردی آغاز کردیم.

ابتدا یک IChatClient پشتیبانی‌شده توسط یک مدل در مایکروسافت فاندری ایجاد کنید:

    IChatClient chatClient =
    new AIProjectClient(new Uri(endpoint), new AzureCliCredential())
        .GetProjectOpenAIClient()
        .GetResponsesClient()
        .AsIChatClient(model);
  

سپس آن را با مهارکننده (harness) بپیچید و یک ابزار سفارشی به آن بدهید:

    AIAgent agent = chatClient.AsHarnessAgent(new HarnessAgentOptions
{
    ChatOptions = new ChatOptions
    {
        Instructions = """
            You are a personal finance education assistant.
            Use get_stock_price for stock prices.
            Use hosted web search for recent market news and cite sources.
            Use the todo list to track multi-step work.
            """,
        Tools = [StockTools.GetStockPrice]
    }
});
  

ابزار سفارشی از جنس C# معمولی است. فریم‌ورک ایجنت، طرح‌واره (schema) ابزار را از امضای تابع و توضیحات آن تولید می‌کند:

    [Description("Gets the illustrative stock price for a ticker symbol.")]
public static string GetStockPriceBySymbol(
    [Description("Stock ticker symbol, e.g. MSFT")] string symbol)
{
    var upper = symbol.Trim().ToUpperInvariant();
    return upper switch
    {
        "MSFT" => "MSFT: 512.34 USD (mock)",
        "NVDA" => "NVDA: 184.72 USD (mock)",
        "AMZN" => "AMZN: 241.18 USD (mock)",
        _ => $"{upper}: not available"
    };
}

public static AIFunction GetStockPrice { get; } =
    AIFunctionFactory.Create(
        GetStockPriceBySymbol,
        "get_stock_price");
  

اکنون تفاوت بین یک برنامه چت و یک ایجنت نمایان می‌شود.

بپرسید:

    What is the price of MSFT?
  

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

سوال بزرگ‌تری بپرسید:

    Review my watchlist and suggest what I should research next.
  

مهارکننده می‌تواند هم‌زمان با کار کردن، یک برنامه بسازد و یک فهرست کارها (todo list) را مدیریت کند. ما برای این نسخه نمایشی، یک موتور برنامه‌ریزی سفارشی ننوشتیم. رفتاری را پیکربندی کردیم که این ایجنت مالی را متعلق به ما می‌کند و مهارکننده، زمان اجرایی برنامه‌ریزی (planning runtime) را فراهم کرد.

تماشای نشست ۱:

ساخت مهارکننده ایجنت هوش مصنوعی خود در سی‌شارپ، سری زنده MafClaw تماشا در یوتیوب

https://www.youtube.com/watch?v=iUs15X1v2w4

نشست ۲: کار ایمن با داده‌های کاربر

یک ایجنت زمانی که بتواند با داده‌های شما کار کند، بسیار کاربردی‌تر می‌شود.

همچنین بسیار خطرناک‌تر می‌شود.

در ویدیوی کار ایمن با داده‌های خود: فایل‌ها، تأییدیه و حافظه، به دستیار مالی دسترسی به یک فایل CSV از پورتفیو دادیم، اما فقط در داخل یک دایرکتوری کاری تأییدشده:

    var workingDirectory =
    Path.Combine(AppContext.BaseDirectory, "working");

AIAgent agent = chatClient.AsHarnessAgent(new HarnessAgentOptions
{
    FileAccessStore =
        new FileSystemAgentFileStore(workingDirectory),

    ChatOptions = new ChatOptions
    {
        Instructions = """
            The user's portfolio is in portfolio.csv.
            Read it before answering portfolio questions.
            Write generated reports under the approved working folder.
            """,
    }
});
  

مدل هیچ‌گونه دسترسی خودسرانه‌ای به سیستم فایل دریافت نمی‌کند. برنامه یک انبار فایل (file store) مستقر در یک پوشه را فراهم می‌کند و مهارکننده، ابزارهای فایل را در آن محدوده ارائه می‌دهد.

این یعنی مسیر صحیح (happy path) بهران‌انداز می‌شود:

    What is in my portfolio?
  

و مسیر ناامن مسدود می‌شود:

    Read C:\some-other-folder\outside-portfolio.csv
  

محدوده (مرز) دوم، تأیید انسانی است.

یک معامله شبیه‌سازی‌شده در ApprovalRequiredAIFunction پیچیده شده است:

    public static AIFunction RequestSimulatedTrade { get; } =
    new ApprovalRequiredAIFunction(
        AIFunctionFactory.Create(
            RequestSimulatedTradeOrder,
            "request_simulated_trade"));
  

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

ما همچنین یک مسیر امن کم‌اصطکاک را پیکربندی کردیم:

    ToolApprovalAgentOptions = new ToolApprovalAgentOptions
{
    AutoApprovalRules =
    [
        FileAccessProvider.ReadOnlyToolsAutoApprovalRule
    ],
},
  

عملیات فایل خواندنی (Read-only) می‌توانند به‌طور خودکار پیش بروند. نوشتن، عملیات‌های تخریبی و معامله شبیه‌سازی‌شده همچنان از مرز تأیید عبور می‌کنند.

این تمایز اهمیت دارد. اگر هر خواندنِ بی‌خطری کاربر را متوقف کند، تأییدیه به سر و صدا (مزاحمت) تبدیل می‌شود. هدف این نیست که کادرهای تأیید بیشتری نشان دهیم. هدف این است که اقدامات پیامددار را قابل‌مشاهده کنیم.

سوالی از سوی مخاطبان به یک نمونه جدید تبدیل شد

در جریان پرسش و پاسخ زنده، شخصی پرسید:

«اگر کاربر به درخواست تأیید پاسخ ندهد چه اتفاقی می‌افتد؟»

پرسش عالی‌ای است.

سکوت به معنای رضایت نیست

یک روند تأیید که تا ابد منتظر بماند، کامل نیست. بنابراین، پس از جلسه، نمونه جدیدی با یک سیاست تأیید محدود ساختم: مهلت پنج‌ثانیه‌ای برای هر تلاش، حداکثر پنج تلاش، تلاش مجدد برای ورودی‌های نامعتبر یا گم‌شده، تأیید فوری برای y، رد فوری برای n، رد خودکار پس از آخرین تلاش، رد پایدار برای بقیه پرامپت کاربر، و محدودیتی برای دوره‌های تکراری تأیید از سوی مدل.

این سیاست با یک پیکربندی کوچک آغاز می‌شود:

    const int maxApprovalAttempts = 5;
var approvalTimeout = TimeSpan.FromSeconds(5);

var approvalPolicy = new TimedApprovalPolicy(
    maxApprovalAttempts,
    approvalTimeout);
  

می‌توانید پیاده‌سازی کامل را در نمونه ۲۲: تلاش‌های مجدد و زمان‌های انتظار برای تأیید پیدا کنید.

بخش پایانی جلسه ۲ درباره حافظه بود. ما حافظه JSON محلی و متعلق به اپلیکیشن را با حافظه مدیریت‌شده Foundry مقایسه کردیم و درباره این بحث کردیم که اینکه مدل بگوید «آن را ذخیره کردم»، مدرکی بر ماندگار شدن چیزی نیست. اپلیکیشن به یک نتیجه ذخیره‌سازی واقعی، یک محدوده (Scope) و راهی برای نمایش خطاها نیاز دارد.

تماشای جلسه ۲:

ساخت ابزار کمکی ایجنت هوش مصنوعی خودتان در سی‌شارپ، سری زنده MafClaw تماشا در یوتیوب

https://www.youtube.com/watch?v=V58coa0llUo

جلسه ۳: مهارت‌ها، شل (Shell)، CodeAct و ایجنت‌های پس‌زمینه

دو جلسه اول ایجنت را مفید و ایمن می‌کنند. جلسه سوم آن را توانمندتر می‌سازد.

در ویدئوی مقیاس‌دهی به پنجه: مهارت‌ها، شل، CodeAct و ایجنت‌های پس‌زمینه، چهار قابلیت بدون تبدیل کردن پرامپت سیستم به یک دفترچه راهنمای ۴۰۰ صفحه‌ای اضافه کردیم. می‌توانید هرکدام را به طور جداگانه امتحان کنید:

  • مهارت‌ها به ایجنت اجازه می‌دهند یک مهارت را کشف کرده و در صورت نیاز، دستورالعمل‌های آن را بارگذاری کند. نیازی نیست که تمام قوانین ارزشیابی را در پرامپت اصلی قرار دهید.
  • شل به آن اجازه می‌دهد با دستورات درون یک دایرکتوری کاری محدود، با سیاست دستوری، زمان‌های انتظار و تأیید صریح کار کند.
  • CodeAct به آن اجازه می‌دهد ارزش سبد سهام شبیه‌سازی‌شده را با پایتون در یک ریز ماشین مجازی Hyperlight محاسبه کند، به جای اینکه از مدل بخواهد حساب‌کتاب را به صورت متن انجام دهد.
  • ایجنت‌های پس‌زمینه به آن اجازه می‌دهند وظایف پژوهشی مستقل را واگذار کرده و نتایج را جمع‌آوری کند.

محدودسازی، فراتر از صرفاً تأیید

شل و اجرای کد قابلیت‌های قدرتمندی هستند. محدودسازی، سیاست و تأیید تجربه را بهبود می‌بخشند، اما جایگزینی برای ایزوله‌سازی نیستند. این مرز همچنان اهمیت دارد.

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

برای کارهای پس‌زمینه، با یک ایجنت پژوهشی متمرکز شروع کنید و آن را به ابزار کمکی تحویل دهید:

    AIAgent research = chatClient.AsAIAgent(
    name: "TickerResearchAgent",
    description: "Searches the web for recent news about a single stock ticker.",
    instructions: "Research one ticker and return facts with sources.",
    tools: [new HostedWebSearchTool()]);

AIAgent agent = chatClient.AsHarnessAgent(new HarnessAgentOptions
{
    BackgroundAgents = [research],
});
  

اکنون ایجنت اصلی می‌تواند بدون اینکه ابتدا نیاز باشد ما یک صف و جمع‌آوری‌کننده نتیجه بنویسیم، پژوهش درباره نمادهای بورسی (Ticker) را واگذار کند. راهنما و نمونه‌های جلسه ۳ این موضوع را با تیم‌های متخصص، مهلت‌های زمانی و گزارشی که منتظر تأیید انسان می‌ماند، بیشتر پیش می‌برد.

تماشای جلسه ۳:

ساخت ابزار کمکی ایجنت هوش مصنوعی خودتان در سی‌شارپ، سری زنده MafClaw تماشا در یوتیوب

https://www.youtube.com/watch?v=rMhX0-oE4aY

جلسه ۴: آماده‌سازی ایجنت برای محیط تولید (Production-ready)

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

این همان لحظه‌ای است که کسی می‌پرسد:

«بسیار خب، کار ایجنت تمام شد… حالا چطور این چیز را دیپلوی (استقرار) کنم؟»

بله، ما دوباره به همان سوال پست قبلی‌ام برگشتیم 😃.

در ویدئوی آماده برای تولید: قابلیت مشاهده (Observability)، حاکمیت (Governance) و استقرار (Deployment)، چهار سوال را بررسی کردیم:

  • قابلیت مشاهده: ایجنت در واقعیت چه کاری انجام داد؟ فراخوانی‌های مدل و ابزار آن را با OpenTelemetry دنبال کنید.
  • حاکمیت: اجازه انجام چه اقداماتی به او داده شود؟ مرزهای تأیید را حفظ کنید و در صورت تمایل Microsoft Purview را متصل کنید.
  • ارزیابی‌ها: فراتر از اینکه «در نسخه نمایشی خوب به نظر می‌رسید»، چگونه کیفیت را بررسی کنیم؟
  • استقرار: چگونه ایجنت را بدون انتقال تک‌تک قابلیت‌های محلی به محیط تولید، روی HTTP قرار دهیم؟

انتخاب کنید چه چیزی را دیپلوی می‌کنید

سیستم فایل محلی و دسترسی به شل ممکن است روی دستگاه شما مفید باشند. این بدان معنا نیست که یک کانتینر میزبانی‌شده مشترک باید آن‌ها را به ارث ببرد. قابلیت‌هایی را که هر میزبان نیاز دارد انتخاب کنید.

ابتدا، کار را قابل‌مشاهده کنید. ما مدل و ابزار کمکی را با OpenTelemetry پوشش می‌دهیم و محتوای حساس را خارج از تریس‌ها (Traces) نگه می‌داریم:

    using var observedModel = model.AsBuilder()
    .UseOpenTelemetry(
        sourceName: TraceConsole.SourceName,
        configure: telemetry => telemetry.EnableSensitiveData = false)
    .Build();

var harness = observedModel.AsHarnessAgent(options);

var agent = harness.AsBuilder()
    .UseOpenTelemetry(
        TraceConsole.SourceName,
        telemetry => telemetry.EnableSensitiveData = false)
    .Build();
  

اکنون به‌جای حدس زدن اتفاقات، می‌توانیم فراخوانی‌های مدل و ابزار ایجنت را دنبال کنیم. یک نمونه مکمل، تریس‌ها، متریک‌ها و لاگ‌ها را به داشبورد محلی Aspire ارسال می‌کند. اجرای آزمون‌ها (Fixtures) به طور جداگانه از اجراهای مدل زنده Foundry برچسب‌گذاری می‌شوند.

سپس با میزبانی در مقیاس کوچک شروع می‌کنیم: یک ایجنت خوشامدگویی، نه کل دستیار مالی. چارچوب ایجنت (Agent Framework) پروتکل Responses را مدیریت می‌کند:

    var builder = WebApplication.CreateBuilder();
builder.Services.AddFoundryResponses(agent);

await using var app = builder.Build();
app.MapFoundryResponses();
await app.RunAsync();
  

این کار یک نقطه پایانی (Endpoint) HTTP محلی در اختیار ما می‌گذارد. این موضوع استقرار ابری را اثبات نمی‌کند: هویت، مجوزها، لایسنسینگ Purview و ارزیابی راه دور Foundry همچنان به راه‌اندازی و بررسی‌های خاص خود نیاز دارند.

راهنما و نمونه‌های جلسه ۴ همچنین به سوالات جلسه ۳ درباره ابزارهای خارجی MCP، ذخیره و بازیابی یک AgentSession و اجرا با Foundry Local پاسخ می‌دهند. ما پیش از گرد هم آوردن این بخش‌ها در اپلیکیشن مالی، آن‌ها را به‌صورت جداگانه آزمایش می‌کنیم.

برای گام بعدی، پست قبلی من با عنوان «سه خط کد سی‌شارپ» مدل میزبانی را معرفی می‌کند. این ابزار (Claw) قابلیت‌های بیشتری دارد، بنابراین پیش از استقرار آن باید تصمیمات بیشتری بگیریم.

مشاهده جلسه ۴:

ساخت هارنس ایجنت هوش مصنوعی خود در سی‌شارپ، سری زنده MafClaw تماشا در یوتیوب

https://www.youtube.com/watch?v=dCIBza-WxUc

چرا باید با هارنس (Harness) شروع کنید؟

شما می‌توانید تک‌تک این بخش‌ها را خودتان بسازید.

شما می‌توانید یک حلقه ابزار بنویسید، تاریخچه را پس از هر فراخوانی سرویس سریالایز کنید، یک برنامه (Plan) را حفظ کنید، کانتکست را فشرده کنید، یک لایه حافظه بسازید، یک پروتکل تاییدیه طراحی کنید، مهارت‌ها را بارگذاری کنید، کارگران پس‌زمینه را مدیریت کنید و کل پایپ‌لاین را ابزارگذاری (Instrument) کنید.

گاهی اوقات به آن سطح از کنترل نیاز دارید.

اما بیشتر تیم‌ها ترجیح می‌دهند وقت خود را روی رفتار دامنه (Domain Behavior) صرف کنند که ایجنت را ارزشمند می‌سازد:

  • چه ابزارهایی باید داشته باشد؟
  • به چه داده‌هایی می‌تواند دسترسی داشته باشد؟
  • کدام عملیات نیازمند تاییدیه هستند؟
  • چه چیزی را باید به خاطر بسپارد؟
  • چه مهارت‌هایی را باید بارگذاری کند؟
  • کدام وظایف می‌توانند به‌صورت همزمان اجرا شوند؟
  • چه سیاست‌هایی اعمال می‌شوند؟
  • چگونه ارزیابی کنیم که آیا کار می‌کند یا خیر؟

هارنس یک خانه قابل‌ترکیب (Composable) برای این تصمیمات فراهم می‌کند.

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

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

تماشای مجموعه کامل

وبلاگ فریمورک ایجنت مایکروسافت نسخه کامل مکتوب، دات‌نت و پایتون این سفر را ارائه می‌دهد:

  • ابزار و هارنس ایجنت خود را با فریمورک ایجنت مایکروسافت بسازید
  • بخش ۱: آشنایی با هارنس و ابزار ایجنت شما
  • بخش ۲: کار با داده‌های خود، به‌صورت ایمن
  • بخش ۳: مقیاس‌بندی ابزار
  • بخش ۴: آماده‌سازی ابزار برای محیط تولید

در این مجموعه، ما نسخه دات‌نت را قابلیت به قابلیت می‌سازیم. هر چهار ضبط در صورت درخواست در دسترس هستند:

  • آشنایی با ابزار شما: یک هارنس در سه خط کد سی‌شارپ
  • کار با داده‌های خود، به‌صورت ایمن: فایل‌ها، تاییدیه و حافظه
  • مقیاس‌بندی ابزار: مهارت‌ها، شل، CodeAct و ایجنت‌های پس‌زمینه
  • آماده برای تولید: قابلیت مشاهده، حاکمیت و استقرار

سوالات خود را بیاورید. نمونه زمان‌پایان (Timeout) تاییدیه به این دلیل وجود دارد که شخصی دقیقاً همین کار را انجام داده است.

بیشتر بدانید

  • مقدمه مجموعه: از مدل تا ایجنت
  • صفحه مجموعه مایکروسافت ری‌اکتور
  • کانال یوتیوب دات‌نت
  • جلسه ۱: آشنایی با ابزار شما: یک هارنس در سه خط کد سی‌شارپ
  • جلسه ۲: کار با داده‌های خود، به صورت ایمن: فایل‌ها، تاییده‌ها و حافظه
  • جلسه ۳: مقیاس‌بندی کلاو (Claw): مهارت‌ها، شل، CodeAct و عوامل پس‌زمینه
  • جلسه ۴: آماده برای تولید: قابلیت مشاهده، حاکمیت و استقرار

کدنویسی شاد و لذت‌بخشی داشته باشید!

برونو

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

منبع: https://devblogs.microsoft.com/dotnet/build-your-own-ai-agent-harness-in-csharp-the-maf-claw-live-series/