大规模验证智能体开发(8分钟阅读)

TLDR AI 产品

摘要

Cognition的Ido Pesok分享了将自主端到端测试集成到Devin中的经验,指出这是Devin会话首次被异步触发的数量超过交互式触发,使得合并前验证的结果成为硬性要求而非锦上添花。

Cognition的Ido Pesok分享了将自主端到端测试集成到Devin中的经验,指出这是Devin会话首次被异步触发的数量超过交互式触发,使得合并前验证的结果成为硬性要求而非锦上添花。大约六个月前,Devin的框架增加了计算机使用工具,而突破发生在工程师开始并行运行10到20个Devin实例时,每个实例都有自己的开发服务器,这在单个笔记本电脑上是不可能做到的。
查看原文
查看缓存全文

缓存时间: 2026/06/01 18:38

Cognition 公司的 Ido Pesok 分享了将自动化端到端测试集成到 Devin 中的经验教训。他指出,有史以来第一次,Devin 的异步触发会话数量超过了交互式会话,这使得“合并前验证“成为硬性要求,而非锦上添花。Devin 的测试框架大约在六个月前获得了计算机使用工具,而突破性进展发生在工程师开始并行运行 10-20 个 Devin 实例时——每个实例都拥有自己的开发服务器,这在单台笔记本电脑上是不可能实现的。


规模化验证智能体开发

我们从在 Devin 虚拟机中构建端到端测试能力中学到的东西。

三个月前,我加入 Cognition,协助构建软件工程的未来。自作为首个 AI 软件工程师推出以来,Devin 已经取得了长足进步,而幕后团队每天都在实际使用 Devin,这让我叹为观止。

其中最引人注目的是 Devin 如何利用其计算机在云端自主验证工作。从验证我们的 Slack 集成到测试复杂的 Windsurf 功能,团队始终让一群 Devin 处于测试模式。在本文中,我将分享为何我们如此专注于端到端的云端智能体验证,以及我们如何着手构建这一能力。

向异步软件工程的转变

在 Cognition,我们最近达到了一个新的里程碑。有史以来第一次,通过事件、自动化、调度和其他 Devin 触发的异步 Devin 会话数量超过了交互式会话。随着我们最近推出的自动分诊功能,我们预计这一趋势将继续加速。

随着我们向异步世界的过渡,开发者能够看到经过验证、可随时合并的结果变得至关重要。今年早些时候,我们推出了 Devin 审查——一种能扩展人类对复杂代码差异理解能力的代码审查工具。它不仅能标记错误——Devin 会修复每个发现,直到差异确认无误,从而形成闭环。但仅凭干净的审查往往不够——工程师希望看到变更得到端到端测试,就像他们自己测试一样。

当 Devin 在你甚至还没看到错误频道中的消息之前,就提交了一个修复用户投诉的 PR 时,那种感觉棒极了。而让这一切变得神奇的是,该 PR 附带了修复确实有效的证明。这种神奇可能很快就会成为必需——随着主动型智能体带来的 PR 越来越多,未经验证的变更将迅速变得难以管理。

GIF有史以来第一次,异步触发的 Devin 会话数量超过了交互式会话。

有史以来第一次,异步触发的 Devin 会话数量超过了交互式会话。

从一开始

自从 Devin 推出以来,它就一直在云虚拟机上展示其工作成果。大约六个月前,我们扩展了 Devin 的计算机使用能力。具体来说,我们在 Devin 的测试框架中添加了工具,用于截取屏幕截图、移动鼠标、点击、拖拽、输入、按键、滚动、等待、缩放以及开始/停止录制。计算机使用功能已经存在了一段时间,但我们发现前沿实验室最新一批模型已经开始真正擅长利用这些工具。

计算机使用功能为 Devin 解锁了一些有趣的新能力,比如构建并运行桌面游戏,或者使用浏览器在亚马逊上订购商品。但我们注意到的真正突破在于 Devin 测试自身工作的能力。Devin 会启动应用,逐一点击浏览,并确认其更改确实有效——就像工程师所做的那样。一切都在云端运行,并且可以并行扩展。当我看到工程师们并行运行 10 到 20 个 Devin,每个都拥有自己的开发服务器,处理各种变更时,这一点让我深受震撼——这在单台笔记本电脑上根本无法实现。自动化云端测试开始为我们节省大量时间,因为我们不再需要在本地运行和验证代码。

说实话,走到这一步并非一帆风顺。我们一路上遇到了不少失败模式,每一种都教会了我们如何让这个系统更可靠。

提高可靠性

在早期版本中,Devin 在测试过程中很容易偏离方向。这以各种方式发生:过度测试产品中不相关的部分,在到达功能之前迷失在设置过程中,或者干脆遗漏了 PR 本应更改的核心行为。

为了解决这个问题,当 Devin 进入测试模式时,我们让它首先编写一个测试计划,详细说明要测试的明确目标。该计划必须基于源代码,而不是假设。如果不以代码为基础,我们发现模型倾向于假设它们可以走通应用中并不存在的路径。此外,测试计划大大增加了 Devin 能够成功测试的变更复杂度。我们遇到的一些最雄心勃勃的请求包括需要多个服务运行、配置特定管理员设置、启用正确标志,然后才能触及行为的特性。当提前阅读代码时,Devin 更有可能正确设置环境,而不是在测试进行到一半时发现缺少了某些东西。测试计划起到了一种预对齐的作用,使 Devin 在主动测试时不太容易偏离方向。

当 Devin 按计划工作时,它会在时间线中添加自己的注释。这些包括设置说明、每个命名测试的开始,以及标记为通过、失败或未测试的断言。我们发现,如果 Devin 在执行操作前就注释其预期行为,它就会较少在结果上撒谎——就像测试驱动开发一样,如果你提前承诺了预期结果,那么将意外结果视为通过就会困难得多。

