Aioga
AI资讯 / 行业动态
返回 AI资讯

Justin Cormack 用 35 万行 Rust 复盘 AI Agent 评估:从证据开始

Tessl:产品与工程博客Aioga 编辑团队2026-09-18T13:38:06.000Z热度 72

Tessl 发布的这篇博客复盘作者用 AI 构建约 35 万行 Rust 的 S3 兼容对象存储的实验。

行业动态Tessl:产品与工程博客

今日 AI 情报摘要

Tessl 发布的这篇博客复盘作者用 AI 构建约 35 万行 Rust 的 S3 兼容对象存储的实验。

中文正文 · AI 翻译

我喜欢测试。我一直都喜欢测试,而人工智能让我对测试的思考更多。如果人工智能要帮助我们编写生产代码,重要的问题不是它能否快速生成大量代码。

Justin Cormack
Justin Cormack 用 35 万行 Rust 复盘 AI Agent 评估:从证据开始

我喜欢测试。我一直都喜欢测试,而人工智能让我对测试的思考更多。如果人工智能要帮助我们编写生产代码,重要的问题不是它能否快速生成大量代码。重要的问题是我们是否可以建立一个反馈循环,告诉我们哪些实际上是有效的。

这就是我做演讲“当测试说谎:使用可观察性保持人工智能诚实”的原因。我想了解当你在比玩具项目大得多的项目上使用人工智能时会发生什么。小工具很有趣。你可以在半天内编写它们,积极测试它们,并对结果感到相当满意。但是你能用人工智能构建一个大型复杂的基础设施系统吗?

我决定用兼容 S3 的对象存储来尝试。对象存储是我最喜欢的云服务,而且我研究过的大多数实现至少花了两年时间来编写,有些甚至花了十年。我知道这将是一个庞大而复杂的项目。在演讲时,代码库大约有 350,000 行 Rust,我并不打算假装我阅读了每一行。

这正是实验的一部分。我想要高质量的代码。我有架构上的看法。我关心安全性、性能和分布式系统行为。我也想保持人类在环,因为我想知道出了什么问题,而不是一开始就自动化掉一切。

Tessl 已将我的 AI Native DevCon 演讲转换为你的代理可以用作上下文的技能:https://tessl.io/registry/ainativedev/aidevcon-2026-ldn/skills/talk-cormack-tests-lie-observability-ai-honest。你也可以观看完整录制:https://www.youtube.com/watch?v=xHxfeWtkXrM。

复制现有系统的好处是,你可以获得一个测试圣杯。以我为例,我可以针对 S3 运行测试,观察实际行为,然后告诉人工智能我们的实现必须完全像那样表现。

这改变了工作的质量。我最终大约有 1,500 个测试运行在 S3 上并锁定行为。对于一个代理来说,这比模糊的指令要好得多。它给模型提供了一个有依据的基线,同时在我决定是否信任实现时也提供了证据。

我现在认为,如果你正在编写一个复杂系统,一个好的起点是先构建一个非常简单的版本。它不必是最终的架构,只能是行为的一个简单模型。但如果你能针对这个简单版本构建测试套件,那么在构建更复杂版本时,你可以将其作为一个参考标准。

这并不完美。S3 在某些地方是最终一致性的,尤其是在授权行为方面,因此测试有时需要重试,才能准确反映真实行为。参考标准并不完全等同于规范,你仍然需要解释你所看到的内容。

另一个发现是文档不足以应对实际问题。S3 有大量文档,但当你深入细节时,文档常常是大概的、过时的,或者根本没有描述你实际观察到的行为,甚至完全错误!文档可以给你关于测试内容的提示,而测试告诉你实际发生了什么。

我最初尝试追求 100% 的测试覆盖率,因为看起来这是个好主意。我衡量了不同类型的覆盖率,包括集成测试的覆盖率。但它的帮助不如人们有时想象的那么大。

当我要求 AI 代理达到 100% 覆盖率时,它写了些琐碎的测试。其中一些在技术上提高了覆盖率,但并没有提升我的信心。如果正确的行为只是返回错误或触发异常,我并不需要针对每个随机数生成器的失败路径编写测试。最有用的证据并不在这些地方。

我仍然有大量的测试。大多数文件的覆盖率在 75% 到 100% 之间。重点不是覆盖率不好,而是 100% 语句覆盖率并不能替代深入思考。

测试是发现工具,而不是魔法答案。你在不确定、怀疑以及认为系统可能隐藏错误的地方增加测试。如果代码让你担心,你就花更多时间尝试破坏它。

