最近几天分享的都是 Google 出品。今天再分享一个 Google 的产品——Smart Paste,这是一款用于上下文感知调整粘贴代码的工具,这是一款Google内部工具。
背景
大多数开发者在日常工作中经常复制粘贴代码,以避免不必要的重复输入。尽管这加快了代码开发过程,但这不仅仅是简单的复制粘贴。对 Google monorepo(Google 的代码库,存储了完整的工作历史,而不仅仅是提交的更改)的分析揭示了用户行为中的有趣模式,这些模式是提高效率的潜在目标。例如,根据编辑历史,约 25% 的粘贴操作会立即被修改,修改范围从小的语法修复(例如添加缺失的分号)到对周围代码环境的更复杂的调整(例如重命名变量和更改其类型)。进行这些更改通常会破坏代码编写的流畅性并减慢开发过程。
现在 Google 内部广泛使用 Smart Paste,可以预测代码环境的下一个状态,并使用生成式 AI 对粘贴的代码进行上下文感知的调整。借助最近在大型序列模型(例如 DIDACT)的进展,这些进展使得代码审查、构建修复等工具成为可能,Smart Paste 简化了代码修订期间的复制粘贴过程。在一项涵盖约 4 万名工程师的使用研究中,我们发现 6.9% 的 IDE 中的所有粘贴操作都使用了 Smart Paste,并且有 42.5% 的接受率,这显著简化了用户的工作流程。
例子:在粘贴 Floor
函数时,Smart Paste 会检测到缺失的 Ceil
逻辑,并建议对函数名和操作符进行修改。
数据准备、模型训练与校准
在模型训练方面,从 Google monorepo 及其相关的综合日志中获取了粘贴后编辑的数据。由于数据质量至关重要,设计了一套简单的启发式方法,将粘贴后调整的概念限定在与原始粘贴位置相近的范围内。通过这些启发式方法,从前几个月的数据中提取了一个训练数据集,并手动评估生成的示例,不断迭代直到提取启发式方法达到最佳状态。在此过程中,团队注意到 28% 的粘贴操作没有后续编辑(不同编程语言之间的差异在 23% 到 41% 之间)。团队将这些示例保留在训练数据集中,以便模型也能学会输出“无需编辑”。
团队使用了在编程相关任务上预训练的 DIDACT 模型,并使用标注数据集对其进行了微调。
交互
Auto-apply显示插入/修改的flagfile时,会将其加粗并下划线。
内联差异高亮显示删除的tryfromenv(删除线)和插入的flagfile(斜体和更低的不透明度)。
用户剪切并粘贴修改后的字符串以触发返回字符串上的粘贴建议。
结果
在对大约4万名工程师的用户行为进行检查时,我们发现IDE中的所有粘贴中有6.9%使用了智能粘贴,接受率为42.5%,这显著减少了开发人员的工作量。