Yapay zekâ, programın tamamını yeniden üretmeden kodu nasıl düzenleyebilir?

Üretici modellerle yerelleştirilmiş kod değişikliğine yönelik uygulamalı bir araştırma rehberi: nelerin sabit kalması, nelerin değişebilmesi gerektiği ve bir dönüşümü yapıyı koruyan olarak nitelendirmeden önce hangi kanıtların gerektiği.

Bu kılavuzu paylaşPaylaş

Sorunun gerçekte ne olduğu

Kod düzenleme, yalnızca daha kısa bir istemle kod üretmekten ibaret değildir. Bir düzenleyiciye mevcut bir yapıt, amaçlanan bir değişiklik ve örtük bir koruma sözleşmesi verilir. Dolayısıyla temel soru iki yönlüdür: hangi bölge değişebilir ve geri kalan bölümün hangi özellikleri kararlı kalmalıdır?

Bu kılavuz, yapay zekâ destekli yazılım düzenlemeye yeni başlayan teknik bilgi sahibi okurlara yöneliktir. Yerel düzenlemeye ilişkin sezgisel düşünceyi; sözdizimsel, yapısal, anlamsal ve işlevsel korumaya dair daha güçlü iddialardan ayırır.

Temel fikir

Sınırları belirlenmiş bir düzenleyici, yalnızca bir üretim hedefine değil, açıkça tanımlanmış bir koruma sınırına da ihtiyaç duyar.

Neler sabit kalmalıdır?

Bu; bir metin aralığı, dil bilgisi, API imzası, AST bölgesi, test davranışı, bağımlılık sözleşmesi veya öğrenilmiş kaba bir gösterim olabilir. Her seçenek farklı bir kararlılık anlayışını korur.

Neler değişebilir?

Düzenlenebilir bölge, istenen görevi çözmeye yetecek serbestliğe sahip olmalıdır. Her şeyi kopyalayan bir denetim yöntemi kararlı fakat yararsızdır; her şeyi yeniden yazan bir yöntem ise yerellik olmaksızın serbestlik sunar.

Sezgisel bir model: bir odayı yenileyin, binayı koruyun

Taşıyıcı yapıyı, tesisat bağlantılarını ve komşu odaları bozmadan tek bir odayı yenilediğinizi düşünün. Tam yeniden üretim, evi sözlü bir betimlemeden hareketle baştan inşa etmeye benzer. Yerelleştirilmiş düzenleme ise korunacak yapıyı işaretler, sınırları belirli bir çalışma alanı açar, değişikliği gerçekleştirir ve sonucu kabul etmeden önce inceler.

Benzetmenin geçersizleştiği nokta. Öğrenilmiş bir gizil kod, doğrulanmış bir mimari plan değildir. Kaba ölçekli bir kodu sabitlemek, ölçülen yapısal kararlılığı artırabilir; ancak belirli bir AST düğümünün, davranışın veya arayüzün değişmeden kalacağını garanti etmez.

Kısmi yeniden üretime daha kesin bir bakış

Bir kodlayıcının programı eşlemesini sağlayın x yapılandırılmış bir gizil gösterime z. Bir koruma maskesi şu konumları seçer: L sabit tutulmak üzere. Üreteç, yalnızca tamamlayıcı konumlardan örnekleme yaparken şunu zorunlu kılar: z'ₗ = zₗ kilitli her konum için. Ardından bir kod çözücü, tamamlanmış temsili eşler: z' yeniden kaynak koda.

Bu mekanizma, belirteçlerin üzerinde incelenebilir bir denetim yüzeyi oluşturur. Bunun anlamı yine de deneysel olarak ortaya konmalıdır: araştırmacılar, kilitli konumların kod çözme sonrasında neyi koruduğunu ve düzenlenebilir konumların yeterli serbestliği sürdürüp sürdürmediğini sınamalıdır.