那就是我希望在 AI 辅助开发中看到的心态。智能体可以生成测试,但我仍然需要决定我想要暴露什么风险。

让我有信心的一个时刻是当 AI 在 S3 中发现一个可复现的 500 错误。它正在针对 S3 的一个边缘情况编写测试,发现了看起来像真正漏洞的行为。后来它又发现了另一个可复现的 500 错误。

这令人兴奋,因为这意味着测试套件不仅仅是在检查显而易见的路径。它在探索足够的行为空间以发现奇怪的情况。在构建复杂系统时,你会花很多时间在“事情一团糟,这绝对行不通”和“实际上,这又在正常工作”之间徘徊。好的测试可以帮助你再次回到信心。

有趣的是,在从文档中寻找某些边缘情况方面,我比 AI 更出色。我会阅读 AWS 文档,想“这真的是真的吗?”,然后让 AI 编写测试,接着发现行为只是大致符合文档。当我直接让 AI 针对文档寻找边缘情况时,它表现得并不好。

这说明了人类角色的重要性。我仍然必须像测试人员一样思考。我必须考虑零长度、长度为一、长度为 10,001 以及系统容易出错的奇怪边角情况。智能体可以帮助将这种怀疑转化为可执行的测试,但怀疑本身仍然很重要。

不稳定测试是项目中最有趣的部分之一。AWS 随时间趋向于真值,而这浪费了大量时间。但我的硬性规则很简单:AI 帮助下绝不允许有不稳定的测试。必须立即修复它们。

原因在于智能体可能会从围绕不稳定测试的文化中学到错误的教训。有时感觉训练数据告诉模型开发者不会修复不稳定测试,所以它应该忽略它们。我必须提醒它,在这个代码库中我们会修复不稳定测试,并且这已经写在智能体的指令里。

危险是显而易见的。如果测试间歇性失败,智能体可能会认为外部系统发生了变化,或者测试不值得信任,或者实现应该不断更改以适应噪声。这完全是反方向的。应该先修复测试。

快速测试使这一点成为可能。在演讲时,我大约有 5,000 个测试在大约两分钟内运行完毕。两分钟是我可以接受的极限。当测试运行得很快时,你可以频繁运行它们,并且更早发现不稳定性。对于罕见情况,我还在多台机器上进行了反复的夜间测试运行。

这是人工智能真正有用的一个地方。如果你把修复不稳定测试作为任务,并且不允许这种不稳定性变成常态,它就非常擅长。

测试是必不可少的,但它们不能告诉你所有问题。有时它们可以发现竞态条件,尤其是当测试快速且运行频繁时。它们可以帮助涵盖许多形式的行为测试。模糊测试和基于属性的测试帮我发现了问题。在出现 bug 后询问 AI 我们应该做什么样的测试,往往能够产生有用的新测试思路。AI 对不同类型的测试有很多背景知识。

但测试并不会自动发现安全问题。它们无法判断你的架构是否良好。它们也不会告诉你哪些内容未被衡量。如果你无法观察某些东西,那么你也无法真正测试它。

这让我更深思可测试性。任何能够从黑箱中提供信号的东西都是有用的。如果有信号,就捕捉它。如果公共 API 没有提供足够信息,就构建管理、报告或后台接口,让你更好地理解系统。

我遗憾的一点是没有早些构建更多这样的管理和报告接口。我之前过于专注于公共 API,因为那是我想要复制的部分,也是我拥有可靠参考的地方。但内部行为同样重要,而你能暴露的结构化信号越多,测试和调试就越容易。

追踪变得极其有用。我让 AI 构建了一个手工维护的追踪框架,即便如此,也足以改变调试工作流程。它不需要集成到生产观察系统中也能发挥价值。

原因很简单:当你给 AI 一个无法复现的罕见 bug 时,它可能会浪费大量时间。它可能复现失败、随意猜测修复方法,或者做出看似合理却实际上并未解决问题的更改。

当我能给它一个通宵运行的痕迹并说“发生了这个问题,我们需要修复它”时,工作就改变了。这个轨迹给了它一个具体的推理依据。它可以尝试重现相同的条件,比较行为,从而缩小真正的问题范围,而不是猜测。AI猜测修复往往不准确,但通过复制它可以写出正确的修复。

性能工作也有类似的教训。人工智能的行为很像人类做性能工程。它可能尝试看似有帮助的东西,但改变要么无效,要么反而更糟。如果你把这项工作当作廉价且一次性的,那也没问题。如果它不能提升性能,那就扔掉它,换个方法。

