# 可预测代码生成需要保持契约

规范 HTML：https://aogavrilov.com/zh/research-notes/predictable-code-generation-preservation-contract/
英文版本：https://aogavrilov.com/research-notes/predictable-code-generation-preservation-contract/
文档语言：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. **测量重复运行行为。** 跨重复运行报告接受、拒绝、稳定性、多样性和不确定性，而不是依赖一个示例。

## 应要求哪些证据

- 分别声明受保护属性和可编辑属性。
- 每个所声称的保证都有可观察测试或指标。
- 在衡量稳定性的同时评估任务成功。
- 展示重复运行差异与拒绝率。
- 明确排除尚未测量的属性。

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

- 相关实验把分层离散位置作为短 Python 函数的一种可检查控制界面。
- 锁定四个顶层位置后，解析率提高，同时未锁定位置保持较高变化率，样本唯一率也保持较高。
- 论文把这描述为早期概率性证据，并未声称精确 AST 保持、语义等价、功能正确或仓库级可预测性。

## 适用边界

- 可预测性取决于具体属性：系统可能在语法上可预测，却在行为上不可预测。
- 确定性解码也可能重复同一个错误或过度宽泛的编辑。
- 现有站内实验不能建立超出短函数测量范围的保证。

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

## 主要与邻近来源

- [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)：复用未改变源代码片段的一种编辑式机制。
- [Constrained Decoding of Diffusion LLMs with Context-Free Grammars](https://arxiv.org/abs/2508.10111)：具有显式形式约束的生成机制示例。

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