Dört aşamalı bir düzenleme iş akışı

  1. Sınırı belirleyin

    Korunacak bölgeleri veya özellikleri belirleyin ve amaçlanan değişikliği tanımlayın.

  2. Yapıtı temsil edin

    Metin, sözdizimi, erişim bağlamı ya da öğrenilmiş kaba ve ince kodları kullanın.

  3. Seçici biçimde yeniden üretin

    Seçili kısıtları koruyarak yalnızca düzenlenebilir konumlardan örnekleme yapın.

  4. Kabul etmeden önce doğrulayın

    Yerelliği, sözdizimini, yapıyı, davranışı ve istenmeyen yan etkileri ölçün.

Kod düzenleme, program onarımı ve kısıtlı üretim aynı görev değildir

YaklaşımBirincil amaçTipik koruma mekanizmasıNelerin hâlâ doğrulanması gerekir?
Tam kod üretimiEksiksiz bir yapıt üretinİstem ve bağlamİstenen değişikliğin dışında kalan her şey
Otomatik program onarımıTanısı konmuş bir hatayı giderinHata yerelleştirme, testler, şablonlar ya da yamalarMevcut testlerin ötesinde doğruluk ve yamanın asgari kapsamda olması
Boşluk doldurma veya düzenleme modelleriSeçili metin bölgelerini değiştirinGörünür ön ek, son ek, fark veya düzenleme bağlamıAmaçlanmayan yapısal ve davranışsal değişiklikler
Dil bilgisiyle kısıtlı kod çözmeÇıktıları biçimsel bir dilin sınırları içinde tutunDil bilgisi açısından geçerli kod çözme durumlarıProgram anlamı, görev doğruluğu ve yerellik
Hiyerarşik gizil denetimÖğrenilmiş seçili konumları yeniden üretinKilitlenmiş kaba veya ince taneli gizil kodlarBu kodların kod çözme sonrasında neyi koruduğu

Yerellik ve yapının korunması nasıl ölçülür?

Bölge dışındaki değişim
İstenen düzenlemenin dışındaki farkı ölçün. Düşük bir değer yerelliği destekler; ancak yalnızca kopyalama, başarı anlamına gelmez.
Düzenlenebilir bölge serbestliği
Kilidi açılmış bölgenin gerçekten değişip değişmediğini ve birden çok geçerli adayın hâlâ mümkün olup olmadığını ölçün.
Sözdizimi ve dilbilgisi
Ayrıştırma oranı veya dil bilgisi geçerliliği, hatalı biçimlendirilmiş çıktıyı yakalar; ancak tek başına davranış hakkında hiçbir şey söylemez.
Yapısal değişmezler
Görevin sabit kalmasını şart koştuğu imzaları, AST aralıklarını, denetim akışını, veri akışını, içe aktarımları veya API'leri karşılaştırın.
İşlevsel kanıt
Bu yapıtlar mevcut olduğunda testleri, statik denetimleri, derlemeyi ve göreve özgü davranışsal değerlendirmeyi çalıştırın.
Çeşitlilik ve belirsizlik
Kararlılığın kip çökmesiyle karıştırılmaması için adayların benzersizliğini ve yinelenen çalıştırmalardaki değişkenliği raporlayın.

Düzenleme görevine hangi denetim yüzeyi uygundur?

“Fonksiyonun tamamını yeniden yazma” bir gereksinimdir, eksiksiz bir yöntem değildir. Önce öngörülebilir olması gereken sonucu belirleyin; ardından buna uygun bir denetim yüzeyi ve kanıt seçin.

