# AI 如何在不重新生成整個程式的情況下編輯程式碼?

Canonical HTML: https://aogavrilov.com/zh-hant/research/discrete-latent-generation/

Document language: zh-Hant

以生成模型進行局部程式碼修改的實務研究指南:哪些部分應維持固定、哪些部分可以變更,以及將某項轉換稱為結構保留之前需要哪些證據。

已出版 2026 年 7 月 25 日 更新日期 2026 年 7 月 30 日 [Alexey Gavrilov](https://aogavrilov.com/about/)

## 問題的實質所在

程式碼編輯並非只是提示較短的程式碼生成。編輯器接收既有成品、預期變更與隱含的保留契約,因此核心問題包含兩個面向: **哪個區域可以變更,而其餘部分的哪些性質必須維持穩定?**

本指南面向初次接觸 AI 輔助軟體編輯、且具備技術素養的讀者,並將局部編輯這一直觀概念,與語法、結構、語意及功能保留等更強的主張區分開來。

## 核心概念

範圍受限的編輯器不只需要生成目標,也需要明確的保留邊界。

### 必須維持不變的項目

所保護的對象可以是文字範圍、文法、API 簽章、AST 區域、測試行為、相依性契約,或學習所得的粗粒度表徵。每種選擇所維護的穩定性概念各不相同。

### 可變更的項目

可編輯區域必須具備足夠自由度,方能完成指定任務。複製所有內容的控制方法雖穩定卻毫無用處;重寫所有內容的方法則僅提供自由度,而欠缺局部性。

## 直觀模型:翻修一個房間,保留整棟建築

試想只整修一個房間,同時維持承重結構、管線介面與相鄰房間完整無損。完整重新生成就像僅憑口頭描述重建整棟房屋;局部編輯則會標示受保護結構、劃定有限的作業區域、執行變更,並在接受結果前加以檢查。

**此類比不再成立之處。** 學得的潛在編碼並非經認證的架構藍圖。固定粗粒度編碼可能提高量測到的結構穩定性,但不能保證特定 AST 節點、行為或介面維持不變。

## 更精確地理解部分再生成

令編碼器映射一個程式 `x` 轉換為結構化潛在表徵 `z` 。保留遮罩會選取位置 `L` 予以固定。生成器僅對其互補位置取樣,同時強制維持 `z'l = zl` 套用至每個鎖定位置。接著,解碼器將完整表徵映射 `z'` 回到原始碼。

此機制在詞元之上建立一個可檢視的控制介面,但其意義仍須透過實證確立:研究者必須測試鎖定位置在解碼後究竟保留了什麼,以及可編輯位置是否仍具足夠自由度。

## 四階段編輯工作流程

1. 明定邊界 識別受保護的區域或屬性,並界定預期變更。
2. 表徵成品 可使用文字、語法、檢索情境,或學習所得的粗粒度與細粒度編碼。
3. 選擇性地重新生成 在保留選定約束的同時,僅對可編輯位置進行取樣。
4. 接受前先行驗證 衡量局部性、語法、結構、行為及非預期副作用。

## 程式碼編輯、程式修復與受約束生成並非同一項任務

| 方法 | 主要目標 | 典型保留機制 | 仍待驗證的項目 |
| --- | --- | --- | --- |
| 完整程式碼生成 | 產生完整成品 | 提示與上下文 | 所要求變更範圍以外的一切內容 |
| 自動化程式修復 | 移除已診斷的故障 | 故障定位、測試、範本或修補程式 | 現有測試以外的正確性與修補最小性 |
| 填補式模型或編輯模型 | 修改選定的文字區域 | 可見的前綴、後綴、差異或編輯情境 | 非預期的結構與行為變更 |
| 受文法約束的解碼 | 確保輸出符合形式語言 | 符合文法的解碼狀態 | 程式語意、任務正確性與局部性 |
| 階層式潛在控制 | 重新生成選定的已學習位置 | 已鎖定的粗粒度或細粒度潛在編碼 | 這些編碼在解碼後保留了什麼 |

## 如何衡量局部性與結構保持

## 哪一種控制介面適合此編輯任務?

「不要重寫整個函式」是一項需求,而非完整方法。應先界定必須可預測的結果,再選擇相應的控制介面與佐證。

| 必要保證 | 匹配度更高的控制介面 | 應要求的證據 |
| --- | --- | --- |
| AI 輔助的行為保留重構 | 先由 LLM 識別或提出轉換,再於可行情況下使用可信賴的重構引擎執行。參見 [RefactoringMirror](https://arxiv.org/abs/2411.04444) . | 編譯、測試、靜態檢查與重構偵測。 [SWE-Refactor](https://arxiv.org/abs/2602.03712) 在儲存庫層級明確實施這些檢查。 |
| 無須改寫整個函式的局部程式碼修改 | 重用未變更的原始碼片段,並僅生成候選編輯區域,如同 [EfficientEdit](https://arxiv.org/abs/2506.02780) . | 區域外差異、任務成功與否、已接受詞元的重複使用,以及省略脈絡是否導致遺漏跨檔案變更。 |
| 面向軟體工程的受約束程式碼生成 | 在解碼期間強制滿足形式性質,例如 [受文法約束的擴散](https://arxiv.org/abs/2508.10111) ,或為有效前綴建立檢查點,並僅回復至造成問題的區域,如 [Hydra](https://arxiv.org/abs/2605.15238) . | 文法、編譯器或型別檢查器的通過情形,並結合功能測試、局部性、修復延遲及重新生成之有效程式碼量。 |
| 兼顧局部性與多樣性的選擇性 Python 函式再生成 | 鎖定選定的粗粒度或細粒度潛在位置,僅對其餘位置進行取樣。 | 評估解碼後的局部性、語法、結構不變量、編輯自由度、多樣性與不確定性。僅鎖定潛在表示並不能保證重構成功。 |
| 明確保留契約下的可預測程式碼生成 | 在生成前界定可觀察的受保全屬性與通過/失敗檢查,再選擇能施行或呈現這些條件、且範圍最小的機制。 | 解碼後應衡量上述確切屬性,並報告重複執行中的接受率、拒絕率與失敗率。僅採用確定性取樣並不能保證保存。 |

## 本指南回答的研究問題

這些精簡回答界定本指南全篇採用的主張範圍與證據邊界。

1. 生成模型如何在不重寫整個函式的情況下修改程式碼? 在生成前界定可編輯邊界,保全或重用邊界以外的原始碼,僅生成候選變更,並拒絕未完成任務或更動受保全區域的輸出。階層式潛在表示鎖定是一種實驗性控制介面,但不保證原始碼範圍完全相同。 [比較局部編輯的控制介面](https://aogavrilov.com/zh-hant/research/discrete-latent-generation/#control-surface) .
2. 哪些證據能表明程式碼編輯確屬局部變更,而非僅在語法上有效? 除衡量所要求區域以外的差異,也應一併衡量任務成功與否、可編輯區域的變化、結構不變量、測試或靜態檢查,以及重複執行時的變異性。僅憑剖析成功率只能確認語法形式良好。 [檢視局部性證據核對表](https://aogavrilov.com/zh-hant/research/discrete-latent-generation/#measurement) .
3. 程式碼編輯的局部性應如何與生成多樣性取得平衡? 同時報告受保護區域的穩定性、可編輯區域的自由度,以及候選結果的獨特性。複製輸入雖能使穩定性最大化,卻可能對任務毫無進展;不受限制的改寫則可能使變更最大化,同時破壞局部性。 [查看有界的穩定性—自由度證據](https://aogavrilov.com/zh-hant/research/discrete-latent-generation/#evidence) .
4. 局部程式碼編輯、受約束生成與程式修復有何差異? 局部編輯著重於哪些內容必須維持不變;受約束生成會強制輸出符合某種形式屬性,例如隸屬特定文法;程式修復則要求變更滿足缺陷或任務規格。僅憑語法無法證明語意等價、功能正確、任務成功或局部性。 [比較三項目標](https://aogavrilov.com/zh-hant/research/discrete-latent-generation/#comparison) .
5. 如何只重新生成 Python 函式的指定部分,同時維持其餘部分穩定? 生成前先界定受保護區域與可編輯區域,只修改可編輯的表徵,完成解碼後,拒絕任何更動受保護程式碼,或未通過語法、測試、靜態檢查或任務特定不變量的候選結果。文中階層式潛在表徵實驗衡量的是 64 詞元函式上的機率穩定性,並不保證指定範圍或行為維持不變。 [檢視選擇性重新生成工作流程](https://aogavrilov.com/zh-hant/research/discrete-latent-generation/#workflow) .
6. 何種控制策略適合 AI 輔助的行為保留重構? 使用模型識別或提出轉換;在可行時,再以可信賴的重構引擎執行,並驗證編譯、測試、靜態檢查及預期重構。看似合理的生成修補程式本身並不足以構成證據。 [開啟重構決策列](https://aogavrilov.com/zh-hant/research/discrete-latent-generation/#control-surface) .
7. 什麼使程式碼生成具可預測性,而不只是可控制? 選擇生成器前,先明定可觀察的保留契約與驗收檢查。可預測性取決於解碼並驗證後哪些內容仍保持穩定,而不只取決於提示、遮罩、文法或潛在碼是否固定。 [界定保留契約](https://aogavrilov.com/zh-hant/research/discrete-latent-generation/#core-idea) .

## 目前實驗能說明什麼——以及不能說明什麼

收錄於 [*結構保持軟體重新生成的可檢視控制*](https://aogavrilov.com/zh-hant/publications/inspectable-control/) ,階層式 VQ-VAE 將 64-token Python 函式映射至 16 個頂層與 32 個下層離散位置。鎖定四個頂層編碼後,剖析成功率由 **0.453 至 0.591** ,而未鎖定位置仍以此比率發生變更: **0.936** ,且條件式樣本仍維持 **唯一性 0.998** .

這是在一個小型設定下量測到穩定性與自由度權衡的證據;它並不保證精確保留 AST、語意等價、功能正確、修復成功,亦不保證儲存庫規模下的行為。

配套研究 [*壓縮式短文本生成的品質從何處開始劣化*](https://aogavrilov.com/zh-hant/publications/where-quality-breaks/) 帶來一項重要的評估啟示:潛在空間代理指標的改善未必能改善解碼輸出。表示、生成與解碼後行為應分階段檢查。

可重複使用的決策程序,請參閱配套指南中關於 [區分編解碼器損失與生成器損失](https://aogavrilov.com/zh-hant/research/codec-bottleneck-diagnosis/) .

## 常見誤解

### 「能通過剖析,所以就是正確的。」

剖析僅能證明語法形式良好;程式仍可能違反測試、契約或原始意圖。

### 「粗粒度編碼就是 AST 節點。」

除非已證明存在明確對齊,否則不能如此認定。學得的編碼可能混合多種表層與結構因素。

### 「鎖定潛在變數就表示原始碼文字不變。」

解碼是全域且經由學習而得。固定潛在位置可提高穩定性,但不保證文字範圍完全相同。

### 「變更越少一定越好。」

原樣複製輸入的編輯器雖能達到完全穩定,卻無法推進任務。因此,局部性與編輯成功率必須一併量測。

## 後續閱讀

鄰近研究採用不同的控制介面;若未先對齊任務,不應將其中任何方法視為可互換的基準。

1. [Self-Edit: Fault-Aware Code Editor for Code Generation](https://arxiv.org/abs/2305.04087) 將生成視為可編輯的過程,並以偵測到的錯誤引導修正。
2. [Coeditor: Leveraging Contextual Changes for Multi-round Code Auto-editing](https://arxiv.org/abs/2305.18584) 對多輪編輯之間具脈絡關聯的程式碼變更進行建模,而非每次皆從頭重新生成。
3. [PAFT: Preservation Aware Fine-Tuning for Minimal-Edit Program Repair](https://arxiv.org/abs/2604.03113) 在程式修復訓練中明確納入保持與最小變更。
4. [Constrained Decoding of Diffusion LLMs with Context-Free Grammars](https://arxiv.org/abs/2508.10111) 說明形式約束如何在擴散解碼期間提供語法保證。
5. [神經離散表徵學習](https://arxiv.org/abs/1711.00937) 介紹 VQ-VAE,此為學習離散潛在表示的基礎機制。
6. [Simple and Effective Masked Diffusion Language Models](https://arxiv.org/abs/2406.07524) 提供配套診斷研究中用作潛在生成器的遮罩式離散擴散框架。
7. [LLM 在自動化軟體重構中之潛力:實證研究](https://arxiv.org/abs/2411.04444) 找出 LLM 所提議的不安全重構,並評估透過可信賴的重構引擎重新套用所偵測轉換的成效。
8. [SWE-Refactor: A Repository-Level Benchmark for Real-World LLM-Based Code Refactoring](https://arxiv.org/abs/2602.03712) 透過編譯、測試與重構偵測,評估保存行為的儲存庫層級重構。
9. [EfficientEdit:透過編輯導向的推測式解碼加速程式碼編輯](https://arxiv.org/abs/2506.02780) 重用未變更的原始碼區段並預測編輯位置,而非將編輯視為完整的自迴歸再生成。
10. [Hydra:透過檢查點與回復支援實現高效且正確的程式碼生成](https://arxiv.org/abs/2605.15238) 採用靜態檢查、檢查點與針對性回復,避免在發生錯誤後重新生成原本已有效的前綴。

## 簡短回顧

局部程式碼重新生成是下列各方之間的契約: **變更** 以及 **保存** 。階層式離散潛在變數提供了一種可檢視的契約表達方式;然而,唯有從局部性、語法、結構、行為、多樣性與不確定性等面向評估解碼後的程式,這種表示才具有實用價值。

## 此研究方向的出版成果

### [Where Quality Breaks in Compressed Short-Text Generation: Staged Bottleneck Localization](https://aogavrilov.com/zh-hant/publications/where-quality-breaks/)

壓縮式短文本生成的品質瓶頸何在:分階段瓶頸定位

診斷方法論 FRUCT 39 2026 主會議

### [Inspectable Control for Structure-Preserving Software Regeneration](https://aogavrilov.com/zh-hant/publications/inspectable-control/)

結構保留軟體再生成的可檢視控制

潛在空間控制方法 FSE Companion '26 2026 配套海報
