یادداشت پژوهشی
تغییر موضعی کد با مدلهای مولد
چگونه ضمن حفظ آزادی کافی برای اعمال تغییر درخواستی کد بهوسیلهٔ مدل مولد، از بازنویسی غیرضروری کل تابع جلوگیری کنیم.
پاسخ مستقیم
یک مدل مولد چگونه میتواند بدون بازنویسی کل تابع، کد را اصلاح کند؟
پیش از تولید، نواحی حفاظتشده و ویرایشپذیر را تعریف کنید؛ بازنمایی حفاظتشده را بازاستفاده یا مقید کنید، فقط تغییرات نامزد را تولید کنید و خروجیهایی را که کُد حفاظتشده را تغییر میدهند یا در بررسیهای ویژهٔ وظیفه ناموفقاند، رد کنید. موضعیبودن و موفقیت وظیفه باید با هم سنجیده شوند.
چرا این تمایز اهمیت دارد
سازوکار و تضمین ادعاشده باید بر یک مرز مشاهدهپذیر واحد ناظر باشند.
تغییر موضعی کد مسئلهای در حوزهٔ ویرایش است، نه صرفاً یک پرامپت کوتاهتر برای تولید کد. ورودی از پیش حاوی مصنوعی ارزشمند و شایستهٔ حفظ است؛ ازاینرو، روش به مرز حفظِ صریحی میان ناحیهٔ مجاز به تغییر و ویژگیهایی نیاز دارد که باید پایدار بمانند.
مرز میتواند یک بازه از منبع، گره نحوی، امضای API، رفتار آزمون، قرارداد وابستگی یا جایگاه نهفتهٔ آموختهشده باشد. این انتخابها جایگزین یکدیگر نیستند: هرکدام از ویژگی مشاهدهپذیر متفاوتی حفاظت میکنند و به مرحلهٔ راستیآزمایی متناظر نیاز دارند.
رویهای عملی
قرارداد حفظ را بیان کنید
ناحیهٔ قابلویرایش و متن، ساختار، رابط یا رفتاری را که باید دقیقاً بدون تغییر بماند مشخص کنید.
محدودترین سطح کنترلِ سودمند را انتخاب کنید
بازههای بدون تغییر کد مبدأ را دوباره به کار بگیرید، از پُرکردن جای خالی یا رمزگشایی ویرایشمحور استفاده کنید، قیود صوری را اعمال کنید، یا موقعیتهای نهفتهٔ منتخب را متناسب با ویژگی مورد نیاز قفل کنید.
فقط در محل مجاز به تغییر، تولید کنید
درون ناحیهٔ قابلویرایش آزادی کافی برای حل مسئله باقی بگذارید؛ کپیکردن تمام ورودی اقدامی موضعی است، اما هیچ پیشرفتی ایجاد نمیکند.
موضعیبودن و موفقیت را همزمان راستیآزمایی کنید
نامزدهایی را رد کنید که نواحی حفاظتشده را تغییر میدهند، در تجزیه یا کامپایل شکست میخورند، ناورداهای ساختاری را نقض میکنند یا تغییر درخواستی را برآورده نمیسازند.
شواهد لازم
اعتبار هر ادعا تنها به اندازهٔ ویژگیای است که پس از تولید یا رمزگشایی سنجیده شده است.
- اختلاف بیرون از ناحیه یا سنجهٔ مستقیم دیگری برای پایداری ناحیهٔ حفاظتشده.
- موفقیت وظیفه درون ناحیهٔ ویرایشپذیر.
- بنا بر مورد: تجزیه، کامپایل، آزمونها، بررسیهای ایستا یا ناورداهای ویژهٔ وظیفه.
- نرخ تغییر در ناحیهٔ ویرایشپذیر، تا رونویسی بهاشتباه کنترل تلقی نشود.
- یکتایی نامزدها و تغییرپذیری در اجراهای مکرر، تا موضعیبودن با فروپاشی مُد اشتباه گرفته نشود.
مطالعهٔ پیوندشده چه چیزی گزارش میکند
- آزمایش پیوندشده، توابع Python با 64 توکن را به جایگاههای گسستهٔ سلسلهمراتبی فشرده میکند و جایگاههای نهفتهٔ منتخب را تحت قیود جزئی بازتولید میکند.
- قفلکردن چهار کد سطحبالا نرخ تجزیه را از 0.453 به 0.591 افزایش داد؛ در همین حال، موقعیتهای قفلنشده با نرخ 0.936 تغییر کردند و یکتایی نمونههای شرطی در 0.998 باقی ماند.
- این اندازهگیریها موازنهٔ پایداری–آزادی را در سطحی بالاتر از توکن آشکار میکنند؛ اما حفظ دقیق گسترهٔ منبع، AST، معنا یا رفتار را اثبات نمیکنند.
مرز دامنه
- کُد نهفتهٔ قفلشده، خودبهخود گره AST، بازهٔ حفاظتشدهٔ متن مبدأ یا ناوردای صوری نیست.
- نرخ تجزیه خوشساختی نحوی را اثبات میکند، نه درستی عملکردی یا موفقیت ترمیم را.
- شواهد گزارششده از توابع کوتاه و پیشپردازششدهٔ Python به دست آمدهاند و رفتار در مقیاس مخزن را اثبات نمیکنند.
منابع اصلی و نزدیک
برای روشهای اصلی، اندازهگیریها و محدودیتهای تصریحشده به مقالات پیوندشده مراجعه کنید.
- Inspectable Control for Structure-Preserving Software Regeneration
مقالهٔ اصلی و آزمایش کرانمندِ نهفتهٔ سلسلهمراتبی.
- EfficientEdit: Accelerating Code Editing via Edit-Oriented Speculative Decoding
رمزگشایی ویرایشمحور که نواحی تغییریافتهنشدهٔ مبدأ را دوباره به کار میگیرد.
- PAFT: Preservation Aware Fine-Tuning for Minimal-Edit Program Repair
حفظ و کمینهبودن تغییر را در آموزش تعمیر برنامه بهصراحت صورتبندی میکند.