Gerekli güvenceDaha iyi eşleştirilmiş denetim yüzeyiTalep edilmesi gereken kanıt
Yapay zekâ destekli, davranışı koruyan yeniden düzenlemeBir LLM'nin dönüşümü belirlemesini veya önermesini sağlayın; ardından mümkün olduğunda dönüşümü güvenilir bir yeniden düzenleme motoruyla yürütün. Bkz. RefactoringMirror.Derleme, testler, statik denetimler ve yeniden düzenleme tespiti. SWE-Refactor bu kontrolleri depo düzeyinde açık hâle getirir.
İşlevin tamamını yeniden yazmadan yerelleştirilmiş kod değişikliğiDeğişmemiş kaynak bölümlerini yeniden kullanın ve yalnızca aday düzenleme bölgelerini üretin; örneğin EfficientEdit.Bölge dışındaki fark, görev başarısı, kabul edilen belirteçlerin yeniden kullanımı ve dışarıda bırakılan bağlamın dosyalar arası değişikliklerin gözden kaçmasına yol açıp açmadığı.
Yazılım mühendisliği için kısıtlı kod üretimiKod çözme sırasında, aşağıdaki örnekte olduğu gibi biçimsel bir özelliği zorunlu kılın: dil bilgisiyle kısıtlı difüzyon; ya da geçerli önekler için denetim noktaları oluşturup yalnızca sorumlu bölgeye geri dönebilir; örneğin: Hydra.Dil bilgisi, derleyici ya da tür denetleyicisi başarısının yanı sıra işlevsel testler, yerellik, onarım gecikmesi ve yeniden üretilen geçerli kod miktarı.
Yerellik–çeşitlilik dengesiyle seçici Python işlevi yeniden üretimiSeçilen kaba veya ince taneli gizil konumları kilitleyin ve yalnızca geri kalanından örnekleme yapın.Çözülmüş çıktıda yerellik, sözdizimi, yapısal değişmezler, düzenleme serbestliği, çeşitlilik ve belirsizlik. Gizil kilitleme tek başına yeniden düzenleme garantisi değildir.
Açık bir korunum sözleşmesi altında öngörülebilir kod üretimiÜretimden önce gözlemlenebilir korunan özellikleri ve geçti/kaldı denetimlerini tanımlayın; ardından bunları uygulayabilen veya görünür kılabilen en dar mekanizmayı seçin.Kod çözme sonrasında tam olarak bu özellikleri ölçün ve yinelenen çalıştırmalar boyunca kabul, ret ve başarısızlık oranlarını bildirin. Yalnızca deterministik örnekleme, korunum güvencesi değildir.

Bu rehberin yanıtladığı araştırma soruları

