17611538698
webmaster@21cto.com

Stack Overflow 深度:自愈式代码是软件开发的未来

人工智能 0 1333 2023-06-19 10:13:11

图片

开发者喜欢自动化解决一些问题,这是个确定说法。

随着生成式 AI 的兴起,这一概念会在全新的技术能力和水平上开始应用,包括代码的创建、维护与改进。

大语言模型吸引人的一面,在于它们能够通过自我反省来提高输出的响应,通过将响应反馈给模型,然后再要求模型改进响应,进而识别错误,这样就能更好的产生符合事实或令用户满意的内容。

通过逐步形式的工作来解决问题,这些系统比那些仅仅为了找到正确的最终答案而调整的系统更准确。 

目前AIGC领域技术仍在快速发展,一本正经的胡说八道仍然存在,这 包括 LLM 支持的聊天机器人常出现的问题。

越来越多的研究表明,更具指导性的自回归方法可能带来更好的结果。

当AIGC应用于软件开发和 CI/CD 领域时,也会变得更加有意思。

如今,很多开发人员已经将它于自动创建代码、检测错误、测试解决方案和记录想法的流程。

还有几个人写过关于自我修复代码的想法。可以到 Stack Overflow 的 CI/CD Collective看看 ,会发现许多技术专家将这些想法付诸实践的案例。

比如,当代码运行出错时,它会给出详细错误消息。如果存在问题,该错误消息将准确说明问题所在,并指出修复的方向。

自我代码修复程序是智能的自动化,可以有效减少错误、并允许优雅的回退和管理警报。比如当你收到空间使用率为 90% 的警告时,你可能想要添加一点磁盘空间或删除一些文件。或者,你试过把它关掉,然后再打开吗?

开发者都喜欢自动化解决自己的问题,伴随着生成式 AI 的兴起,这一概念很可能在全新的水平上应用于代码的创建、维护与改进。


更多的生成式代码需要更多的质量控制


LLM 快速生成大量代码的能力非常强大,这表示开发人员,甚至非开发人员,将比以往任何时候向代码库中添加更多的东西。

没错,这会带来一系列的挑战。 


“我经常从软件工程师们那里听到的其中一件事是,他们说,‘好吧,我的意思是,现在任何人都可以使用一些工具来生成代码,但我们担心的可能是代码生成质量的问题,'”Google Cloud 开发负责人 Forrest Brazeal 说。
这些系统输出代码的速度与数量让人难以招架。


“比如需要关注并审查团队中,某人编写的 7,000 行代码拉取请求。做到这一点,并获得有意义的反馈相当困难。当 AI 生成如此大量的代码时,它并没有让开发变得更容易。因此,人们正在迅速进入包括软件工程最佳实践的,并确保有效使用的新的生成式 AI 世界。”
“人们长期以来一直在谈论技术债,现在又要开一张新的信用卡,这是以往人类无法做到的方式,用人工智能的速度来积累技术债务。”


Armando Solar-Lezama 是麻省理工学院计算机科学与人工智能实验室的一名教授,他指出:“我认为机器编写了大量劣质代码,它们是存在风险的,”他补充说公司不得不重新考虑如何与新工具的功能协同工作的方法,以规避此种情况发生。
最近他与谷歌的一些开发人员进行了沟通,他们帮助构建和测试了新的 AI 模型,这些模型为 Bard 等工具中的代码建议提供支持。

Paige Bailey 是谷歌负责生成模型的项目经理,负责将 DeepMind 和谷歌大脑整合在一起的新部门。Bailey 说:“将 AI 生成的代码想象成由‘ L3 SWE助手,根据你的吩咐编写的代码’,但是你真的要仔细检查一下。” 
不过,Bailey 也认为,一些检查代码的准确性、安全性和速度的工作最终也会落到 AI 身上。

“随着时间的推移,我确实期望大型语言模型将开始递归地将自己应用于代码输出。

因此,Google Brain 已经进行了一项研究,表明可以递归地应用 LLM,如果有生成的代码,开发者只需要说,“hi,确保没有任何错误。确保它是高性能的,确保它是快速的,然后快给我代码”,然后这给到最终显示给用户的内容是靠谱的。现在这些,会随着时间的推移而改善。”



