Paano mae-edit ng AI ang code nang hindi muling binubuo ang buong programa?

Praktikal na gabay sa pananaliksik tungkol sa lokalisadong pagbabago ng code gamit ang mga generative model: kung ano ang dapat manatiling nakapirmi, ano ang maaaring magbago, at anong ebidensiya ang kailangan bago tawaging nagpapanatili ng estruktura ang isang transpormasyon.

Ibahagi ang gabay na itoIbahagi

Ano talaga ang suliranin

Ang pag-edit ng code ay hindi lamang pagbuo ng code gamit ang mas maikling prompt. Tumatanggap ang editor ng umiiral na artifact, nilalayong pagbabago, at di-hayag na kontrata ng pagpapanatili. Samakatuwid, may dalawang panig ang pangunahing tanong: aling rehiyon ang maaaring magbago, at aling mga katangian ng natitirang bahagi ang dapat manatiling matatag?

Nilalayon ng gabay na ito ang mga mambabasang may teknikal na kaalaman na nagsisimula sa pag-edit ng software na tinutulungan ng AI. Inihihiwalay nito ang intuitibong ideya ng lokal na edit sa mas matitibay na pahayag ng sintaktiko, estruktural, semantiko, at punsiyonal na pagpapanatili.

Pangunahing ideya

Kailangan ng isang editor na may takdang saklaw ang tahasang hangganan ng pagpapanatili, hindi lamang isang layunin sa pagbuo.

Ano ang dapat manatiling nakapirmi

Maaaring isa itong span ng teksto, grammar, lagda ng API, rehiyon ng AST, gawi sa test, kontrata ng dependency, o natutuhang magaspang na representasyon. Magkakaibang konsepto ng katatagan ang pinoprotektahan ng bawat pagpili.

Ano ang maaaring magbago

Nangangailangan ang nae-edit na rehiyon ng sapat na kalayaan upang malutas ang hinihinging gawain. Matatag ngunit walang silbi ang metodong pangkontrol na kinokopya ang lahat; ang muling nagsusulat ng lahat ay nagbibigay ng kalayaan nang walang lokalidad.

Isang madaling maunawaang modelo: ayusin ang isang silid, panatilihin ang gusali

Isipin ang pagsasaayos ng isang silid habang pinananatiling buo ang estrukturang nagdadala ng bigat, mga koneksiyon ng tubo, at mga katabing silid. Ang ganap na muling pagbuo ay katulad ng muling pagtatayo ng bahay mula sa pasalitang paglalarawan. Sa lokalisadong pag-edit, minamarkahan ang protektadong estruktura, nagtatakda ng hangganan sa lugar ng paggawa, isinasagawa ang pagbabago, at sinusuri ang resulta bago ito tanggapin.

Kung saan hindi na naaangkop ang analohiya. Ang natutuhang latent code ay hindi sertipikadong planong arkitektural. Maaaring mapataas ng pagtatakda sa isang coarse code ang nasusukat na katatagang estruktural, ngunit hindi nito ginagarantiya na hindi magbabago ang isang partikular na AST node, pag-uugali, o interface.

Mas tumpak na pagtingin sa bahagyang muling pagbuo

Hayaang imapa ng encoder ang isang programa x tungo sa isang nakabalangkas na representasyon ng latent z. Pinipili ng mask ng pagpapanatili ang mga posisyon L upang panatilihing nakapirmi. Kumukuha lamang ng sample ang generator mula sa mga komplementaryong posisyon habang ipinapatupad ang z'ₗ = zₗ para sa bawat naka-lock na posisyon. Pagkatapos, minamapa ng decoder ang nakumpletong representasyon z' pabalik sa source code.

Lumilikha ang mekanismong ito ng nasusuring control surface sa ibabaw ng mga token. Kailangan pa ring itatag sa empirikal na paraan ang kahulugan nito: dapat subukin ng mga mananaliksik kung ano ang pinananatili ng mga naka-lock na posisyon matapos ang decoding at kung may sapat na kalayaang natitira sa mga nae-edit na posisyon.