测试流程的某些部分几乎每次运行都会重复。登录就是一个典型例子:通过计算机使用驱动登录表单通常意味着输入电子邮件、完成 SSO、点击重定向、等待每次页面加载,逐张截图。这在时间和令牌消耗上可能都很大。为了提高这些操作的可靠性和成本效益,Devin 将这项工作提取到一个确定性脚本中,该脚本位于我们仓库的测试技能中。这样,Devin 可以在几秒钟内运行该脚本并获取一个经过身份验证的浏览器会话,然后直接进入测试的核心部分。这些脚本的确定性特性极大地降低了不稳定性。我们更新了 Devin,使其也能自行闭环。当 Devin 以艰难的方式弄清楚某个设置步骤时,它可以建议将该知识作为测试技能保存到仓库中,并以一键 PR 的形式向用户提出修复建议。

GIF一个登录技能让 Devin 在几秒钟内获得经过身份验证的会话,因此运行时间都花在了点击/截图/断言的循环上,以证明变更的有效性。

一个登录技能让 Devin 在几秒钟内获得经过身份验证的会话,因此运行时间都花在了点击/截图/断言的循环上,以证明变更的有效性。

我们还在尝试将测试阶段路由到不同的模型。由于测试依赖于与编写代码不同的优势,例如读取屏幕截图、跟踪 UI 状态以及决定下一个浏览器操作,因此某些模型在这方面确实比通常用于编辑代码的模型更擅长。

如今在 Devin 中使用自主测试

目前,Devin 通过两种方式进入测试模式:明确要求测试某项更改,或者,在 Devin 创建 PR 后,它会主动提供测试该更改(如果适用)。从那里开始,它会创建测试计划并开始工作。

通常,当你初次开始使用 Devin 的测试功能时,它可能需要你的帮助。一个很好的例子是,如果它在本地运行你的应用时需要密钥。为了让这个过程更顺畅,Devin 能够在会话中向你询问任何可能缺失的凭据或其他信息。对于更困难的情况,你可以接管 Devin 的计算机并输入诸如 OTP 验证码之类的内容。好消息是,一旦 Devin 完成仓库的设置,它能够保存一个声明式配置,以 YAML 蓝图的形式生成一个快照,供将来的每次会话启动时使用。

你得到的结果

当 Devin 完成测试时,它不仅仅是告诉你应用是否有效。原始的屏幕录制很有用,但我们认为仅此还不够——你需要理解你所看到的内容、Devin 执行每个操作的原因,以及测试的哪些部分通过了或失败了。

为了快速审查,Devin 会返回一份测试报告,其中包含运行过程中关键时刻的带标签截图,这样你可以快速了解 Devin 测试了什么以及应用当时的样子。

如果你想要更深入的审查,Devin 还会生成带丰富播放器界面的测试视频,其中包括章节,让你可以跳转到测试的不同部分,快速浏览整个运行过程,并在按时间顺序排列的列表视图中检查通过或失败的断言。在后处理过程中,操作之间的空闲时间被压缩,而操作前后的时刻则以正常速度播放。这样,长时间运行会被浓缩成一段你实际可以观看的录制内容。这些产物在我们的网页界面中可用,如果 Devin 是从 Slack 启动的,也会分发到 Slack。

GIFDevin 运行应用,执行流程,并返回带有章节和通过/失败断言的录制内容。

Devin 运行应用,执行流程,并返回带有章节和通过/失败断言的录制内容。

硬边界

计算机使用仍然存在硬边界。一个例子是时序——如果 Devin 正在测试一个 toast 通知,截图过早或过晚可能会完全错过 toast,模型可能会对预期行为是否实际发生感到困惑。

另一种失败模式是作弊。如果放任不管,模型有时可能会过度依赖在浏览器中执行 JavaScript 来以编程方式触发状态,而不是通过 UI 点击。这可能有助于测试功能,但用户通常希望看到 Devin 像真实用户一样操作应用。

我们正在通过改进的评估、更严格的测试框架护栏,以及每代在计算机使用方面表现更佳的新模型,积极解决这些问题。

异步开发的未来需要验证

在过去的几个月里,Devin 上每日批准的测试运行次数翻了一番多。这一增长反映了一个简单的事实:只有当开发者能够信任异步智能体带回的结果时,它们才有用。这种信任往往不能仅来自代码:对于许多变更,你需要知道应用确实运行过,重要流程被执行过,并且结果以易于检查的方式被捕获。

这正是 Devin 中自主测试旨在提供的。Devin 规划测试、操作应用、记录并注释所发生的一切,最后返回使结果可审查的产物。虽然还有很多需要改进的地方,但我们认为这就是未来的正确形态:智能体不仅异步完成工作,而且带回证明。

我们不断惊讶于 Devin 通过测试自身工作为我们节省了多少时间,并且感觉许多客户仍然未能充分利用 Devin 的自动测试功能。为了支持实验,我们目前对测试模式只收取正常使用成本的五分之一。

请访问 devin.ai 或 windsurf.com 试用我们的作品。如果你觉得解决这类问题很有趣,请通过 ido [at] cognition.ai 与我联系。

相似文章

AutoDev:自动化 AI 驱动开发

Papers with Code Trending

AutoDev 是一个由 AI 驱动的软件开框架,能够在安全的 Docker 环境中自动化执行复杂的工程任务,例如代码和测试生成。它通过实现复杂软件工程任务的自主规划和执行,在 HumanEval 数据集上取得了高性能表现。