今天,人们在建造和试验什么?



在谷歌内部,已经在使用这项技术来帮助开发者加快解决代码审查意见的过程。

最近一篇关于这种方法的论文里,作者这样写道:

“截至今天,谷歌的代码更改作者通过应用机器学习建议的编辑来处理大量审阅者的注释。我们预计这将在 Google 每年将花在代码审查上的时间减少近数十万小时。尚未经过评审但又是积极的反馈表明,ML 建议的代码编辑功能提高了 Google 员工的工作效率,并使他们能够更专注于创造性和更复杂的任务。”
“在许多情况下,当你通过代码审查过程时,你的审查者可能会说,请修复这个,或者请重构它以提高可读性,”谷歌 Duet 编码助手的 PM Marcos Grappeggia 说。他认为可以对此作出回应的 AI 代理是一种用于审查评论的高级 linter。“就减少完成修复的时间而言,我们认为这是有希望的事情。” 建议修复功能不会取代人类,“但它有帮助,它会为你提供了一个思考的起点。

最近,我们又看到了一些有趣的实验,这些实验将这种审查功能应用于尝试部署代码过程。

假设代码推送并触发有关 CI 管道中构建失败的警报。插件触发 GitHub 操作,自动将代码发送到沙箱,AI 可以在沙箱中检查代码和错误,然后提交修复。新代码再次通过管道运行,如果通过测试,则真正移至真实部署环境。
 

图片
付出代价:linters、维护者和与技术债将永无休止的战斗下去


在 CI/CD 期间,发现问题或在出现错误时解决它们是一件好事情。

但是,我们需要更进一步,假设你在一家拥有庞大且不断增长的代码库的公司工作你的团队有一定程度的技术债都是正常的。如果此时,你有一个 AI 代理来审查旧代码,并提出它认为可以使你的代码运行更高效的更改建议,那会是什么样

它可能会提醒您库中有利于您的体系结构的最新更新。或者它可能在最近的博客或文档版本中阅读了一些改进某些功能的新技巧。AI 的建议每天早上都会以拉取请求的形式到达,供人类审查。 

CodiumAI 的 CEO Itamar Friedman 目前正在编写一款应用,解决智能代码的这个问题。他的公司有一个 AI 机器人,作为一个机器程序员与开发人员一起工作,通过失败的测试提示人们,指出边缘情况,在他们编写的代码中找出漏洞,目前在确保最终产品尽可能没有可能的bug和错误。
 Itamar Friedman 说,许多用于衡量代码质量的工具都侧重于性能、可读性和避免重复等方面,Codium 致力于开发允许测试底层逻辑的工具,Friedman 将其视为功能代码质量的狭义定义。

通过AI机器人,他相信现在可以自动改进代码,并且很快就会无处不在。“如果你能够验证代码逻辑,那么你可能还可以提供帮助,例如,自动化拉取请求并验证这些是否根据按代码最佳实践完成。

Itamar 还为 AutoGPT 做了不少贡献,他与其创建者进行了交谈,他们共同看到了人类引导 AI 的未来,反之亦然。


“一台机器人会遍历你的整个存储库,然后告诉你,它确定的所有最佳(一般)实践。然后,一些技术总监回顾这个说,哦,我的天哪,这就是我们想要做的或者不想做的。这便是我们测试的最佳实践,这是我们调用 API 的最佳实践,这是我们喜欢进行排队的方式,这是我们喜欢进行缓存的方式等等。它还是可配置的。就像规则,实际上是人工智能建议和人类定义的混合体,然后人工智能机器人将使用这些规则来协助开发人员,这是一件非常了不起的事情。


Stack Overflow 如何使用生成式工AI 进行试验? 


Stack Overflow 现在有一个内部团队致力于探索与开发 AI,包括最新的生成式 AI 浪潮以及更广泛的领域,如何改进我们的平台与产品。我们的目标是公开构建,以便我们可以将反馈带入我们的流程。