Daloy ng pag-edit na may apat na yugto

  1. Itakda ang hangganan

    Tukuyin ang mga protektadong rehiyon o katangian at ilarawan ang nilalayong pagbabago.

  2. Irepresenta ang artifact

    Gumamit ng teksto, syntax, konteksto ng retrieval, o magagaspang at pinong natutuhang code.

  3. Muling bumuo nang selektibo

    Magsagawa ng sampling sa mga nae-edit na posisyon lamang habang pinananatili ang mga piniling constraint.

  4. Beripikahin bago tanggapin

    Sukatin ang lokalidad, sintaks, estruktura, gawi, at mga di-sinasadyang side effect.

Hindi iisang gawain ang pag-edit ng code, pagkukumpuni ng programa, at constrained generation

PamamaraanPangunahing layuninKaraniwang mekanismo ng pagpapanatiliAno pa ang kailangang beripikahin
Buong pagbuo ng codeBumuo ng isang kumpletong artifactPrompt at kontekstoLahat ng nasa labas ng hiniling na pagbabago
Awtomatikong pagkukumpuni ng programaAlisin ang natukoy na depektoPaglokalisa ng fault, mga test, template, o patchKawastuhan na lampas sa mga available na test at minimalidad ng patch
Mga modelong pang-infilling o pang-editBaguhin ang mga piniling rehiyon ng tekstoNakikitang prefix, suffix, diff, o konteksto ng editDi-sinasadyang mga pagbabago sa estruktura at gawi
Decoding na nililimitahan ng gramatikaPanatilihin ang mga output sa loob ng isang pormal na wikaMga estado ng decoding na balido sa gramatikaKahulugan ng programa, kawastuhan ng gawain, at lokalidad
Hierarchical latent na kontrolMuling buuin ang mga piniling natutuhang posisyonMga naka-lock na magaspang o pinong latent codeAno ang pinananatili ng mga code na iyon matapos ang decoding

Paano susukatin ang lokalidad at pagpapanatili ng estruktura

Pagbabago sa labas ng rehiyon
Sukatin ang diff sa labas ng hiniling na pag-edit. Sinusuportahan ng mababang halaga ang lokalidad, ngunit hindi sapat ang pagkopya lamang upang maituring na tagumpay.
Kalayaan sa nae-edit na bahagi
Sukatin kung talagang nagbabago ang naka-unlock na rehiyon at kung nananatiling posible ang maraming balidong kandidato.
Syntax at grammar
Natutukoy ng parse rate o bisa ng grammar ang output na mali ang pagkakabuo, ngunit wala itong sinasabi nang mag-isa tungkol sa gawi.
Mga invariant ng estruktura
Ihambing ang mga lagda, AST span, control flow, data flow, import, o API na ayon sa gawain ay dapat manatiling matatag.
Ebidensiyang functional
Patakbuhin ang mga test, static check, compilation, at ebalwasyon ng gawi na partikular sa gawain kapag umiiral ang mga artifact na iyon.
Pagkakaiba-iba at kawalang-katiyakan
Iulat ang pagiging natatangi ng mga kandidato at baryabilidad sa mga paulit-ulit na run upang hindi mapagkamalang mode collapse ang katatagan.

Aling control surface ang angkop sa gawain ng pag-edit?

Ang “Huwag muling isulat ang buong function” ay isang kahingian, hindi isang ganap na pamamaraan. Magsimula sa kinalabasang kailangang mahulaan, saka pumili ng control surface at katugmang ebidensiya.

