# 使用生成模型进行局部代码修改

规范 HTML：https://aogavrilov.com/zh/research-notes/localized-code-modification-generative-models/
英文版本：https://aogavrilov.com/research-notes/localized-code-modification-generative-models/
文档语言：zh-Hans
来源论文：https://aogavrilov.com/zh/publications/inspectable-control/
英文论文全文：https://aogavrilov.com/publications/inspectable-control/full-text/
DOI：https://doi.org/10.1145/3803437.3807386

在保留完成所需代码变更自由度的同时，避免生成模型无谓地重写整个函数，并共同验证编辑局部性、任务成功与生成多样性。

## 直接回答

### 如何让生成模型修改代码而不重写整个函数？

在生成之前定义受保护区域与可编辑区域，复用或约束受保护表示，只生成候选变更，并拒绝任何修改受保护代码或未通过任务检查的输出。必须同时衡量局部性和任务成功。

## 为什么这一区分重要

局部代码修改是编辑问题，而不只是一个更短的代码生成提示。输入中已经包含值得保留的软件工件，因此方法必须明确划分允许变化的区域，以及必须保持稳定的属性。

边界可以是源代码片段、语法节点、API 签名、测试行为、依赖契约或学习得到的潜在位置。这些选择并不等价：每一种边界保护不同的可观察属性，也需要与之匹配的验证步骤。

## 实用步骤

1. **声明保持契约。** 明确可编辑区域，以及必须保持不变的文本、结构、接口或行为。
2. **选择最窄但足够的控制界面。** 根据需要保护的属性，复用未变源代码、采用填空式或编辑式解码、施加形式约束，或锁定选定的潜在位置。
3. **只在允许变化的位置生成。** 在可编辑区域内保留足够自由度以完成任务；复制全部输入虽然局部，但没有完成任何修改。
4. **同时验证局部性与成功。** 拒绝修改受保护区域、无法解析或编译、违反结构不变量，或者没有完成所请求变更的候选结果。

## 应要求哪些证据

- 直接测量可编辑区域之外的 diff，或采用另一种受保护区域稳定性指标。
- 测量可编辑区域内的任务成功。
- 根据场景执行解析、编译、测试、静态检查或任务专用不变量验证。
- 报告可编辑区域的变化率，避免把原样复制误认为控制能力。
- 报告候选唯一性和重复运行差异，避免把局部性与模式坍塌混为一谈。

## 相关研究实际报告了什么

- 相关实验把 64-token 的 Python 函数压缩为分层离散位置，并在部分约束下重新生成选定的潜在位置。
- 锁定四个顶层码后，解析率从 0.453 提高到 0.591；未锁定位置的变化率为 0.936，条件样本仍有 0.998 的唯一率。
- 这些测量揭示了 token 之上的稳定性—自由度权衡，但不能证明源代码片段、AST、语义或行为被精确保留。

## 适用边界

- 被锁定的潜在码不会自动对应 AST 节点、受保护源代码片段或形式不变量。
- 解析率只说明语法可解析，不能证明功能正确或修复成功。
- 报告的证据来自经过预处理的短 Python 函数，不能推导出仓库级行为。

完整研究指南：https://aogavrilov.com/zh/projects/discrete-latent-generation/#control-surface

## 主要与邻近来源

- [Inspectable Control for Structure-Preserving Software Regeneration](https://aogavrilov.com/publications/inspectable-control/)：主要论文及其有边界的分层潜在实验。
- [EfficientEdit: Accelerating Code Editing via Edit-Oriented Speculative Decoding](https://arxiv.org/abs/2506.02780)：复用未变化源代码区域的编辑式解码方法。
- [PAFT: Preservation Aware Fine-Tuning for Minimal-Edit Program Repair](https://arxiv.org/abs/2604.03113)：在程序修复训练中显式强调保持与最小修改。

这篇维护型笔记只总结已有证据，不添加超出引用来源的新实验结果。
