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

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

时间:2023-06-09 13:32:16浏览次数:46  
标签:gcd AI 代码 内部测试 开发者 工具 DIDACT 模型

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

摘要

  • 谷歌近日公布了自家的DIDACT(Dynamic Integrated Developer ACTivity,动态集成开发人员活动)框架,用AI技术增强软件工程,将软件开发的中间状态作为训练数据,辅助开发人员编写、修改代码,并实时了解软件开发的动态。
  • DIDACT是一个多任务模型,训练了编辑、调试、修复和代码审查等软件开发活动。谷歌内部已经部署了三个基于DIDACT的工具,分别是Comment Resolution(用于解决代码审查中的评论问题)、Build Repair(用于修复编译错误)和Tip Prediction(用于预测代码修改的建议)。这些工具都受到了数千名内部开发者的热烈反馈。
  • DIDACT不仅可以提高开发者的生产力,还可以作为一个通用的开发人员辅助代理。通过给模型输入一些开发活动的前缀,或者将多个预测串联起来,模型可以以一种令人惊讶的方式生成代码或建议。DIDACT为开发一种能够跨越软件开发过程的辅助代理铺平了一条有前途的道路。

正文

DIDACT框架的背景和目标

软件并不是一次性创造出来的。它是一点一点地改进,一步一步地完成——编辑、运行单元测试、修复编译错误、处理代码审查、再次编辑、满足语法检查器、再次修复错误——直到最终达到可以合并到代码库的水平。软件工程不是一个孤立的过程,而是一个涉及人类开发者、代码审查者、错误报告者、软件架构师和工具(如编译器、单元测试、语法检查器和静态分析器)之间交互的过程。

谷歌的软件工程工具链将与代码相关的每个操作都存储为工具和开发者之间交互的日志,并且已经这样做了几十年。原则上,可以使用这些记录来详细回放谷歌代码库如何一步步形成的关键过程——每次代码编辑、编译、评论、变量重命名等。这些日志是一个关于软件工程过程的宝贵数据源,但是很少被利用来训练机器学习模型。

谷歌近日公布了自家的DIDACT(Dynamic Integrated Developer ACTivity,动态集成开发人员活动)框架,旨在利用这些数据来训练大型机器学习模型来增强软件工程。DIDACT框架的创新之处在于,它使用软件开发过程作为模型的训练数据,而不仅仅是这个过程的最终结果——完成的代码。通过将模型暴露于开发者在工作时看到的上下文,以及他们作出的相应操作,模型可以学习软件开发的动态,并且更符合开发者如何花费他们的时间。

DIDACT是一个多任务模型,训练了编辑、调试、修复和代码审查等软件开发活动。模型的输入是一个开发者的工作空间,包括代码、错误信息、评论等,模型的输出是一个开发者的操作,如插入、删除、替换代码等。模型可以根据不同的任务和目标,生成不同的输出。

DIDACT框架的内部工具和效果

谷歌内部已经部署了三个基于DIDACT的工具,分别是Comment Resolution(用于解决代码审查中的评论问题)、Build Repair(用于修复编译错误)和Tip Prediction(用于预测代码修改的建议)。这些工具都集成在开发者的工作流程中,并且受到了数千名内部开发者的热烈反馈。

Comment Resolution是一个用于解决代码审查中的评论问题的工具,它可以根据评论者的意图,生成一些可能的代码修改建议。例如,如果评论者说“这里应该用const”,那么工具就会生成一个将变量声明为const的修改建议。开发者可以直接接受或拒绝这些建议,或者进行一些微调。这样可以节省开发者在代码审查中修改代码的时间和精力。

Build Repair是一个用于修复编译错误的工具,它可以根据编译器的错误信息,生成一些可能的代码修复建议。例如,如果编译器说“找不到符号foo”,那么工具就会生成一个导入foo所在模块或包的修复建议。开发者可以直接接受或拒绝这些建议,或者进行一些微调。这样可以节省开发者在调试中查找和修复错误的时间和精力。

Tip Prediction是一个用于预测代码修改的建议的工具,它可以根据开发者当前正在编辑的代码,生成一些可能有用或有趣的代码修改建议。例如,如果开发者正在写一个循环语句,那么工具就会生成一个使用列表推导式或函数式编程风格的修改建议。开发者可以直接接受或拒绝这些建议,或者进行一些微调。这样可以帮助开发者学习新的编程技巧或提高代码质量。

这三个工具都使用了相同的DIDACT模型,只是根据不同的任务和目标,给模型输入了不同的前缀或后缀。例如,Comment Resolution给模型输入了评论内容作为前缀,Build Repair给模型输入了错误信息作为后缀,Tip Prediction给模型输入了当前编辑位置作为前缀。这说明DIDACT模型具有很强的灵活性和可扩展性,可以适应不同的软件开发场景和需求。