Kinakailangang garantiyaMas angkop na control surfaceEbidensiyang dapat hingin
Refactoring na tinutulungan ng AI at nagpapanatili ng pag-uugaliHayaang tukuyin o imungkahi ng isang LLM ang pagbabago, at pagkatapos ay isagawa ito gamit ang mapagkakatiwalaang refactoring engine kung maaari. Tingnan ang RefactoringMirror.Compilation, mga test, static check, at pagtukoy sa refactoring. SWE-Refactor ginagawang tahasan ang mga pagsusuring ito sa antas ng repositoryo.
Lokalisadong pagbabago ng code nang hindi muling isinusulat ang buong functionMuling gamitin ang mga di-nagbagong span ng source at bumuo lamang ng mga kandidatong rehiyon ng pag-edit, gaya sa EfficientEdit.Diff sa labas ng rehiyon, tagumpay sa gawain, muling paggamit ng tinanggap na token, at kung nagdudulot ang inalis na konteksto ng mga di-napansing pagbabago sa iba pang file.
Constrained code generation sa software engineeringIpatupad ang isang pormal na katangian habang nagde-decode, gaya ng sa diffusion na nililimitahan ng gramatika, o mag-checkpoint ng mga wastong prefix at magbalik lamang sa rehiyong sanhi ng problema, gaya sa Hydra.Tagumpay sa grammar, compiler, o type checker, kasama ang mga functional test, locality, latency ng pagkukumpuni, at dami ng balidong code na muling nabuo.
Mapiling muling pagbuo ng Python function na may balanse ng lokalidad at dibersidadI-lock ang mga piling magaspang o pinong latent position at sa natitira lamang kumuha ng sample.Lokalidad ng na-decode na output, syntax, mga invariant ng estruktura, kalayaan sa pag-edit, dibersidad, at kawalang-katiyakan. Ang pag-lock sa latent lamang ay hindi garantiya ng refactoring.
Mahuhulaang pagbuo ng code sa ilalim ng tahasang contract sa pagpapanatiliItakda bago ang pagbuo ang naoobserbahang mga protektadong katangian at mga pass/fail check, saka piliin ang pinakamakitid na mekanismong makapagpapatupad o makapaghahayag sa mga ito.Sukatin ang mismong mga katangiang iyon pagkatapos ng decoding at iulat ang mga antas ng pagtanggap, pagtanggi, at pagkabigo sa mga paulit-ulit na run. Ang deterministic sampling lamang ay hindi garantiya ng pagpapanatili.

Mga tanong sa pananaliksik na sinasagot ng gabay na ito

