逐帧分析,Devin如何成为AI软件开发者

Devin官方Blogicon-default.png?t=N7T8https://www.cognition-labs.com/blog

先说结论

最近一个十人团队的初创公司公布的人工智能模型Devin火了一把,因为其宣称其是首个人工智能软件工程师。铺天盖地的公众号消息无一不打着“程序员干掉了自己的饭碗”的口号在为其卖力宣传着。实际效果如何,以下是我根据上面官方博客的介绍和几个演示视频得来的一些看法。

1、如果你有明确的目标,可以让Devin做一些尝试。

在演示视频中,大部分的要求都需要人类做出明确的指示,比如去哪里获取资料,做一个什么样的软件,有些类似需求沟通的过程。这要求人类需要了解如何与Devin进行有效沟通。

2、Devin未必能对存量项目进行梳理和重构

Devin的执行过程还是类似通过对任务进行分解,然后带着目的一步步的去执行。这适合于没有历史包袱的开创性任务,比如演示中的做一个小游戏、生成一张hidden text的图像等。但存量项目中牵扯太多隐含逻辑和大量代码,Devin未必可以胜任。

3、Devin没有自我驱动的能力

Devin的每一步思考都需要人工参与,比如需要给他指出哪里不够好,哪里有bug,这样他才会去定位、去分析。即使是演示视频3中对开源项目编写测试用例并进行调试和bug修复,一开始也需要人为告知其具体是哪一段代码可能有问题,或者给他提供issues信息、readme信息。

总体而言,Devin最大的突破是long-term reasoning and planning,其他的部分比如为其配备的workspace,随时上报进度并进行交流这些仍然是GPT或者是类AutoGPT的内容。如果希望其真正具有一个Software Engineer的素质,还有很多努力需要做。正如Cognition博客最后说的,建立Devin只是第一步,最艰难的挑战还在后面。

官方案例

截止2024-03-14,官网上的演示视频有如下几个。

  1. 在阅读了一篇博客文章后,Devin在Modal上运行ControlNet,为Sara制作隐藏信息的图像。YouTube
  2. Devin制作了一个模拟生命游戏的互动网站!它会增量地添加用户要求的功能,然后将应用程序部署到netflix上。YouTube
  3. Devin可以自主地发现和修复代码库中的错误。Devin帮助开发者维护和调试开源项目。YouTube
  4. Devin可以训练和微调自己的AI模型。‍Devin为一个大型语言模型设置了微调,只给GitHub上一个模型库的链接,他可以自己拉取模型,阅读README,根据文档描述构建环境并执行微调。在微调报错后,他也能判断出是环境问题还是代码问题,并快速修复。YouTube
  5. Devin可以解决代码库中的bug和功能要求。只要提供一个github issue的链接,Devin就会完成所需的所有设置和上下文收集。YouTube
  6. Devin可以为成熟的生产代码库做出贡献。‍Devin解决了sympy Python代数系统中对数计算的错误。要知道这个项目代码量有68万行。YouTube
  7. 甚至可以让Devin在UpWork上完成一个真正的工作,比如搭建一个图像识别的人工智能模型。YouTube

下面对其中比较有代表性的两个案例进行逐帧分析。

发现和修复代码库中的错误

案例三中使用的代码库为github上开源的c++项目cp-book,代码行数大约7265,但在案例六中,Devin也能处理更大代码规模的项目,比如68万行代码的sympy。

cp-book的统计结果
cp-book的统计结果

sympy的统计结果(另一案例中的项目)
sympy的统计结果(案例六的项目)

首先,用户明确告知Devin项目路径、可能有bug的结构体名称、要求添加测试用例

可以从步骤列表中看出,Devin的规划能力不错,每一个步骤都是可执行且相关的。更重要的是,Devin的规划和执行是嵌套进行的,这一点从步骤中已经包含了mod_constraint所在的modnum.hpp文件位置就可以看出来。就不知道Devin是用的什么技术来实现检索和快速定位的了,RAG?Long-Term?Who knows?

用户给出了详细的测试用例,详细到可以说任何开发者看了都明白如何写的程度。

Devin在接收到要求后,几乎立即就完成了测试用例的代码编写。

用户在已有测试基础上,提出了更高的要求,即用循环实现多轮随机值的回归测试。

这一次的回归测试验证失败,证明代码中仍然存在bug

Devin在代码中报错前的位置添加了打印输出,来观察变量和结果的变化

在打印的结果中,某个case的结果出现了负数,而这个程序不应该出现负数。很显然,Devin也发现了这一点,然后定位到导致出现负数的代码行,修复这个bug后,再次执行。

最终全部测试用例通过。

完成一个真正的工作

upwork是美国的一个自由职业平台市场,Cognition的研究者希望看看Devin能否胜任一个真实的工作。

下面是研究者在upwork上找到的一个工作任务,利用roadDamageDetection2020项目实现自动识别道路毁坏程度。

这个项目看起来很有趣,但要将其运行起来也有一定难度。

研究者将upwork上的工作要求原封不动的转给了Devin。可以看到,Devin知道需要拉取这个开源项目,并理解这个项目如何部署,比较有趣的是,Devin会分析完成这项任务可能的一些细节,比如是否需要提供更多的图像或数据。这是不是像极了小心翼翼的乙方。

Devin表示他会阅读文档和代码来弄清楚如何安装环境和运行模型。下面的灰色小字意味着这时候Devin已经有一个初始计划了,并且已经开始执行。

通过初始计划的执行(阅读理解文档和代码),Devin对该计划进行了进一步的更新,可以看到这个计划更加具有可执行性和相关性。

接着可以看到他开始工作的过程,下面是拉取了roadDamageDetection2020到本地。

开始用pip install -r requirements.txt安装环境。不出意外出了一个版本找不到的意外。

在Planner中可以看到Devin的规划方式,那就是将要做的事列一个清单,把当前要做的事当成第一优先级来进行重点关注,比如现在他的关注点是解决依赖安装的问题。

可以看到Devin将requirements中的torch版本改了。

随着环境的变化,清单中的内容也在不断更新,已经完成的工作有些被合并了,还有新的工作被添加了进去。(比如上面的“set up the environment for running the models”任务就消失了)

在拉取sample数据后进一步执行又发现了一些问题。

Devin开始Debug,在代码中插入print语句来打印关键变量的值。

定位到异常位置后,Devin很快修复了Bug。

一切就绪后,Devin将该项目运行了起来。

Devin很快意识到项目跑起来,没有model文件也不行,于是向研究人员提出要认证信息用来获取Google Drive网盘上的模型文件。

拿到认证信息后,Devin又开始了新的计划,下载模型文件、训练、验证、测试数据集...

经过一系列的处理,最终Devin成功运行了这个项目,并利用该项目完成了实例验证,对一些道路图像做出了推理分析。而且询问是否需要对一些图像的检测进行一些可视化的处理,方便我们更好的理解分析结果。

研究员接受了这一建议,于是Devin返回了图像和报告的链接。到这里,Devin已经完成了UpWork所要求的所有工作!

  • 51
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值