DIDACT框架的未来展望

DIDACT不仅可以提高开发者的生产力,还可以作为一个通用的开发人员辅助代理。通过给模型输入一些开发活动的前缀,或者将多个预测串联起来,模型可以以一种令人惊讶的方式生成代码或建议。例如,给模型输入“写一个函数来计算两个数的最大公约数”作为前缀,模型就会生成一个实现该功能的函数;将多个预测串联起来,模型就可以完成一个完整的软件项目。

我们相信DIDACT为开发一种能够跨越软件开发过程的辅助代理铺平了一条有前途的道路。我们希望未来能够训练出一个能够理解、沟通、协作、创造和学习的能力。我们期待未来能够与更多的开发者和研究者分享我们的工作,共同推动AI+软件工程的发展。

举例说明

为了让读者更好地理解DIDACT框架的工作原理和效果,我们在这里给出一些基于DIDACT的内部工具的使用示例。

Comment Resolution

假设你是一个谷歌内部的开发者,你正在进行一个代码审查,你收到了一个评论,说你应该使用一个更简洁的语法来实现一个功能。评论如下:

# Reviewer comment: You can use a list comprehension here instead of a for loop.
result = []
for x in range(10):
  if x % 2 == 0:
    result.append(x * x)

你可以使用Comment Resolution工具来生成一些可能的代码修改建议,如下:

# Suggested change 1: Use a list comprehension with a condition
result = [x * x for x in range(10) if x % 2 == 0]

# Suggested change 2: Use a filter and a map function with a lambda expression
result = list(map(lambda x: x * x, filter(lambda x: x % 2 == 0, range(10))))

你可以根据你的喜好和代码风格,选择其中一个建议,或者进行一些微调。这样可以节省你在代码审查中修改代码的时间和精力。

Build Repair

假设你是一个谷歌内部的开发者,你正在编写一个Java程序,你遇到了一个编译错误,说找不到符号Math。错误信息如下:

// Error message: cannot find symbol
//   symbol:   variable Math
//   location: class Example
public class Example {
  public static void main(String[] args) {
    int x = Math.abs(-10); // Use the absolute value function from the Math class
    System.out.println(x);
  }
}

你可以使用Build Repair工具来生成一些可能的代码修复建议,如下:

# Suggested fix 1: Import the java.lang.Math class
import java.lang.Math; // Add this line at the top of the file

public class Example {
  public static void main(String[] args) {
    int x = Math.abs(-10); // Use the absolute value function from the Math class
    System.out.println(x);
  }
}

# Suggested fix 2: Use the fully qualified name of the Math class
public class Example {
  public static void main(String[] args) {
    int x = java.lang.Math.abs(-10); // Use the absolute value function from the Math class
    System.out.println(x);
  }
}

你可以根据你的喜好和代码风格,选择其中一个建议,或者进行一些微调。这样可以节省你在调试中查找和修复错误的时间和精力。

Tip Prediction

假设你是一个谷歌内部的开发者,你正在编写一个Python程序,你想要实现一个功能,但是不确定如何写。你可以使用Tip Prediction工具来生成一些可能有用或有趣的代码修改建议。例如,假设你正在写一个函数来计算两个数的最大公约数,你已经写了一部分代码,如下:

# Write a function to compute the greatest common divisor of two numbers
def gcd(a, b):
  # TODO: complete this function

你可以使用Tip Prediction工具来生成一些可能的代码修改建议,如下:

# Suggested tip 1: Use recursion and Euclid's algorithm
def gcd(a, b):
  # Base case: if b is zero, a is the gcd
  if b == 0:
    return a
  # Recursive case: return the gcd of b and the remainder of a/b
  return gcd(b, a % b)

# Suggested tip 2: Use a while loop and Euclid's algorithm
def gcd(a, b):
  # Loop until b is zero
  while b != 0:
    # Update a and b using the remainder of a/b
    a, b = b, a % b
  # Return a as the gcd
  return a

# Suggested tip 3: Use the math.gcd function from the standard library
import math # Add this line at the top of the file

def gcd(a, b):
  # Return the gcd of a and b using the math.gcd function
  return math.gcd(a, b)

你可以根据你的喜好和代码风格,选择其中一个建议,或者进行一些微调。这样可以帮助你学习新的编程技巧或提高代码质量。

结论

DIDACT是一个用AI技术增强软件工程的框架,它使用软件开发过程作为训练数据,训练了一个多任务模型,可以辅助开发人员编写、修改代码,并实时了解软件开发的动态。DIDACT已经在谷歌内部部署了三个工具,分别是Comment Resolution、Build Repair和Tip Prediction,这些工具都受到了数千名开发者的热烈反馈。DIDACT不仅可以提高开发者的生产力,还可以作为一个通用的开发人员辅助代理,通过给模型输入一些开发活动的前缀,或者将多个预测串联起来,模型可以以一种令人惊讶的方式生成代码或建议。DIDACT为开发一种能够跨越软件开发过程的辅助代理铺平了一条有前途的道路。我们期待未来能够与更多的开发者和研究者分享我们的工作,共同推动AI+软件工程的发展。

