Devin官方Bloghttps://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,官网上的演示视频有如下几个。
- 在阅读了一篇博客文章后,Devin在Modal上运行ControlNet,为Sara制作隐藏信息的图像。YouTube
- Devin制作了一个模拟生命游戏的互动网站!它会增量地添加用户要求的功能,然后将应用程序部署到netflix上。YouTube
- Devin可以自主地发现和修复代码库中的错误。Devin帮助开发者维护和调试开源项目。YouTube
- Devin可以训练和微调自己的AI模型。Devin为一个大型语言模型设置了微调,只给GitHub上一个模型库的链接,他可以自己拉取模型,阅读README,根据文档描述构建环境并执行微调。在微调报错后,他也能判断出是环境问题还是代码问题,并快速修复。YouTube
- Devin可以解决代码库中的bug和功能要求。只要提供一个github issue的链接,Devin就会完成所需的所有设置和上下文收集。YouTube
- Devin可以为成熟的生产代码库做出贡献。Devin解决了sympy Python代数系统中对数计算的错误。要知道这个项目代码量有68万行。YouTube
- 甚至可以让Devin在UpWork上完成一个真正的工作,比如搭建一个图像识别的人工智能模型。YouTube
下面对其中比较有代表性的两个案例进行逐帧分析。
发现和修复代码库中的错误
案例三中使用的代码库为github上开源的c++项目cp-book,代码行数大约7265,但在案例六中,Devin也能处理更大代码规模的项目,比如68万行代码的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所要求的所有工作!
文章来源:https://www.toymoban.com/news/detail-850686.html
文章来源地址https://www.toymoban.com/news/detail-850686.html
到了这里,关于逐帧分析,Devin如何成为AI软件开发者的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!