Itinatakda ng maiikling sagot na ito ang mga hangganan ng mga pahayag at ebidensiyang ginagamit sa buong gabay.

  1. Paano mababago ng isang generative model ang code nang hindi muling isinusulat ang buong function?

    Itakda bago ang pagbuo ang hangganan ng nae-edit na bahagi, panatilihin o muling gamitin ang source sa labas nito, bumuo lamang ng mga kandidatong pagbabago, at tanggihan ang mga output na nabibigo sa gawain o bumabago sa mga protektadong rehiyon. Isang eksperimental na control surface ang pag-lock sa herarkikal na latent, ngunit hindi nito ginagarantiya ang magkakaparehong span ng source. Ihambing ang mga control surface para sa lokalisadong pag-edit.

  2. Anong ebidensiya ang nagpapakitang lokal ang isang edit sa code sa halip na sintaktikong balido lamang?

    Sukatin ang diff sa labas ng hiniling na rehiyon kasabay ng tagumpay sa gawain, pagbabago sa nae-edit na rehiyon, mga structural invariant, mga test o static check, at baryabilidad sa mga paulit-ulit na run. Ang parse rate lamang ay nagpapatunay lamang ng wastong pagkakabuo ng sintaks. Suriin ang checklist ng ebidensiya sa lokalidad.

  3. Paano dapat balansehin ang lokalidad ng pag-edit ng code at ang dibersidad ng pagbuo?

    Iulat ang katatagan ng protektadong rehiyon kasabay ng kalayaan sa nae-edit na rehiyon at pagiging natatangi ng mga kandidato. Maaaring palakihin nang husto ng pagkopya sa input ang katatagan nang walang anumang pagsulong sa gawain; maaaring palakihin nang husto ng walang-limitasyong muling pagsulat ang pagbabago habang sinisira ang lokalidad. Tingnan ang saklaw na ebidensiya sa katatagan at kalayaan.

  4. Ano ang pagkakaiba ng lokalisadong pag-edit ng code, kontroladong pagbuo, at pagkukumpuni ng programa?

    Binibigyang-diin ng lokalisadong pag-edit kung ano ang kailangang manatiling hindi nagbabago; ipinapatupad ng kontroladong pagbuo ang isang pormal na katangian ng output, gaya ng pagiging kabilang sa isang grammar; at hinihingi ng pagkukumpuni ng programa na matugunan ng pagbabago ang detalye ng depekto o gawain. Hindi sapat ang syntax lamang upang patunayan ang semantikong equivalence, functional correctness, tagumpay sa gawain, o lokalidad. Ihambing ang tatlong layunin.

  5. Paano muling mabubuo ang mga piling bahagi ng isang Python function habang nananatiling matatag ang iba pang bahagi?

    Itakda bago ang pagbuo ang mga protektado at nae-edit na rehiyon, baguhin lamang ang nae-edit na representasyon, mag-decode, at tanggihan ang mga kandidatong bumabago sa protektadong code o bumabagsak sa syntax, mga test, static check, o invariant na partikular sa gawain. Sinusukat ng iniulat na eksperimento sa herarkikal na latent ang probabilidadistikong katatagan sa mga 64-token na function; hindi nito ginagarantiya ang di-nagbagong mga span o gawi. Suriin ang daloy ng piling muling pagbuo.

  6. Aling estratehiya ng kontrol ang angkop sa refactoring na tinutulungan ng AI at nagpapanatili ng gawi?

    Gamitin ang modelo upang tukuyin o imungkahi ang isang transpormasyon, saka isagawa ito gamit ang mapagkakatiwalaang refactoring engine kung posible at beripikahin ang compilation, mga test, static check, at nilalayong refactoring. Hindi sapat na ebidensiya ang isang kapani-paniwalang nabuong patch. Buksan ang hanay ng pasiya sa refactoring.

  7. Ano ang dahilan kung bakit mahuhulaan, at hindi lamang nakokontrol, ang pagbuo ng code?

    Magtakda ng naoobserbahang kontrata sa pagpapanatili at mga pagsusuri sa pagtanggap bago pumili ng generator. Nakasalalay ang predictability sa nananatiling matatag pagkatapos ng decoding at pagpapatunay, hindi lamang sa kung ipinirmi ang prompt, mask, grammar, o latent code. Itakda ang kontrata ng pagpapanatili.

Ano ang ipinakikita ng kasalukuyang eksperimento — at ano ang hindi nito ipinakikita

Sa Nasusuring Kontrol para sa Muling Pagbuo ng Software na Nagpapanatili ng Estruktura, minamapa ng isang herarkikal na VQ-VAE ang mga Python function na may 64 token sa 16 na top-level at 32 lower-level na discrete position. Ang pag-lock sa apat na top-level code ay nagpapataas sa parse rate mula 0.453 hanggang 0.591, samantalang nagbabago pa rin ang mga hindi naka-lock na posisyon sa antas na 0.936 at nananatili ang mga conditional sample na 0.998 natatangi.

Ebidensiya ito ng nasukat na trade-off sa katatagan–kalayaan sa isang maliit na setting. Hindi ito garantiya ng eksaktong pagpapanatili ng AST, semantikong pagkapantay, kawastuhan ng paggana, matagumpay na pagkukumpuni, o gawi sa antas ng repository.

Ang kaakibat na pag-aaral Where Quality Breaks in Compressed Short-Text Generation ay nagdaragdag ng mahalagang aral sa pagsusuri: ang mas mahusay na mga proxy sa espasyong latent ay hindi kinakailangang magpahusay sa mga na-decode na output. Dapat suriin bilang magkakahiwalay na yugto ang representasyon, pagbuo, at na-decode na pag-uugali.

