Databricks实习生教AI优化代码快速修复
正如人类通过反复实践和从错误中学习来提升技能一样,人工智能模型现在也正在接受训练,以在代码修复等复杂领域完善其技艺。这种基本的反馈循环是Databricks近期一个夏季实习项目的核心,该项目旨在提升其代码助手的性能。该倡议的重点是教导一个专门的“奖励模型”来识别并优先处理最佳代码修复方案,这是构建一个复杂开发者工具的关键一步。
“快速修复”(Quick Fix)功能是Databricks的核心创新,它无缝集成到其Notebook和SQL编辑器中。该功能旨在快速、高置信度地解决问题,针对语法错误、拼写错误的列名和简单的运行时问题等常见问题。当开发人员遇到错误时,“快速修复”会立即启动,分析问题代码及其伴随的错误消息。然后,它利用大型语言模型(LLM)迅速生成有针对性的解决方案,通常在1到3秒内完成。
尽管“快速修复”已经提供了宝贵的帮助,但挑战在于如何提高其精确度。即使修复方案已经生成并通过了基本的语法检查,系统如何才能保证它是用户最相关、最准确的解决方案呢?答案通过一种名为“最佳k采样”(best-of-k sampling)的技术浮出水面。这种方法涉及生成多个潜在的修复建议,然后利用复杂的奖励模型来评估并选择单一的最佳选项。
该项目涵盖了后端工程和实验研究。初始阶段侧重于扩展“快速修复”系统,使其能够并行生成多样化的建议。这包括尝试各种提示和上下文信息,例如“思维链”推理、预测输出推理和系统提示的变体,以及选择性的数据库上下文。虽然这些方法提高了建议的质量和多样性,但它们也引入了一定程度的处理延迟,凸显了输出质量和操作速度之间的关键权衡。
生成多个建议后,下一步是确定最有希望呈现给用户的方案。早期尝试涉及一个简单的多数投票系统,尽管在孤立测试中表现良好,但在真实世界的用户A/B测试中并未产生显著改进,因此没有推广。更有效的解决方案是开发和训练专用的奖励模型。这些模型被设计用来预测用户最终会接受并成功执行哪些建议的修复。有趣的是,开发过程既利用了传统的机器学习方法,例如逻辑回归和梯度提升决策树(特别是使用LightGBM包),也利用了更现代的微调大型语言模型。
评估中出现了一个显著的发现:对于预测用户接受度和执行成功率这一特定任务,在离线评估中,经典的机器学习模型与更耗资源的微调LLM表现相当。特别是决策树模型,被证明非常有效。其成功归因于以下事实:对于“快速修复”所解决的错误类型,看起来正确的代码编辑通常就是正确的。影响其决策的关键特征包括原始代码行与生成的修复之间的相似性,以及遇到的具体错误类型。
鉴于其可比的性能,以及至关重要的是,其显著更快的推理时间,LightGBM决策树模型最终被选择部署到生产环境中。速度对于“快速修复”至关重要;建议必须几乎即时出现,在开发人员手动干预之前,因为任何延迟都会减少可以迅速解决的错误数量。LightGBM模型的紧凑尺寸也使其资源效率极高,并且更易于集成到现有基础设施中。通过模型和基础设施优化的结合,平均推理时间 dramatically 减少了近一百倍。这种最佳k方法的实施,再结合奖励模型,显著提高了Databricks的内部接受率,直接转化为更高的质量和更无缝的用户体验,同时将系统延迟保持在可接受的范围内。