大语言模型能力提高,各种AI应用体验和质量会提高,工具也更简单实用。最重要的是学习运用各种AI工具,大幅释放生产力。 想上手使用new bing,了解更多AI技术、应用和ChatGPT进展,欢迎点击如下链接加入 GPT4体验

标签:gcd,AI,代码,内部测试,开发者,工具,DIDACT,模型
From: https://blog.51cto.com/u_13279124/6446906

相关文章

  • 【已解决】可视化ValueError Cannot mask with non-boolean array containing NA NaN
    bug:raiseValueError(na_msg)ValueError:Cannotmaskwithnon-booleanarraycontainingNA/NaNvalues对应的代码:asian_countries=region_data.dropna(subset=['CountryCode'])[region_data['Region'].str.contains('Asia')][&......
  • ai问答:Vue3中使用computed和watch监听pinia数据的区别
    在Vue3中,通过computed来监听pinia中的state数据:import{defineStore}from'pinia'import{useStore}from'pinia'import{computed}from'vue'conststore=defineStore('store',{/*...*/})exportdefault{setup(){......
  • [从jQuery看JavaScript]-变量与作用域链(Variable and Scope Chain)
    jQuery片段: 1.var2.//Willspeedupreferencestowindow,andallowsmungingitsname.3.window=this,4.//Willspeedupreferencestoundefined,andallowsmungingitsname.5.undefined,6.//MapoverjQueryinc......
  • 【人人懂AI】用chatGPT学会大模型GPT
    1.一句话掌握最新关键知识点1.1什么是chatGPT?chatGPT是基于OpenAI公司的人工智能大模型GPT系列开发出的一个网页版的对话机器人。用户可以在网页登录与chatGPT进行语言交流,支持多种主流语言,chatGPT与传统大的智能对话机器人不同,它可以几乎接近人类的理解和表达能力,在对话中扮......
  • demosaicnet-master的包代码阅读笔记
    init.py我在学init用法时候的笔记该文件里面都是导入模块,其中从dataset.py是导入所有模块,因为模糊导入的__all__没有定义。from.modulesimportBayerDemosaickfrom.modulesimportXTransDemosaickfrom.mosaicimportxtransfrom.mosaicimportbayerfrom.mosaicim......
  • [MDP.DevKit.OpenAI] 使用OpenAI API+C#開發的客服機器人範例
    使用OpenAIAPI+C#開發的客服機器人範例,能讀取知識內容來回答問題。客戶問題:-我想喝綠豆湯該去哪一樓?客服回答:-您可以前往B2的美食生活館,那裡有各種美食餐廳、烘焙店、糕點店、特色咖啡館,以及食品超市,或是售賣烹飪器具、餐具等生活用品店,您可以在那裡找到綠豆湯。知識內容:-......
  • ORACLE中Drop table cascade constraints
    当你要drop一个table时,如果删除table的动作会造成trigger或constraint产生矛盾,系统会出现错误警告的讯息而不会允许执行.。一个极简单的例子,例如你有一个员工基本资料表,上面可能有员工编号和员工姓名等字段,另外有一个员工销售表,上面有员工编号和员工销售额两个字段,员工薪资......
  • GMail add 'voice and video chat' support
    GMail增加对视频聊天的支持(可能需要代理才可访问)需要安装额外的插件以支持插件会安装在C:\DocumentsandSettings\UserName\LocalSettings\ApplicationData\Google\GoogleTalkPlugin下,例如:我的在C:\DocumentsandSettings\Nick\LocalSettings\ApplicationData\Googl......
  • win10系统下将yolo v2-tiny模型部署于Maix dock开发板进行目标检测
    (1)制作目标检测数据集使用labelimg软件进行图片的标注如图所示举一个例子:点击open,导入等待标注的图片,进行目标的标注后生成标注从config文件,数据分为train_img文件夹与train_ano文件,图片与标注的信息文件。一般每一个class至少要有40张以上图片数据。(2)建立训练模型模型的选择有......
  • 最新PS bate 爱国版更新,支持AI创意填充
    最新PSbeta爱国版更新了,小编第一时间为大家带来了photoshopbeta完美激活破解版资源。最新Photoshop集成AI后,新的功能深受设计师的喜爱。 具体功能:生成对象:选择图像中的一个区域,然后通过文本提示描述您想要添加/替换的内容。生成背景:选择主题背后的背景,然后根据文本提示生......