Para sa pamamaraang pampasya na muling magagamit, tingnan ang kasamang gabay hinggil sa paghihiwalay ng pagkawala sa codec sa pagkawala sa generator.

Mga karaniwang maling pagkaunawa

“Napa-parse ito, kaya tama ito.”

Wastong pagkakabuo lamang ng sintaks ang pinatutunayan ng parsing. Maaari pa ring lumabag ang programa sa mga test, contract, o layunin.

“Ang coarse code ay isang AST node.”

Hindi, maliban kung naipakita ang tahasang alignment. Maaaring paghaluin ng mga natutuhang code ang ilang surface at structural factor.

“Ang mga naka-lock na latent ay nangangahulugang hindi nagbago ang source text.”

Global at natutuhan ang decoding. Maaaring pataasin ng mga nakapirming posisyon ng latent ang katatagan nang hindi ginagarantiya ang magkaparehong span ng teksto.

“Laging mas mabuti ang mas kaunting pagbabago.”

Nakakamit ng editor na kinokopya lamang ang input ang ganap na katatagan ngunit walang anumang progreso sa gawain. Dapat magkasamang sukatin ang lokalisasyon at tagumpay ng pag-edit.

Ano ang susunod na babasahin

Gumagamit ang mga kaugnay na pag-aaral ng magkakaibang control surface; walang dapat ituring na maipagpapalit na baseline kung walang pag-aangkop sa gawain.

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

    Itinuturing ang pagbuo bilang prosesong nae-edit at ginagamit ang mga natukoy na depekto upang gabayan ang pagwawasto.

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

    Minomodelo nito ang mga kontekstuwal na pagbabago sa code sa magkakasunod na yugto ng pag-edit sa halip na muling bumuo mula sa simula.

  3. PAFT: Preservation Aware Fine-Tuning for Minimal-Edit Program Repair

    Ginagawang tahasan ang pagpapanatili at pinakamaliit na pagbabago sa pagsasanay para sa pagkukumpuni ng programa.

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

    Ipinakikita kung paano makapagbibigay ang mga pormal na constraint ng garantiya sa syntax habang isinasagawa ang diffusion decoding.

  5. Neural Discrete Representation Learning

    Ipinakikilala ang VQ-VAE, ang saligang mekanismo para sa mga natutuhang diskretong latent representation.

  6. Simple and Effective Masked Diffusion Language Models

    Inilalahad ang framework ng masked discrete diffusion na ginamit bilang latent generator sa kalakip na pag-aaral na diagnostiko.

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

    Tinutukoy ang mga di-ligtas na refactoring na iminungkahi ng LLM at sinusuri ang muling paglalapat ng mga natukoy na transpormasyon sa pamamagitan ng mga pinagkakatiwalaang refactoring engine.

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

    Sinusuri ang repository-level refactoring na nagpapanatili ng gawi sa pamamagitan ng compilation, mga test, at pagtukoy ng refactoring.

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

    Muling ginagamit nito ang mga di-nagbagong segment ng source at hinuhulaan ang mga lokasyon ng pag-edit sa halip na ituring ang isang edit bilang ganap na autoregressive na muling pagbuo.

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

    Gumagamit ng static checking, mga checkpoint, at tinutumbok na rollback upang maiwasang muling buuin ang balido nang mga prefix matapos ang isang error.

Maikling pagbabalik-tanaw

Ang lokalisadong muling pagbuo ng code ay isang kasunduan sa pagitan ng pagbabago at pagpapanatili. Nagbibigay ang mga herarkikal na discrete latent ng isang nasusuring paraan upang ihayag ang kontratang iyon, ngunit kapaki-pakinabang lamang ang representasyon kapag sinusuri ang mga na-decode na programa ayon sa lokalisasyon, sintaks, estruktura, pag-uugali, dibersidad, at kawalang-katiyakan.

Mga publikasyon sa direksiyong ito ng pananaliksik