Bu kısa yanıtlar, kılavuz boyunca kullanılan iddia ve kanıt sınırlarını tanımlar.

  1. Üretici bir model, işlevin tamamını yeniden yazmadan kodu nasıl değiştirebilir?

    Üretimden önce düzenleme sınırını tanımlayın, sınırın dışındaki kaynağı koruyun veya yeniden kullanın, yalnızca aday değişiklikleri üretin ve görevi başaramayan ya da korunan bölgeleri değiştiren çıktıları reddedin. Hiyerarşik gizil kilitleme deneysel bir denetim yüzeyidir, ancak özdeş kaynak aralıklarını garanti etmez. Yerelleştirilmiş düzenleme denetim yüzeylerini karşılaştırın.

  2. Bir kod düzenlemesinin yalnızca sözdizimsel açıdan geçerli değil, yerel olduğunu hangi kanıt gösterir?

    İstenen bölgenin dışındaki farkı; görev başarısı, düzenlenebilir bölgedeki değişim, yapısal değişmezler, testler veya statik denetimler ve yinelenen çalıştırmalar arasındaki değişkenlikle birlikte ölçün. Ayrıştırma oranı tek başına yalnızca sözdizimsel iyi biçimliliği ortaya koyar. Yerellik kanıtı denetim listesini inceleyin.

  3. Kod düzenleme yerelliği ile üretim çeşitliliği arasında nasıl denge kurulmalıdır?

    Korunan bölgenin kararlılığını, düzenlenebilir bölgedeki serbestlik ve aday benzersizliğiyle birlikte raporlayın. Girdiyi kopyalamak, görevde hiçbir ilerleme sağlamadan kararlılığı en üst düzeye çıkarabilir; kısıtsız yeniden yazım ise yerelliği yok ederken değişimi en üst düzeye çıkarabilir. Sınırları belirli kararlılık–serbestlik kanıtını inceleyin.

  4. Yerelleştirilmiş kod düzenleme, kısıtlı üretim ve program onarımı birbirinden nasıl ayrılır?

    Yerelleştirilmiş düzenleme, nelerin değişmeden kalması gerektiğini öne çıkarır; kısıtlı üretim, dil bilgisine üyelik gibi biçimsel bir çıktı özelliğini zorunlu kılar; program onarımı ise değişikliğin bir hata veya görev belirtimini karşılamasını gerektirir. Sözdizimi tek başına anlamsal eşdeğerliği, işlevsel doğruluğu, görev başarısını veya yerelliği kanıtlamaz. Üç amacı karşılaştırın.

  5. Bir Python işlevinin seçili bölümleri, geri kalanı kararlı tutularak nasıl yeniden üretilebilir?

    Üretimden önce korunan ve düzenlenebilir bölgeleri tanımlayın, yalnızca düzenlenebilir temsili değiştirin, kodu çözün ve korunan kodu değiştiren ya da sözdizimi, testler, statik denetimler veya göreve özgü değişmezler bakımından başarısız olan adayları reddedin. Raporlanan hiyerarşik gizil değişken deneyi, 64 belirteçli işlevlerde olasılıksal kararlılığı ölçer; aralıkların veya davranışın değişmeden kalacağını garanti etmez. Seçici yeniden üretim iş akışını inceleyin.

  6. Yapay zekâ destekli, davranışı koruyan yeniden düzenlemeye hangi denetim stratejisi uygundur?

    Modeli bir dönüşümü saptamak veya önermek için kullanın; ardından mümkünse dönüşümü güvenilir bir yeniden düzenleme motoruyla uygulayın ve derlemeyi, testleri, statik denetimleri ve amaçlanan yeniden düzenlemeyi doğrulayın. Makul görünen üretilmiş bir yama, tek başına yeterli kanıt değildir. Yeniden düzenleme karar satırını açın.

  7. Kod üretimini yalnızca denetlenebilir değil, öngörülebilir kılan nedir?

    Üreteci seçmeden önce gözlemlenebilir bir koruma sözleşmesi ve kabul denetimleri tanımlayın. Öngörülebilirlik, yalnızca bir istemin, maskenin, dil bilgisinin veya gizil kodun sabitlenmesine değil, kod çözme ve doğrulama sonrasında nelerin kararlı kaldığına bağlıdır. Koruma sözleşmesini tanımlayın.

Mevcut deneyin gösterdikleri ve göstermedikleri

İçinde Yapıyı Koruyan Yazılımın Yeniden Üretimi İçin İncelenebilir Denetim, hiyerarşik bir VQ-VAE, 64 belirteçli Python fonksiyonlarını 16 üst düzey ve 32 alt düzey ayrık konuma eşler. Dört üst düzey kodun kilitlenmesi, ayrıştırma oranını şu düzeyden yükseltir: 0.453'ten 0.591'e; kilidi açık konumlar ise hâlâ şu oranda değişmektedir: 0.936 ve koşullu örnekler şu düzeyde kalır: 0.998 benzersizlik.

Bu, küçük ölçekli tek bir ortamda ölçülen kararlılık–serbestlik ödünleşimine ilişkin kanıttır. Tam AST koruması, anlamsal eşdeğerlik, işlevsel doğruluk, başarılı onarım veya depo ölçeğinde davranış güvencesi değildir.

Eşlik eden çalışma Sıkıştırılmış Kısa Metin Üretiminde Kalite Nerede Bozulur? önemli bir değerlendirme dersi sunar: gizil uzay vekil ölçütlerindeki iyileşme, kodu çözülmüş çıktıları zorunlu olarak iyileştirmez. Temsil, üretim ve kodu çözülmüş davranış ayrı aşamalar olarak denetlenmelidir.

Yeniden kullanılabilir bir karar yöntemi için şu konudaki tamamlayıcı kılavuza bakın: kodek kaybının üreteç kaybından ayrılması.

Yaygın yanlış anlamalar

“Ayrıştırılabiliyorsa doğrudur.”

Ayrıştırma yalnızca sözdizimsel iyi biçimliliği kanıtlar. Program yine de testleri, sözleşmeleri veya amacı ihlal edebilir.

