عنوان:

‫مدیریت کارهای چندفایلی با تعیین مرزهای مشخص در Copilot Agent Mode


نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۵/۲۹ ۱۳:۰۰
آدرس: www.dntips.ir
قابلیت Agent Mode در GitHub Copilot یکی از تحولات اساسی در تجربه توسعه است؛ این حالت می‌تواند به صورت خودکار مراحل کار را برنامه‌ریزی کند، فایل‌های مختلف را ویرایش نماید، دستورات ترمینال (مانند dotnet test و dotnet build) را اجرا کند و در صورت بروز خطا، خودکار به تصحیح کدها بپردازد. با این حال، قدرت بالای Agent Mode در صورت عدم تعیین مرز، می‌تواند به یک ضدالگو تبدیل شود.
دادن پرامپت‌های بی‌پایان و نامشخص مانند «معماری کل پروژه را بهبود بده»، وظیفه مهندسی نیست؛ بلکه یک هدف مبهم است که هوش مصنوعی را به دستکاری بی‌هدف صدها فایل و در نهایت خراب کردن ساختار پروژه سوق می‌دهد. قاعده طلایی در استفاده از Agent Mode این است: برای عامل هوشمند حصار بکشید (Give agents a fence).

چرا وظایف چندفایلی باید مرزبندی‌شده (Bounded) باشند؟

کارهای ایده‌آل برای حالت عامل ویژگی‌های مشخصی دارند:
  • چندفایلی اما متمرکز: تسک شامل ۳ تا ۶ فایل مرتبط است (مثلاً DTO، کلاس اعتبارسنجی، کنترلر و فایل‌های تست).
  • چرخه تکرار و آزمون (Iterative Loop): فرآیند نیاز به ایجاد کد، اجرای تست در ترمینال و اصلاح خطاها دارد.
  • عدم نشت به بخش‌های نامرتبط: تغییرات نباید فراتر از دامنه ماژول تعیین‌شده حرکت کنند.

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

نمونه پرامپت استاندارد برای افزودن یک قابلیت با دامنه مشخص در اکوسیستم دات‌نت:
برای اندپوینت CreateOrder فرآیند اعتبارسنجی درخواست (Request Validation) را با شرایط زیر پیاده‌سازی کن:
الزامات اجرایی:
۱. بررسی قراردادهای موجود: فایل‌های پوشه Validators/ را بررسی کن تا از ساختار جاری FluentValidation الگوبرداری شود.
۲. پیاده‌سازی اعتبارسنجی: کلاس CreateOrderRequestValidator را برای اعتبارسنجی مدل CreateOrderRequest اضافه کن (بررسی مقادیر مثبت، نامعتبر نبودن شناسه‌ها و عدم تهی بودن آیتم‌ها).
۳. تست‌نویسی: بر اساس ساختار تست‌های موجود در پروژه MyApp.UnitTests، تست‌های اعتبارسنجی مربوطه را بنویس.
۴. اجرا و اعتبارسنجی خودکار: تست‌های مربوط به این اعتبارسنجی را با دستور dotnet test اجرا کن و در صورت شکست، کدها را اصلاح کن تا تمام تست‌ها پاس شوند.
۵. مرزهای تغییر (Fence): هیچ فایل نامرتبطی را خارج از ماژول Orders و پروژه تست آن ویرایش نکن.
۶. گزارش پایانی: در پایان، خلاصه فایل‌های ایجادشده و تغییریافته را فهرست کن.

توالی عملیاتی Copilot Agent در یک سناریوی Bounded

وقتی مرزها مشخص باشد، عامل هوشمند توالی زیر را به صورت خودکار طی می‌کند:
[تحلیل الگوها در Validators/] 
       │
       ▼
[ایجاد CreateOrderRequestValidator.cs] 
       │
       ▼
[ثبت یا ارجاع در پایپ‌لاین کنترلر] 
       │
       ▼
[نگارش CreateOrderValidatorTests.cs] 
       │
       ▼
[اجرای ترمینال: dotnet test --filter CreateOrderValidatorTests] 
       │
       ▼
[اصلاح کدهای تست یا ولیدیتور در صورت شکست] 
       │
       ▼
[گزارش موفقیت و فهرست فایل‌های تغییریافته]

نمونه کد تولیدشده توسط Agent در چارچوب الگوهای پروژه

کلاس اعتبارسنجی استاندارد با FluentValidation:
namespace MyApp.Application.Orders.Validators;

public sealed class CreateOrderRequestValidator : AbstractValidator<CreateOrderRequest>
{
    public CreateOrderRequestValidator()
    {
        RuleFor(x => x.CustomerId)
            .NotEmpty()
            .WithMessage("CustomerId is required.");

        RuleFor(x => x.Items)
            .NotEmpty()
            .WithMessage("The order must contain at least one item.");

        RuleForEach(x => x.Items).ChildRules(items =>
        {
            items.RuleFor(i => i.ProductId).NotEmpty();
            items.RuleFor(i => i.Quantity).GreaterThan(0);
            items.RuleFor(i => i.UnitPrice).GreaterThan(0m);
        });
    }
}
و تست‌های متناظر آن با فریم‌ورک xUnit:
namespace MyApp.UnitTests.Validators;

public sealed class CreateOrderRequestValidatorTests
{
    private readonly CreateOrderRequestValidator _validator = new();

    [Fact]
    public void Should_Have_Error_When_Items_Are_Empty()
    {
        var request = new CreateOrderRequest(Guid.NewGuid(), []);
        var result = _validator.TestValidate(request);
        result.ShouldHaveValidationErrorFor(x => x.Items);
    }
}

چک‌لیست تعیین مرز (Fence) برای Agent Mode

قبل از اجرای پرامپت در حالت Agent، سه سؤال زیر را بررسی کنید:

  • آیا نقطه پایان کار مشخص است؟ (مثلاً «پاس شدن تست‌های واحد جدید» یک شرط پایان مشخص است).
  • آیا حوزه فایل‌ها محدود شده است؟ (صراحتاً به مدل بگویید چه دایرکتوری‌هایی مجاز به تغییر هستند).
  • آیا معیار سنجش موفقیت در دسترس Agent است؟ (دستورات CLI مانند dotnet test یا dotnet build که هوش مصنوعی بتواند خودش نتیجه را بررسی و در صورت نیاز تکرار کند).

قاعده کلیدی: از Agent Mode برای کارهای چندمرحله‌ای، قابل‌سنجش و دارای مرزهای مشخص استفاده کنید؛ تعریف حصار پیرامون حوزه تغییرات، ضامن حفظ ثبات و پایداری کل سیستم است.