本着这个精神,我们分享了几个实验,比如帮助用户为他们的问题设计一个好标题。此处的目标是让提问者和评论者的生活更轻松,鼓励每个人参与我们公共网站上发生的知识交流。

我们很容易的想象一个更具迭代性的过程,可以利用多步骤提示和思维链推理的力量,根据研究表明,这些技术可以极大地提高 LLM 输出的质量和准确性。

人工智能系统可能会审查一个问题,建议调整标题以提高易读性,并提供有关如何更好地格式化问题正文中的代码的想法,并在末尾加上一些问题额外的标签以改进分类。另一个系统是审阅者,将查看更新的问题并为其分配分数,如果它通过了某个阈值,则可以将其返回给用户进行审核。如果没有通过,系统会再次处理,改进其先前的建议,然后重新提交其输出以供批准通过。

我们很幸运能够与 Prosus 的同事一起工作,他们中的许多人在机器学习领域拥有数十年的经验。我们最近与 Prosus AI 的数据科学负责人 Zulkuf Genc 聊天。他过去专注于自然语言处理 (NLP),共同开发了基于 LLM 的模型来分析财务情绪,FinBert ,该模型仍然是HuggingFace 同类产品中最受欢迎的模型之一。
他在本月的一次采访中告诉我:“我过去曾尝试在我的学术研究中使用自主代理,但它们从未奏效过,而且必须以更多基于规则的启发式方法为指导,所以不是真正的自主式学。” 最新的AI技术改变了这一切。他解释说,我们现在正处于可以要求代理人自主执行并获得良好结果的阶段,尤其是在任务指定得当的情况下。
就Stack Overflow 而言,有一个很好的指南来说明质量输出应该是什么样子,因为对于什么是好的问题或答案有明确的定义。

那么针对于开发者,如何应对呢? 

开发人员当然有理由怀疑和担心这种自动化将对行业产生的影响。然而,就目前而言,这些工具可以增强和增强现有技能,但还不能取代真正的人类。一些机器人似乎已经学会了自动进入循环并退出工作。这些不知疲倦的代理人,始终致力于保持开发者的代码整洁。
我想我们会很幸运,到目前为止,他们似乎和普通的人类开发人员一样,容易被耗时的弯路分散注意力吗?

图片


创建该插件的Calvin Hoenes解释说。“我们对重试与循环机制进行了多项改进,因此你不会遇到奇怪情况,但这是它的基础机制,”为了使代理更加准确,他将有关此项目代码的文档添加到使用Pinecone创建的矢量数据库中。这将允许它学习基础模型可能无法访问的东西,并根据需要会定期来更新。 

如今他的工作发生在 CI/CD 管道中,但他梦想着这样一个世界——在这个世界中,这类代理可以帮助修复世界上已经存在的代码所产生的错误。“这非常令人着迷的是,当你实际在生产代码中运行并产生错误时,它能否在运行中自行修复?是的,在你的 Kubernetes 集群中,如果一个组件检测到故障,它就会启动修复动作。” 

一个吊舱被拆下进行维修,另一个吊舱将立即取而代之,当原来的吊舱准备就绪时,它会重新投入使用,Hoenes 这样形容道,

目前,我们仍需要人类参与其中,会不会有一天计算机程序被期望在它们被制作和成长时自主地自我修复?“我的意思是,如果你有很好的测试覆盖率,是的,如果你有 100% 的测试覆盖率,你就会有一个非常干净、干净的代码库,我们可以看到这种情况发生。在可预见的中间,人类参与其中可能会更好。”

技术在进步,但拖延症仍然不变

Stackoverflow 正在汇编开发者调查的结果,会有大量有趣的数据,可以分享开发者如何看待这些工具,以及他们已经在多大程度上将它们应用到他们的工作流中。

如果你在尝试这样的想法,从自我修复代码到 Roboblogs,请给我们留言,我们将尝试将你的经验融入我们的下一篇文章中。


编译:洛逸

来源:

https://stackoverflow.blog/2023/06/07/self-healing-code-is-the-future-of-software-development/

评论