异步编程的崛起

原文:

2025年8月19日 Ankur Goyal

我工作中有一项常规任务,就是审查那些不是我亲手写的代码。一个 AI 智能体 (AI agent) 会接收一份详细的问题描述,然后编写代码(主要是 Typescript、Rust 和 Python)、添加测试,最后把修改提交到一个新的代码分支上。当一切准备就绪,需要审查时,我再介入。

这在过去听起来像是科幻电影里的场景,但现在已经成了我的日常工作方式,而且越来越多的开发者也正开始这么做。这个转变虽然不易察觉,但却非常强大:我们不再是一行一行地敲代码,而是在学习如何清晰地描述问题,然后让工具在后台解决它们。

“异步编程”的工作流

这里所说的“异步编程”,和它在计算机科学里的经典定义不太一样。它更多的是指开发者构建软件的一种新方法。

整个工作流程看起来是这样的:

  1. 清晰地定义问题。 写一份详细的需求说明,包括各种边界情况、限制条件和成功标准。

  2. 把任务交出去。 把具体的实现工作委托给一个 AI 智能体、一个团队成员,甚至是未来的自己(只要你留下了足够详尽的笔记)。

  3. 稍后回来检查。 过段时间再回来审查结果、提供反馈,并决定下一步该做什么。

这种方式和传统编程最关键的区别,就在于定义问题实现代码在时间上是分开的。你得到的不再是即时的反馈循环,而是一个由清晰需求和自动化验证驱动的、在后台运行的问题解决过程。

异步编程不是凭感觉编程 (vibe coding)。“凭感觉编程”可以让你不用深入细节就能写出代码。而异步编程是一种能让开发者同时解决多个复杂问题的工作流,并且你仍然需要理解代码的细节。你依然在做系统架构、审查代码实现、维护整个代码库,只是你不再需要亲手敲下绝大部分的字符了。

异步编程的三大支柱

要想让异步编程在实践中真正可行,你需要三样东西:对问题有清晰的定义、有办法自动验证结果,以及由人来主导代码审查。

1. 清晰的问题定义

你描述问题的质量,决定了后续的一切。模糊的需求只会产生模糊的结果,而精确的说明才能产出可用的代码。

看看这两者的区别:

模糊的说法: “让搜索速度快一点”

精确的说法: “我的目标是把搜索延迟从大约 800 毫秒降低到 200 毫秒左右。我怀疑性能瓶颈在于我们为每一批数据都进行了堆内存分配。你能不能尝试重构一下代码,改成每次搜索只分配一次内存,然后测试一下效果怎么样?”

这个精确的版本包含了现状、目标、建议的解决方案以及验收标准。有了这样明确的需求,一个 AI 智能体(或者人类同事)就能够独立地开展工作了。

高效的异步编程需求文档读起来就像一份技术文档:它包含背景信息、约束条件、代码示例和明确的成功标准。如果你自己都无法清晰地解释一个问题,那你很可能还没理解到足以将其委托出去的程度。

2. 自动化的验证

异步编程能够成立的前提,是你不需要手动测试每一个边界情况就能验证结果。你需要建立一套能够自动检查工作的系统。

这可能包括:

  • 验证核心功能的单元测试和集成测试

  • 捕捉接口不匹配的类型检查

  • 确保代码满足性能要求的性能基准测试

  • 强制执行代码规范的风格检查和格式化工具

我们的目标是建立一个流程,让 AI 智能体可以独立地用它来验证自己的工作。这需要时间。一开始你需要提供大量的指导,然后逐渐形成模式,让智能体可以自主工作。在持续集成 (CI) 环境中配置好这一切虽然有挑战,但它能让后台的智能体在你自己的开发环境之外独立完成工作。

3. 细致的代码审查

当你不再亲手敲下每一个字符后,代码审查就变得至关重要。我经常会发现一些代码提交,它们要么完全搞错了要解决的问题,要么做出了糟糕的设计决策,要么就是存在大量重复的代码。

审查 AI 生成的代码和审查人类同事的代码一样,都非常有价值。做好心理准备,你花在代码审查上的时间会比以前多得多。

虽然代码不是你逐行敲下的,但整个系统的设计和技术决策,依然必须体现你的专业判断。

为什么异步编程是可行的

自从采纳了异步编程,我的工作流程彻底改变了。我现在可以同时处理四到五个任务:一个复杂的任务我会同步处理,另外三四个则在后台“异步”进行。当我在不同任务间切换时,我会去审查那些后台任务的进展,给出指导,然后回到我的同步任务或代码审查中。

Braintrust 的异步编程实践

我们一直在用异步编程的方式来构建 Braintrust 本身,现在我们也在开发工具,希望把这些理念应用到 AI 工程领域。

传统的提示词工程 (prompt engineering) 是纯手动的。你写一个提示词,用一些例子去测试它,观察失败的案例,做一些微调,然后不断重复这个过程。这个过程虽然需要专业知识,但也包含了大量的迭代工作。

我们的智能体 Loop,可以让你直接描述你想要解决的评估问题。它会在后台花时间分析实验结果,找出失败测试用例中的规律,并为你的提示词、数据集和评分器提出改进建议。

未来将走向何方

这种工作方式带来的深远影响才刚刚开始显现。它改变了我作为一名开发者所追求的优化方向:我花在 IDE 快捷键和打字速度上的时间变少了,而花在清晰地阐述问题和透彻地审查解决方案上的时间变多了。

代码实现的工作,可以和其他思考过程并行进行。随着工具的不断完善,我相信会有越来越多的开发者采纳这种方法。AI 并不是要取代编程,而是让编程中那些最有价值的部分变得更加突出,同时把那些常规性的任务转移到后台去处理。


原文链接:https://www.braintrust.dev/blog/async-programming