我也发现正确的答案不是更多的追踪或测试,而是更好的类型系统。我在权限检查和检查时间、使用时间行为方面遇到了问题。最终我让代理用类型建模授权边界,这样需要授权请求的函数只能接收授权请求。一旦类型系统强制执行了该属性,你就不需要针对这类错误的测试次数减少。如果错误在编译时被发现,它们就无法进入生产环境!

我将AI安全审查作为另一个信号来源。我将发现记录录入仓库,并请求AI进行审查。大部分发现是有效的,尽管并非所有发现都是直接的安全问题。更重要的是,这些发现促成了有用的审查会议:我们如何避免这种情况?哪些测试或设计变更能更早发现?

这就是我对自己在系统中角色的看法。我是反馈循环的一部分。我有自己的看法。我想弄清楚哪里出了问题。我不想自动化到看不到失败模式。

AI可以写大量代码。它还能帮助生成测试、追踪、重构和评审。但我仍然负责质量。我关心代码是否好,架构是否完整,系统是否真正趋向于更好的东西。

最后的教训是重构也是反馈循环的一部分。我那几周修改了非常多的代码行,包括一个必须重构的 43,000 行的文件。你不必一次性完成整个系统。你需要逐步接近。你先取得进展,然后再问还有什么可以改进的。

这就是为什么我不把 AI 代理评估看作单一的分数。它是一个证据循环:测试神谕、边界情况发现、不稳定测试管理、追踪、性能检查、安全审查、类型系统约束,以及人工判断。当我们要求测试独立存在时,测试可能会欺骗我们。当它们成为一个系统中的一个信号,用来确保代理诚实时,它们就变得更有用。

这个论点的完整版本在 AI Native DevCon London 上展示:https://tessl.io/devcon/。想要更深入了解,请观看完整录像:https://www.youtube.com/watch?v=xHxfeWtkXrM。

Justin 直到去年一直是 Docker 的首席技术官,并多年来一直参与云原生、基础设施和安全工作。他在基础设施、开发以及开发者工具领域有多年经验。在 Docker,他领导了一个专注于 AI 及开发者工具的团队。他还在物联网、安全和供应链安全等领域工作。

Justin Cormack 用 35 万行 Rust 复盘 AI Agent 评估:从证据开始

你的每周 2 分钟 AI 开发新闻、工具、精选内容和活动回顾。

Tessl AI有限公司,英国伦敦盆通维尔路210号

情报判断

Aioga 编辑摘要

Tessl 博客复盘了 Justin Cormack 使用 AI 构建 S3 兼容对象存储的实验。文章称,演示时代码库约有 35 万行 Rust,并配套约 1,500 个针对 S3 运行的测试。

背景分析

作者关注的重点不是 AI 能否快速生成大量代码,而是能否建立反馈回路判断结果是否有效。他以既有 S3 行为作为测试参照,并强调人在过程中保持参与。

Aioga 观点

Aioga 判断:这篇复盘的核心价值在于把“能生成代码”转成“能否用外部行为验证代码”。测试数量本身不等于实现已被全面证明,但真实系统对照与可观测反馈提供了更具体的判断依据。

影响与后续

可能影响:复杂基础设施的 AI 辅助开发,评估重点可能从代码产量转向行为一致性、测试基准和反馈回路。需要注意,约 1,500 个测试不代表覆盖所有问题,材料也不足以证明实现已达到生产可用。 后续观察:应继续关注作者披露的测试结果、可观测性实践,以及安全、性能和分布式系统行为的验证证据,以判断该方法在更复杂场景中的适用边界。

来源与版权说明

本页正文由公开来源页面提取并按原有信息整理,同时保留来源、发布时间和原文入口。版权归原作者及来源网站所有,请通过原文链接核验和阅读来源版本。

抓取通道: 摘要聚合 · 原始域名: tessl.io

来源: Tessl:产品与工程博客

原文链接: 打开原始来源

Aioga 归档: 查看情报页

Content record: source-page · Updated: 2026-09-18T13:38:06.000Z

API 中转站
API RELAY · DEVELOPER INFRASTRUCTURE

API 中转站

统一接入主流 AI 模型 API,为开发、测试与生产环境提供稳定调用入口。

立即访问 api.w173.com
AIOGA SHARE POSTER

分享这篇 AI 情报

Tessl 发布的这篇博客复盘作者用 AI 构建约 35 万行 Rust 的 S3 兼容对象存储的实验。

Tessl:产品与工程博客2026-09-18T13:38:06.000Z
扫码打开文章详情扫码直达文章详情

Aioga 自动聚合全球 AI 动态,并保留来源信息用于核验与引用。