谷歌公开自家「AI+软件工程」框架DIDACT:数千名开发者内部测试,用了都说生产力高( 二 )


谷歌公开自家「AI+软件工程」框架DIDACT:数千名开发者内部测试,用了都说生产力高

文章插图
给定代码的初始片段和代码审查员附加到代码片段的注释,DIDACT的Pre-Submit Cleanup任务生成处理这些注释的编辑操作(文本的插入和删除)
DIDACT的多模态性质也产生了一些随规模增大而涌现出的全新行为,其中一种能力是历史增强(history augmentation),可以经由提示来启用这种能力,了解开发人员最近做了什么可以让模型更好地预测开发人员下一步应该做什么 。
谷歌公开自家「AI+软件工程」框架DIDACT:数千名开发者内部测试,用了都说生产力高

文章插图
历史增强代码补全的演示
历史增强代码补全任务可以展现这种能力,上图的例子中,开发人员添加了一个新的函数参数(1),并将光标移动到文档中(2) 。以开发人员编辑的历史和光标位置为条件,模型通过正确预测新参数的文档字符串条目来完成行(3) 。
在难度更大的历史增强编辑预测任务中,模型能够以历史一致的方式选择下一步编辑的位置 。
谷歌公开自家「AI+软件工程」框架DIDACT:数千名开发者内部测试,用了都说生产力高

文章插图
在多个链式迭代上的编辑预测的演示
如果开发人员删除了函数参数(1),则模型可以根据历史正确地预测对删除参数的文档字符串(2)的更新(而无需人类开发人员手动地将光标放置在那里),并且在语法上(也可以说是语义上)正确地更新函数(3)中的语句 。
有了历史后,模型可以明确地决定如何正确地继续「编辑代码过程」,而如果没有历史记录,模型就无法知道丢失的函数参数是故意的(因为开发人员正在进行更长的编辑操作以删除参数)还是意外情况(模型应该重新添加参数以修复问题) 。
除此之外,模型还可以完成更多的任务,比如从一个空白文件开始,要求模型连续预测接下来的编辑操作,直到编写出一个完整的代码文件 。
最重要的是,该模型能够以一种对开发人员来说很自然的、循序渐进的方式辅助编写代码:
首先创建了一个具有导入、标志和基本main函数的完整工作框架;然后再逐步添加新功能,例如从文件中阅读和写入结果,并添加基于用户提供的正则表达式来过滤某些行的功能 。
结论
DIDACT将Google的软件开发过程转变为机器学习开发人员助理的训练演示,并使用这些演示数据来训练模型,以循序渐进的方式构建代码,与工具和代码审查人员交互 。
DIDACT方法补充了Google和其他公司的大型语言模型所取得的巨大成就,可以减少工作量,提高生产力,并提高软件工程师的工作质量 。
参考资料:
https://ai.googleblog.com/2023/05/large-sequence-models-for-software.html

【谷歌公开自家「AI+软件工程」框架DIDACT:数千名开发者内部测试,用了都说生产力高】


推荐阅读