“Kaba ölçekli bir kod, bir AST düğümüdür.”

Açık bir uyum gösterilmedikçe hayır. Öğrenilmiş kodlar, yüzeysel ve yapısal birden çok etmeni birbirine karıştırabilir.

“Kilitli gizil değişkenler, kaynak metnin değişmediği anlamına gelir.”

Kod çözme küreseldir ve öğrenilmiştir. Sabit gizil konumlar, özdeş bir metin aralığını garanti etmeksizin kararlılığı artırabilir.

“Daha az değişiklik her zaman daha iyidir.”

Girdiyi kopyalayan bir düzenleyici kusursuz kararlılık sağlar, ancak görevde hiçbir ilerleme kaydetmez. Yerellik ve düzenleme başarısı birlikte ölçülmelidir.

Sonraki okumalar

Yakın çalışmalar farklı denetim yüzeyleri kullanır; görev uyumu sağlanmadan bunların hiçbiri birbiriyle değiştirilebilir bir temel çizgi olarak ele alınmamalıdır.

  1. Self-Edit: Fault-Aware Code Editor for Code Generation

    Üretimi düzenlenebilir bir süreç olarak ele alır ve düzeltmeyi yönlendirmek için saptanan hatalardan yararlanır.

  2. Coeditor: Leveraging Contextual Changes for Multi-round Code Auto-editing

    Sıfırdan yeniden üretmek yerine, düzenleme turları boyunca bağlamsal kod değişikliklerini modeller.

  3. PAFT: En Az Düzenlemeli Program Onarımı için Korunumu Gözeten İnce Ayar

    Program onarımı eğitiminde korumayı ve asgari değişikliği açık hâle getirir.

  4. Constrained Decoding of Diffusion LLMs with Context-Free Grammars

    Biçimsel kısıtların difüzyon çözümleme sırasında nasıl sözdizimi güvenceleri sağlayabildiğini gösterir.

  5. Sinirsel Ayrık Temsil Öğrenimi

    Öğrenilmiş ayrık gizil temsillerin temelini oluşturan mekanizma VQ-VAE'yi tanıtır.

  6. Simple and Effective Masked Diffusion Language Models

    Tamamlayıcı tanısal çalışmada örtük üretici olarak kullanılan maskeli ayrık difüzyon çerçevesini sunar.

  7. An Empirical Study on the Potential of LLMs in Automated Software Refactoring

    LLM tarafından önerilen güvenli olmayan yeniden düzenlemeleri saptar ve belirlenen dönüşümlerin güvenilir yeniden düzenleme motorlarıyla yeniden uygulanmasını değerlendirir.

  8. SWE-Refactor: A Repository-Level Benchmark for Real-World LLM-Based Code Refactoring

    Davranışı koruyan depo düzeyindeki yeniden düzenlemeyi derleme, testler ve yeniden düzenleme tespitiyle değerlendirir.

  9. EfficientEdit: Accelerating Code Editing via Edit-Oriented Speculative Decoding

    Bir düzenlemeyi tam özbağlanımlı yeniden üretim olarak ele almak yerine, değişmemiş kaynak parçalarını yeniden kullanır ve düzenleme konumlarını tahmin eder.

  10. Hydra: Efficient, Correct Code Generation via Checkpoint-and-Rollback Support

    Bir hatadan sonra zaten geçerli olan ön ekleri yeniden üretmekten kaçınmak için statik denetim, kontrol noktaları ve hedefli geri alma kullanır.

Kısa özet

Yerelleştirilmiş kod yeniden üretimi, şu unsurlar arasında bir sözleşmedir: değişiklik ve korunum. Hiyerarşik ayrık gizil değişkenler bu sözleşmeyi incelenebilir biçimde ifade etmenin bir yolunu sunar; ancak temsil, yalnızca kodu çözülmüş programlar yerellik, sözdizimi, yapı, davranış, çeşitlilik ve belirsizlik bakımından değerlendirildiğinde yararlıdır.

Bu araştırma doğrultusundaki yayınlar