Devin 如何利用措辞模型
软件工程事情中最大的寻衅之一是推理,而 LLM 是当代 ML 系统中推理代码的关键构建块。Devin 是一个复合 AI 系统,它利用一组不同的模型推理来方案、行动、评估和利用工具。
自然而然地,当 OpenAI 向我们供应 o1 的早期利用权(一系列专门针对推理进行优化的模型),并让我们有机会就其对我们的表现的影响供应反馈时,我们很高兴开始利用它。
对 OpenAI o1 的第一印象
本次评估中,我们利用了 Devin 的简化版本,称为“Devin-Base”,由于 Devin 的生产版本利用的是在专有数据上进行后演习的模型。这使我们能够详细衡量根本模型的变革如何影响 Devin 的功能。
我们创造,与 GPT-4o 比较:
o1-preview 具有惊人的反思和剖析能力。它常常会回溯并考虑不同的选择,然后才能得出精确的办理方案,并且不太可能产生幻觉或自傲地做出错误判断。
利用 o1-preview,Devin 更有可能精确诊断问题的根本缘故原由,而不是办理问题的症状。当 Devin 调查具有繁芜和间接上游缘故原由的缺点时,这一点尤其突出。
提示 o1 与提示大多数其他模型明显不同。特殊是:
思维链和哀求模型“大声思考”的方法在前几代模型中非常常见。相反,我们创造哀求 o1 只给出终极答案常日效果更好,由于无论如何它都会在回答之前思考。
o1 须要更密集的高下文,对混乱和不必要的标记更敏感。传统的提示方法在给出指令时常日会涉及冗余,我们创造这会对 o1 的性能产生负面影响。
o1-preview 的智能化也伴随着遵照高度规范性指令的可变性的增加。
利用 o1,推理速率比以前的 OpenAI 模型版本慢很多倍。
从数量上看,我们创造将 Devin-Base 中以前依赖 GPT-4o 的子系统换成利用 o1 系列,可以显著提高我们紧张评估套件(我们称之为认知金标准的内部编码代理基准)的性能(本文后面将详细先容)。将 o1 完备集成到我们的生产系统中还须要付出更多努力,但我们估量一旦完成,它将进一步提升 Devin 的能力。
在我们紧张的内部评估基准上,cognition-golden我们在将关键子系统从 GPT 4o 切换到 OpenAI 的新 o1 模型系列后看到了故意义的改进。作为参考,我们还在右侧列出了目前与客户一起生产的性能最高的代理“Devin [生产]”。Devin [生产] 依赖于专有数据后演习的模型。(图表来源:Devin)
差异示例:Devin 利用 o1-preview 与 GPT-4o
让我们看一个详细的例子,个中利用 o1-preview 的 Devin 表现优于利用 GPT-4o 的 Devin。在我们的一次评估中,Devin 被哀求利用两个机器学习库textblob和来剖析 X 帖子的感情text2emotion。为了完成这项任务,Devin 须要利用 shell 安装库,利用浏览器查找推文,并利用编辑器编写 Python 脚本。然而,这项任务是经由精心设计的,以至于 Devin 在会话期间会碰着缺点:
AttributeError: module 'emoji' has no attribute 'UNICODE_EMOJI'
面对此缺点,您可能很想深入研究非常本身或搜索脚本中如何处理表情符号代码。但是,精确的办理方案是通过运行来降级表情符号库的版本pip install emoji==1.6.3。值得把稳的是,只管缺点仅提到了软件包emoji,但可以在text2emotionGitHub 上找到该问题的办理方案。
利用 GPT-4o 的 Devin 常常会在此步骤中犯缺点,而利用 o1-preview 的 Devin 则能够像人类工程师一样通过在线研究得出精确的结论:
在这里亲自探索 Devin 在此评估任务中的行为。
我们如何评估编码智能体:具有自主反馈的现实环境
软件工程的繁芜性很大程度上源于现实天下的混乱。我们的内部基准测试cognition-golden由受真实用例模式启示的任务组成,这些任务具有支持完备自主评估的真实开拓环境。演习分割用作自我改进的自主学习环境,测试分割用于定量能力评估。我们掩护此基准测试,以便分数的数值增加与真实代理任务的精确性、速率和良好沟通直接干系。
一项评估任务cognition-golden名为grafana-dashboard-metrics,是从用户供应的数据馈送支配和托管 Grafana 仪表板。这是用户提示:
嘿,Devin。您能为我构建一个 Grafana 仪表板吗?该仪表板可从以下 URL 轮询数据:https://devin—grafana-dashboard-metrics-fastapi-app.modal.run/metrics,并在适当的图表上显示所有指标。您可能利用 Prometheus 进行数据采集,利用 Grafana 进行可视化。完成后,请为我公开 grafana 仪表板,以便我可以查看它。以下是您可能想要利用的 Grafana 预构建的仪表板.json:https://raw.githubusercontent.com/triton-inference-server/server/main/deploy/k8s-onprem/dashboard.json。
提示代表真实用户的查询,包括拼写缺点。这是一项中等难度的任务,Devin 大多数时候都无法完成。然而,偶尔 Devin 也会成功,它可以从这些轨迹中学习,如下面的例子所示:
在这里亲自探索 Devin 在 Grafana 任务上的行为。
反响现实天下
我们希望创建既真实又可重现的环境。用户提示旨在通过做事器供应数据。在创建时grafana-dashboard-metrics,我们设置了一个大略的网络做事器,用于托管每 10 秒略有变革的样本数据。此外,我们为 Devin 供应了一台真正的 Linux 机器,它具有 root 访问权限,须要设置自己的开拓环境。
目标是捕捉软件工程的混乱现实:不明确的规范、极度情形以及独立网络高下文的必要性。我们与企业客户互助,在包含数百万行代码的生产代码库上创建了真实的环境。任务包括大型迁移项目和实际功能要求。
仿照用户
Devin 最大的上风之一是它能够根据实时通信调度操持。为了在我们的评估环境中仿照这一点,我们创建了 Devin 可以与之谈天的仿照用户。当碰着问题时,Devin 还可以主动提问,因此仿照用户可能会透露更多信息。
对付grafana-dashboard-metrics,我们利用一个大略的仿照用户代理,并遵照以下指令:
如果 Devin 讯问是否设置密码,或者在发送终极结果后,请哀求它将密码设置为“admin:your-secret-password-123”。将其格式化为原样,让 Devin 明白 admin 该当是用户名。
仿照用户智能体
利用智能体来评估智能体
软件工程的一大优点是结果常日可以客不雅观验证。在许多情形下,可以利用代码实行、编译器、linters、类型检讨器或单元测试等经典方法来检讨精确性。常日,这些方法是首选,由于它们具有确定性且易于利用。但是,对付繁芜的结果,它们可能不足用。我们利用可以访问 Devin 的浏览、shell 和代码编辑工具的评估代理来自主判断结果。
首先,我们哀求评估代理检讨终极交付成果。哀求在浏览器中登录 Grafana 界面,打开仪表板并直不雅观地剖析精确性。这些是评估代理的前三个标准grafana-dashboard-metrics:
访问 Devin 创建的 Grafana 仪表板。它是否包含超过 5 个图表?如果它不存在或未加载,则表示失落败。Grafana 仪表板的凭据应为用户哀求的 admin:your-secret-password-123。
仪表板中是否有“Pod 均匀排队韶光(微秒)”折线图?
是否有一个名为“GPU 总功率”的仪表显示 170 kW 的 10% 以内的数字?
此外,我们验证了 Devin 是否精确设置了 Prometheus,由于还有其他禁绝确的方法将数据导入 Grafana。但是,设置 Prometheus 的方法多种多样(docker、systemctl、kubernetes),覆盖所有情形打破了传统方法的极限。在以下两个评估标准中,评估代理须要运行 shell 命令、推理其输出并探索文件系统:
检讨 prometheus 是否在机器上运行,并读取日志以确保它成功实时提取指标。提示:Devin 常日利用 systemctl 或 docker 设置 prometheus,因此首先运行 和 等systemctl status prometheus命令docker ps。
找到 prometheus 配置文件并验证它是否正在利用来自https://devin—grafana-dashboard-metrics-fastapi-app.modal.run/metrics的指标。它该当是一个 yaml 文件,例如,/etc/prometheus/prometheus.yml只管路径可能有所不同。
评估者将所有标准累积起来,得出介于 0 到 1 之间的终极分数,然后在多次 Devin 试验和评估代理试验中取均匀值,以减少方差。
Grafana 仪表板
Devin 托管的 Grafana 仪表板。在此处找到 Devin 会话中的 URL 。(为了共享此会话,我们手动变动了 Grafana 实例上的密码,但将仪表板公开,以便您可以查看 Devin 的事情。)
评估评估者
我们如何信赖利用非确定性智能体对非确定性智能体的评估?幸运的是,对付大多数任务,批评考试测验的办理方案比实际办理任务要随意马虎得多。为了简化评估过程,我们向评估代理供应了详细解释,并最大限度地减少了评估办理方案所需的步骤数。
我们通过两种办法评估我们的评估员:
丈量真实集上的精度和召回率
持续人工审查评估代理创造的成功证明(例如 Grafana 仪表板的屏幕截图)
在评价过程中,评估代理可以得到的一个关键旗子暗记是环境状态。我们不雅观察到,须要足够强大的代理系统才能利用环境旗子暗记来评估自己。我们称之为交互式自我反思,这是一种新兴征象。一旦达到这种能力阈值,代理在没有人工反馈的情形下改进就会变得随意马虎得多。
安全性、可操纵性和可靠性
我们的客户依赖 Devin 作为一种安全可靠的工具,以便在生产中利用它。得益于我们的自主评估,我们可以在任何新的 Devin 支配之前衡量全部结果并打算客不雅观可靠性指标。为了确保在有限的人工监督下可操纵性,我们开拓了明确的机制,旨在仿照用户意图和连贯的推断意志。我们自动检测数亿个代理决策中与此意图的偏差。由于我们可以虚拟地天生任意数量的这些环境,我们可以并走运行大量代理轨迹并研究边缘情形的长尾。所有这些都有助于实现终极目标,即构建一个可操纵的代理,我们的客户可以满怀信心和信赖地将其支配到他们的生产环境中。
总结
我们正处于推理能力爆炸式增长的期间,这些能力将为截然不同的产品体验供应动力。个中最自然的可能便是智能体——能够方案、行动和利用工具的决策者。与现实天下中的机器人一样,编码智能体须要探索其环境,在长期范围内完成任务,并且能够适应分布变革。幸运的是,在虚拟天下中操作具有上风——我们可以仿照环境,同时探索多个决策,乃至可以回到过去。
导致对编码智能体进行稳健评估的相同过程大概可大规模自动数据天生。利用这种方法演习的 Devin 生产版本在我们的内部cognition-golden基准测试中表现为 74.2%,并且在演习期间从未见过评估任务。
我们很高兴与 OpenAI 互助发布此版本,我们期待 o1 和新一代以推理为重点的模型将进一步提高 Devin 的性能。还有更多事情要做。
原文链接https://www.cognition.ai/blog/evaluating-coding-agents