GitHub Copilot 编辑建议功能的进化之路
GitHub Copilot 的“下一处编辑建议” (NES) 功能旨在预测并推荐开发者下一步的代码修改,这项任务比简单的代码补全更具挑战性,因为它需要深入理解开发者的意图,并做到快速响应且不过度干扰.
关键突破:高质量的训练数据
团队发现,使用最终的 Pull Request 数据训练模型效果不佳,因为它无法反映开发者在编码过程中的真实、动态的编辑行为. 于是,他们转而收集内部志愿者的实时编码会话,构建了一个高质量的数据集. 事实证明,这比海量但不够精确的数据更有效.
从监督微调到强化学习
1. 监督微调 (SFT):利用上述高质量数据集,团队成功训练出第一个表现优异的 NES 模型.
2. 强化学习 (RL):为解决 SFT 无法教会模型“什么是不好的建议”这一问题,团队引入了强化学习. 通过设计一个“评分器”来判断建议质量,模型得以在更广泛的数据上进行训练,学会避免生成干扰性的建议.
最新模型的改进
最新版本的 NES 模型在多个方面进行了优化:
- 提示词优化:减少了上下文长度,提升响应速度.
- 数据质量过滤:使用大模型筛选训练数据,减少无用建议.
- 合成数据:从大模型蒸馏知识,训练出更高效的小模型.
- 超参数调整:为新架构优化参数,提升建议质量.
成果与未来
通过持续迭代,NES 模型的建议接受率提升了 26.5%,而隐藏率则降低了 25.6%. 未来,GitHub 计划让 NES 支持跨文件建议、提供更快的响应并更智能地理解上下文.
原文链接
GitHub Copilot 的“下一处编辑建议” (NES) 功能旨在预测并推荐开发者下一步的代码修改,这项任务比简单的代码补全更具挑战性,因为它需要深入理解开发者的意图,并做到快速响应且不过度干扰.
关键突破:高质量的训练数据
团队发现,使用最终的 Pull Request 数据训练模型效果不佳,因为它无法反映开发者在编码过程中的真实、动态的编辑行为. 于是,他们转而收集内部志愿者的实时编码会话,构建了一个高质量的数据集. 事实证明,这比海量但不够精确的数据更有效.
从监督微调到强化学习
1. 监督微调 (SFT):利用上述高质量数据集,团队成功训练出第一个表现优异的 NES 模型.
2. 强化学习 (RL):为解决 SFT 无法教会模型“什么是不好的建议”这一问题,团队引入了强化学习. 通过设计一个“评分器”来判断建议质量,模型得以在更广泛的数据上进行训练,学会避免生成干扰性的建议.
最新模型的改进
最新版本的 NES 模型在多个方面进行了优化:
- 提示词优化:减少了上下文长度,提升响应速度.
- 数据质量过滤:使用大模型筛选训练数据,减少无用建议.
- 合成数据:从大模型蒸馏知识,训练出更高效的小模型.
- 超参数调整:为新架构优化参数,提升建议质量.
成果与未来
通过持续迭代,NES 模型的建议接受率提升了 26.5%,而隐藏率则降低了 25.6%. 未来,GitHub 计划让 NES 支持跨文件建议、提供更快的响应并更智能地理解上下文.
原文链接