超越Vibe Coding——什么是Vibe Coding?

354 阅读1小时+

AI 正在重塑我们构建软件的方式,引入从自由式提示到结构化辅助的新范式。想象一下,仅需用自然语言描述你希望软件完成的功能——几乎像在与队友交流——AI 就能将这些想法翻译成代码。这便是“氛围编码”(vibe coding)的核心:一种以提示为先、探索式的编程方法,你用自然语言描述需求,让大型语言模型(LLM)来填补细节。该术语由 AI 先驱 Andrej Karpathy 最近提出,用以描述这类全然“沉浸于 AI 协助氛围”中的全新编程方式。

在本书中,我将深入探讨氛围编码对专业开发者意味着什么,以及它与我所称的 AI 辅助工程(一种更为严谨的增强编码流程)之间的对比与互补。我会剖析在这一 AI 优先时代中,开发者角色如何演变,哪些工具和工作流能最大化效率,以及在代码库中让 AI 自由发挥时所面临的独特挑战。我还将分析氛围编码最擅长的场景与瓶颈所在,并讨论如何在 AI 生成速度与人类监督智慧之间取得平衡。到本章末,你应能清晰掌握如何在自身的编码实践中——既负责任又高效地——驾驭“氛围”,从而在 AI 时代不仅成为更快速的编码者,更成为更具创造力和影响力的软件产品工程师。

在本章中,我们将探讨开发者角色如何从为机器编写详细指令,转变为通过表达意图与 AI 协作(见图 1-1)。我们将了解为何这一编程中的“氛围转变”意义非凡,它在高层面上如何运作,以及它所带来的机遇与挑战。

image.png

AI 编程光谱:从氛围编码到 AI 辅助工程

在过去一年里,我观察到开发者——尤其是中高级 Web 开发者——在将 AI 融入工作流的方式上出现了有趣的分歧。光谱的一端是“氛围编码”(vibe coding),另一端则是我所称的“AI 辅助工程”(AI-assisted engineering):一种在设计、实现到测试全流程中,按照明确约束有条不紊地“编织”AI 的严谨方法。两者都借助了强大的 AI 能力,但它们的目标、受众与预期效果却大相径庭。在本书中,我将深入探讨这两种极端方式,对现代 Web 开发意味着什么。

氛围编码方法:通过对话写代码

在氛围编码中,你将大型语言模型(LLM)视为编码搭档,让其承担大部分代码生成的“重活”,自己则专注于更高层次的目标。正如 Business Insider 的一篇总结所说,氛围编码“就是用 AI 工具……在编码中做繁重的工作,以便快速构建软件”。NVIDIA CEO 黄仁勋也指出,得益于 AI,“最热门的新编程语言”不再是 Java 或 Python,而是英语。你不必一个字一个词地敲代码和调试,而是用自然语言与 AI 交互——草拟功能、审阅建议,再基于 AI 的输出不断迭代。

这种方法彻底颠覆了传统编程向 AI 辅助开发的转变。传统编码要求精心设计、语法严谨且常常需要反复调试;而氛围编码则完全相反。正如 Karpathy 在 Business Insider 里打趣地说:“这不太像‘编程’,我就是看看、说说、运行、粘贴,然后大体上就行了。”他所强调的,是 AI 能将高层指令转化为可运行代码,几乎无需手动干预。

开发者的角色也从为机器写详尽指令,变成了在 AI 的辅助下“编排”结果。Karpathy 举例说,他构建一个 Web 应用时,总是“一键接受所有改动,从不看 diff……遇到错误就把报错信息复制给 AI,让它修”。有时 LLM 修不了,他就换个说法或随机提出修改,直到问题消失。代码“自然而然地”生成,项目通过不断的提示—修复循环迅速成型。氛围编码本质上就是把编程当成与 AI 对话,而不是孤军奋战于语法和堆栈追踪之中,目标是以极小的摩擦快速探索并交付可用方案。

使得氛围编码成为可能的趋势有三点。首先,现代 AI 编码助手(如 OpenAI Codex、ChatGPT、Anthropic Claude 等)在生成和纠正代码方面表现惊人,吸收了大量 GitHub 代码,能为许多任务产出可行解决方案。其次,新型开发工具层出不穷,能将这些模型无缝集成到 IDE 和工作流中。最后,开发者群体的心态也在演进:他们开始信任 AI 承担越来越大的工作量。不再是“增强版补全”,而是把整个函数、文件交给 AI 处理。实际上,氛围编码就像拥有一队永动的初级开发者,可以以云计算的速度完成你所需的一切。

氛围编码最引人注目的承诺之一是巨大的生产力提升。早期实践者报告称,能够以 10 到 100 倍于以往的速度创建功能原型。例如,Codeium Windsurf 工程师 John Hoestje 感慨:“何必做 10 倍工程师,当你能做 100 倍?”拥有合适的 AI 驱动 IDE 后,这种 100 倍的生产力并非天方夜谭。即使更保守的调查也发现了可观的增速:开发者能在数秒内生成样板代码、眨眼间修复 Bug,甚至让 AI 编写自动化测试和文档,将原本几天的工作浓缩到几小时。单个开发者借助 AI,往往能在一个周末内完成全栈应用的原型,这在过去可能需要一个小团队好几周才能办到。

再举一个具体例子:某开发者想做一个统计播客稿文字数并估算朗读时间的简单 Web 应用。他在 AI 编程环境中描述想法,几分钟内就得到一个可运行的原型;接着他说“把统计信息用亮色显示,并添加 PDF 导出”,AI 也能立即更新代码。整个流程不到 10 分钟,一键部署完成。同样,非工程背景的用户也能借此造出工具:有篇文章讲到一位被裁的市场人员,仅靠 AI 编码助手就做出了 100 个简单 Web 工具,并登上了 Product Hunt 榜首。当软件开发门槛降得如此之低,我们不仅提升了经验丰富开发者的效率,也在本质上扩展了“谁能开发软件”的定义。

氛围编码的风险与局限

然而,氛围编码也并非万能。由于将太多工作交给 AI,产出的代码往往只能覆盖“顺利路径”,却可能暗藏大量缺陷或糟糕的设计决策。缺乏严谨的计划和约束,LLM 可能生成没有妥善错误处理、安全检查或可扩展性的实现。AI 代码有时看似坚固,实则沙盘一碰就塌。

举例来说,若你让 AI “快速搭一个用户登录系统”,它可能立刻给出一套可用的认证流程,但底层或许用了简化的加密方法或存在安全漏洞的依赖库。若未经深度审查就上线,就等于在生产环境中埋下隐患。正如一位专家所言:“氛围编码要把项目推向生产环境显然很冒险。我们大多数的工程工作都在维护已有系统,底层代码的质量和可读性至关重要。”过度依赖氛围编码,可能绕过这些质量把关。

另一大挑战是:氛围编码往往轻视前期规划。传统工程强调在实现前就要构思数据模型、选好设计模式、写出最简规格说明,而氛围编码则直接从提示入手,边写边“prompt”。这可能导致开发走偏——AI 选了你不想用的库或状态管理方案,你要么无奈接受,要么再花精力“拽回来”。在大规模代码库中,缺乏统一蓝图会导致架构参差不齐。这样的做法或许适合快速原型,但对于需保持一致性和可维护性的正式项目,却是一种隐患。

尽管如此,氛围编码并非“有害”。它是编程民主化进程的一环,就像早期的低代码平台或脚本语言一样,降低了软件创作的门槛。对经验丰富的开发者而言,它也可作为强大的头脑风暴工具——类似伪代码,但更快能跑起来。关键在于认清其局限:速度不能代替纪律,氛围编码必须有人在环中持续监督。我常提醒自己和同行:“氛围编码不能成为低质量工作的借口。”它应当是解决方案的起点,而非终点。

AI 辅助工程方法:与 AI 伙伴共同构建结构化流程

在我们光谱的另一端是 AI 辅助工程——一种更具结构性、方法化的软件构建方式,AI 在每个环节都担任副驾。此时,开发者依然牢牢掌控方向盘。AI 辅助工程涵盖了在传统软件开发生命周期(SDLC)中各阶段使用 AI 的实践,例如 AI 驱动的自动补全、聊天式交互、代码迁移、缺陷检测、测试生成,以及从细粒度(函数、模块、组件)到整体代码的生成(见图 1-2)。

image.png

你从一份计划开始(即便是轻量级的),先勾画出需要构建的内容,并在一开始就定义好约束和验收标准。随后,你有针对性地引入 AI 工具,加速或增强计划中的各个环节。与以提示为先的氛围编码相对,这里我们可以称之为“以计划为先”的 AI 支持开发。这个计划可以是一个简短的产品需求文档(小型 PRD),也可以仅仅是一份任务清单。关键区别在于:在让 AI 大显身手前,你已用明确的意图和约束为工作奠定了基础。

想象一位 React 开发者需要创建一个新的交互式仪表板组件。在 AI 辅助工程方法中,他们会先写下组件的职责和 API:

仪表板组件展示一系列分析卡,支持按日期范围筛选,并具有刷新与导出按钮。它应从我们的 API 获取数据(并做好错误处理),且必须遵循我们的设计系统进行样式渲染。

这份大纲本质上就是规格说明。开发者甚至可能快速画出数据模型,或标记可以复用的现有工具函数。只有在这些准备就绪后,他们才会请 AI 出马:例如,在 AI 驱动的 IDE 中,用上述描述生成组件骨架。AI 可能会提供一个包含数据获取占位符和事件处理存根的 React 组件初版。由于开发者给出了清晰指导,AI 的输出更有可能契合项目需求(如使用正确的设计系统类名或调用相应的 API 端点)。这段代码不会让人“意外”;它是一个经过良好构建请求的产物。

AI 辅助工程并不局限于单个组件的代码生成,而是以受控的方式渗透到整个开发生命周期。对于常规编码任务,你可以使用 GitHub Copilot 这类 AI 自动补全工具在输入时建议接下来的几行代码,从而节省大量敲击次数。举例来说,当你编写单元测试时,AI 可能会根据函数名自动建议断言语句。谈到测试,你还可以在功能到位后,用 AI 根据组件的规格或代码生成测试用例,提示它给出需要覆盖的边缘场景。其核心思想是增强工程师的工作,而非取代:你依旧思考逻辑并验证正确性,AI 只是帮你干一些琐碎活。

在代码迁移或重构方面,AI 更是天赐良机。比如,你需要将一个基于类的 React 组件迁移到使用 Hooks 的函数组件,AI 助手可以帮助你转换代码,甚至给出具体步骤。借助对新旧模式的理解,LLM 能产出一份重构草稿,再由你审阅和打磨。这种结构化的 AI 使用方式,是一次次完成明确定义的任务(如“将此段 Redux 代码迁移至 React Context API”),而非给 AI 一个开放式的“随便做点什么”命令。

或许 AI 辅助工程最惊艳的形式,是从详细规格生成一个完整的小型应用或功能。如今已有多款工具允许你输入类似小型 PRD 的描述,便可得到一个可运行的代码库或原型。例如,开发者可提供这样一段需求:

“一个带有 React 前端和 Node.js 后端的待办事项应用,支持用户认证和实时更新。”

AI 工具会自动搭建项目脚手架、创建核心组件,并配置数据库 schema。它并非魔术,仅是对一个勤奋工程师在启动新项目时所做操作(如搭建目录结构、选型库、编写样板代码)的加速。关键在于,AI 的创造力受到你在规格中给出的约束限制。结果是一款符合你需求的最简可行产品(MVP)。一个成熟开发者会以谨慎态度看待这份初稿:运行应用、编写或重生成测试以验证每项功能、审查代码中的不一致或潜在安全问题,并按需打磨。总之,他们仍会以一贯的工程严谨度对待,只是借助 AI 生成海量代码,从而实现加速。

AI 辅助工程的目标,与氛围编码大相径庭。在这里,目的不仅是快速得到可运行代码,更是高效地产出高质量代码。它旨在提升生产力,同时保持(甚至提高)成果的可靠性。一个践行 AI 辅助工程的团队或许会说:“我们要在不降低任何标准的前提下,将此功能交付速度提高两倍。”

此方法的受众通常是已有成熟流程(代码评审、测试、部署流水线)的专业开发者和团队,他们不会轻易放弃这些流程。目标群体多为中高级工程师,他们将 AI 视作工具箱中的利器,而非取代工具箱本身。他们都见过因偷工减料带来的后果,因此重视可维护性。相比之下,氛围编码的受众则更多是独立开发者、具备一定编码能力的产品人员,乃至初级程序员,他们借助 AI 来弥补自身经验不足。

在 AI 辅助工程中,期待人工始终掌控决策,而 AI 则提供建议或加速器。代码质量、性能和安全依然至关重要,每一段 AI 生成的代码都要像审阅初级开发者交出的代码那样仔细检视。把 AI 当成“实习生”而非“替代者”:你可以将任务交给它,但绝不能跳过审阅环节。正如你不会在未审阅的情况下将实习生写的代码部署到生产环境,同样也不应在不了解的情况下直接上线 AI 生成的代码。这种心态将工程纪律始终置于核心位置。

不同的心态,不同的期望

氛围编码和 AI 辅助工程代表了两种截然不同的心态。氛围编码是自上而下、探索式的:你从一个宏大的想法开始,通过与 AI 的互动让实现细节慢慢浮现。这有点像即兴爵士——结构极简,留有大量创意空间,你在“演奏”过程中才逐步发现乐曲的轮廓。AI 辅助工程则更系统、更迭代:更像古典作曲,你先从一个主题或动机(需求)出发,在写好的乐谱框架内有条不紊地发展,偶尔在小节之间即兴(AI 建议),最终完成作品。两者都能“奏出乐章”,但过程和最终结果会大不相同。

对于中高级 Web 开发者而言,对两种方法的期望至关重要。如果你在做氛围编码,就要准备好被“惊喜”。AI 可能会给出你自己不会写的方案——也许采用了不同的库或不熟悉的编程习惯。部分魅力就在于从这些意外中学习,或迅速跳过那些你觉得枯燥的步骤。但你也要预料到出现小插曲的可能。氛围编码的实践者应当清醒地认识到,最后那段棘手的收尾工作还是要由自己来完成。魔法是真实的,但并非万能。

若你践行 AI 辅助工程,对 AI 的期望则更为克制,也更符合长期项目的现实需求。你期望 AI 节省时间,或许还能为你提供一两个灵感,却不会替你干完全部工作。实际上,一个优秀的 AI 辅助工程师或许会在宏观框架中,以“氛围式提示”作为微量调味。比如,在实现一个已明确定义的模块时,偶尔切换到“氛围模式”对 AI 说:“嘿,帮我生成一个快速的日期格式化工具函数”,然后马上切回“工程师模式”去集成并验证该函数。心态在于:AI 是在你的引导下工作的协作者。你把它擅长的任务(样板、重复性代码、大致实现)交给它,关键逻辑、集成、最终审查则由你亲自完成。

在该模式下,你可以期待更高的生产力、更少的低级错误(例如 AI 不太可能拼错变量名),也可能获得更广的解决方案空间(AI 可能提出你未曾想过的算法)。但你也要投入时间做验证——调试 AI 辅助生成的代码依然是调试:你需要运行测试,必要时在调试器中逐步跟踪。不同之处在于,你调试的是 AI 写给你的代码,这是一种全新体验,也带有学习曲线。第 5 章将对此展开详细探讨。

两种方法的目标凸显了它们间的根本差异:氛围编码侧重于短期内的速度,而 AI 辅助工程则注重可持续的速度和可靠性。氛围编码者可能会想:“今晚之前把应用跑起来,看看这个想法行不行。”AI 辅助工程师则会说:“我要快速交付这个功能,但它必须足够稳健,能够在我们的代码库中长期存续。”前者满足于代码能大体运行;后者关心代码是否足够清晰,以便他人能基于它继续开发。

这种差异自然吸引不同的受众。经验较少的开发者或非工程背景的人可能倾向于氛围编码,因为它降低了入门门槛,且能带来即时满足感。我见过产品经理和设计师通过氛围式提示“玩代码”,把 AI 当成功能更强大的 Stack Overflow,给他们完整的解决方案。另一方面,经验丰富的开发者和工程团队更偏好 AI 辅助工程。他们曾被脆弱代码“坑”过,所以会从“让我们先把这件事做对,即便借用新工具来提速”出发。他们乐于在前期投入更多精力(写小型 PRD,搭建项目结构),以换取长期效益。

在光谱中找到你的定位

那么,哪种方法更好?答案是:氛围编码和 AI 辅助工程并非绝对对立,而是处在同一光谱的两端,现实工作流往往融合二者。开发者可能先用一波氛围编码快速搭个原型,再切换到工程模式进行稳固;也可能通常遵循 AI 辅助工程,却在写一个小脚本或一次性原型时“随性地”用氛围编码,看看结果。关键是了解它们的权衡,并在恰当场景选择合适方式。

把氛围编码看作一辆高速探测车:它能迅速带你走出常规路线,非常适合探索;AI 辅助工程则更像一列在轨道上行驶的可靠火车:你要先铺轨(计划),才能安稳抵达目标。中高级开发者都该会开这两辆“车”,但会根据任务而定。如果目标是快速创新或验证(如在黑客马拉松中或验证想法可行性),氛围编码能给你动力;但若目标是以专业姿态构建可维护的产品功能,则应偏向 AI 辅助工程,以免在代码库中留下无人真正理解的“黑盒”代码。

有趣的是,我观察到随着开发者对 AI 工具使用经验的积累,他们的做法往往自然地从“氛围”一侧向“工程”一侧移动。起初,能用一句提示让 AI 生成整段代码的新奇感十分吸引人——谁不想“对话”式地创造一个应用?但过了“蜜月期”,务实主义就上来了。开发者开始了解 AI 擅长与不擅长的领域,他们学会将问题拆分后分段提交给 AI,而不是一次性要整个解决方案。实际上,他们从“提示艺术家”变成了“AI 指挥家”——依然在利用 AI 的创造力,但以娴熟的手法引导,遵循一份清晰的“乐谱”。在我自己的实践中,我会更有意地构造提示:常先写一小段伪代码或注释,再请 AI 补全,而不是从完全开放式问题开始。这样既保留了氛围编码的灵活,又在可控结构中获得了成果。

同样值得注意的是,工具正在进化以支持整个光谱。在一端,有专为氛围编码设计的聊天界面和自然语言编程环境,你甚至在要求之前看不到代码;在另一端,IDE 正不断添加 AI 功能,平滑地融合进传统编码流程:例如,AI linter 建议改进、文档生成器解释代码、版本控制机器人自动创建 PR 并提出审查意见等。这些工具在“编辑—评审—测试”等常规流程中植入 AI,同时鼓励更偏工程化的心态。

随着最佳实践不断涌现,氛围编码与 AI 辅助工程之间的界限可能会逐渐模糊。未来或许会出现这样的理想状态:我们能在光谱上自由移动——想要创新时畅快氛围编码,想要硬核交付时严谨工程实践两者兼顾。

总之,这一工作流光谱标志着我们与 AI 工具协作方式的重要演变。但即使我们在快速氛围编码或结构化工程流程中不断打磨与 AI 合作的技巧,一个更深层次的变革也在同时发生:编程的本质正在改变。我们正从必须将想法转换为机器可执行指令的传统范式,迈向一个可以直接表达意图,让 AI 完成翻译的未来。

这一转变挑战了我们对“程序员”身份的基本假设。几代人以来,我们的价值系于“像计算机一样思考”——把问题拆解为离散且合乎逻辑的步骤,以供机器执行。但当机器能够理解我们的意图,而不仅仅是我们告诉它的具体操作时,会发生什么?这正是“以意图编程”(programming with intent)登场之处,它不仅是一种新工具或新技术,更是对开发者角色的根本性重塑。

超越代码行:以意图编程

数十年来,编程意味着编写一行又一行的指令,告诉计算机该如何执行每个操作。每个函数、循环和条件判断,都需要人工精心构造。而“以意图编程”则颠覆了这一模式。开发者不再专注于底层实现细节,而是聚焦于结果或目标:你希望程序完成什么。你以高层次的方式(通常是自然语言)表达这种意图,AI 系统则负责生成相应的代码来实现它。

可以这样理解:传统编码就像给别人逐步指路,而基于意图的编码则更像告诉对方目的地,再由他们选择最佳路线。通过关注“做什么”而非“怎么做”,开发者能够在更高的抽象层次上工作。这种思路并不完全陌生——可视化编程、低代码平台和代码生成器早已承诺提高抽象级别。但直到今天,AI 的进步才真正让我们能用简洁的自然语言描述复杂行为,并换回可运行代码。

提示(Prompt)的崛起:从指令到描述

这一转变的核心是“提示”。提示是你提供给 AI 编码系统的输入或问题,本质上是一段对你期望程序行为的描述,而非如何实现的指令。这与编写代码截然不同。例如,与其自己写一个循环去解析文件,你可能只需提示:

“读取此 CSV 文件,提取所有年龄大于 18 岁用户的邮箱地址。”
AI 会尝试生成对应的实现代码。

为什么“提示式开发”在此时崛起?关键在于大型语言模型(LLM)在理解并生成文本(包括各种编程语言)方面的飞速进展。这些模型在海量代码仓库、文档、论坛和问答网站上进行训练,既掌握了编程语言的语法,也学习了人们描述任务的方式。它们能解析描述性的提示,将人类表达的需求转化为可执行代码。

结果是,作为开发者,你越来越多地以自然语言或伪代码的形式撰写功能和逻辑描述,然后让 AI 负责那繁琐的语法和实现细节。提示成为新的思考单元——你从“做 X,然后做 Y,再做 Z”转向“我需要完成 X、Y、Z”,并信任 AI 来填补中间细节。

值得注意的是,编写高质量的提示本身就是一门技巧(第 3 章将深入探讨)。模糊的提示可能导致错误或低效的代码,就像不明确的需求会让人类程序员摸不着头脑一样。你在提示中表达意图的清晰度,决定了 AI 产出的准确度,这也是为何越来越多人将“提示写作”视为新一代的编程素养。

工作原理:迭代循环与 AI 在代码生成中的角色

那么,AI 如何从你的自由描述到生成可运行的代码?这要归功于 LLM 解读上下文并生成文本的能力。“大型”指的是模型参数量通常达到数十亿甚至更多,使其能捕捉自然语言与编程语言的复杂模式。模型经过对公开代码库、文档、问答等多种文本的训练,既掌握语法,也学会怎样用代码解决问题。当你与 AI 编码助手互动时,实际上是在调用它广泛的“知识库”。

下面是一个简化流程:

  1. 解析提示: AI 分析你输入的提示文本(如“生成一个判断数字是否为质数的函数”),结合其在海量示例中学到的统计模式,推断你在请求什么。
  2. 利用上下文: 在 IDE 中,AI 往往还会参考当前文件内容、编码风格、注释乃至相关文件,以生成更契合项目的代码,类似于人类开发者阅读周边文档后再动手。
  3. 生成代码: 模型基于对提示的理解,一次生成一个“token”(一个词片或代码符号),并按训练时学到的概率分布进行选择。虽然它不会像编译器那样实时执行校验,但凭借见过的大量示例,往往能产出符合最佳实践的正确代码。
  4. 人类验证: AI 不会自动部署代码,开发者仍需审查、测试并接受或修改生成结果。许多 AI 助手还能在被询问时解释其产出的代码,帮助你理解。AI 如同草拟代码的助手,而你则是最终的决策者,确保代码满足项目需求。

这一切通常在数秒内完成。你将高层描述(提示)提交给 LLM,便能快速收到可执行代码。虽然模型内部涉及复杂的数学与神经网络层,但对用户来说,就像与一个随时可用、精通各种实现细节的专家合作。

迭代协作:人机共编的循环

以意图编程(亦即氛围编码)的核心,是人与 AI 之间的迭代、协作过程。你不会写一个“完美提示”后就坐等 AI 一气呵成;实际上,你与 AI 之间会不断来回,逐步将模糊想法打磨成成熟代码。典型循环如下:

  1. 初始描述: 你提出初步需求,如

    “生成一个函数,计算给定本金、利率和期限的每月贷款还款额。”

  2. AI 生成初稿: AI 根据提示写出函数,包括参数定义和还款公式,甚至附上注释。

  3. 审查与测试: 你检查逻辑是否合理、是否处理边缘情况,并快速测试——例如,利率为零时输出是否正确。

  4. 反馈与改进: 若发现问题,你可再次提示 AI(“调整函数以优雅地处理 0% 利率”),或直接编辑并请 AI 解释某段代码。

  5. AI 调整: AI 根据你的反馈优化代码,加入相应检查。

  6. 重复直至满意: 你可继续请求 AI 生成该函数的单元测试,运行并验证一切正常。

这种协作如同结对编程:人类负责方向与高层需求,AI 承担建议、编写样板和加速繁琐环节。二者缺一不可:AI 依赖人类的引导与验证,人类则借助 AI 提速完成工作。

更重要的是,这并非仅为修复错误而设计的循环,更是为演进解决方案而生。你可以从粗糙的提示开始,随着 AI 的产出不断完善需求与实现。相比于传统编程中一次性写完模块再推倒重写的痛苦,以 AI 生成代码的“试错成本”极低,鼓励你大胆尝试多种方案。

生产力、可及性与编程本质的变化

为什么“以意图编程”如此重要?这一转变带来了多方面的深远影响:

提升开发者生产力
最直观的好处就是速度。当 AI 承担重复性工作时,开发者能更快完成任务。那些手写可能需数小时的常规代码(如搭建数据库模型、API 端点或数据清洗脚本),往往可在几分钟内由 AI 生成。早期研究也证实了这点:使用 GitHub Copilot 等 AI 助手的开发者,完成同一任务的时间平均缩短了 55%。将这种效率增益推广到整个项目,意味着软件开发周期将大幅缩短,团队能更快地迭代。

保持“心流”状态
除了速度,AI 还能带来心理层面的正向作用。编写样板代码或查找语法往往会打断程序员的思路,而当 AI 接管这些琐碎环节时,开发者可以专注于真正要解决的问题。许多用户反映,有了 AI 帮助后,他们不再被枯燥任务拖累,能够更多地投入到创造性和设计性的工作中,从而写出更高质量的代码——快乐的编码者通常也会写出更好的代码。

降低入门门槛
传统编程要求熟记语法细节以及各种库和框架各自的用法。而在意图编程中,这部分负担部分转嫁给了 AI。初学者即使记不清如何打开文件或绘图函数的参数,只要能描述出需求,AI 就能补全细节。这并不意味着任何人都能零基础构建复杂系统(你依然需要理解程序应该做什么),但确实缩短了从零到可用原型的上手时间。可以想见,领域专家(如生物学家或经济学家)仅用自然语言描述需求,就能快速生成领域原型,而无需成为专业开发者。这样一来,编程对那些有想法却缺乏深厚编码技能的人变得更易接近。

开发者角色与技能的演变
随着 AI 承担越来越多的代码生成,人的角色也在转变。架构设计、问题拆解和结果验证等能力将变得更加重要。你可能会将更多时间花在“要做什么”和“为什么这样做”上,而非敲击每一行语法。对“会编程”的定义或将从“会写代码”转向“会让 AI 写代码”。这种变化既能让更多人参与软件开发,也能提升专业人士所处的层次。关于如何高效引导 AI,我们将在第 3 章及全书中反复讨论相应的最佳实践。

生产力与创造力的平衡
随着 AI 承担起 80% 的例行性编码工作,人类开发者可以将精力投入到 20% 的创意性任务上,比如打磨用户体验、头脑风暴新功能,或攻克 AI 难以独立解决的复杂算法问题。在理想状态下,AI 提升了效率,让你将心智能量留给更具创造性的挑战。

然而,这种新模式也带来一系列挑战:

信任与正确性
你能信任 AI 写的代码吗?如果不检查每一行,就有遗漏错误的风险。开发者必须对 AI 生成的代码进行充分测试和审查,保证其正确、安全、高效。盲目信任是危险的,我们会在后文讨论相关对策。

基础技能的流失
如果过度依赖 AI 完成常规编码,是否会逐渐丧失从零编写或深度调试代码的能力?这像过度依赖计算器导致的心算退化。开发者需要在便利性和基本功维护之间取得平衡。

职场形态的转变
当意图编程普及时,行业或将更看重系统设计、组件集成与结果验证等技能,而非单纯的“写样板代码”能力。软件岗位性质可能转变:AI 负责更多实现细节,人类聚焦设计和质量管控。

此外,“氛围编码”成功与否的一个关键因素是模型的上下文窗口大小。诸如 Gemini 等模型提供了业界最长的上下文窗口,对大型项目而言意义重大。目前已有模型支持超过百万 token 的上下文,可将整个代码库一次性“喂”给 AI,实现对全局的理解。

在本章末,我们将更深入探讨这些利弊及取舍。但首先,让我们先了解一下支持这种新型编程方式的最新工具。

工具一瞥:新兴生态系统

氛围编码虽然是一种理念,但它离不开新一代 AI 驱动工具的支持。想要拥抱这一工作流的资深开发者,需要熟悉一些关键平台和模型,它们让 AI 辅助编码成为可能。

以下是氛围编码者工具箱中的核心组件速览。包括:配合 Copilot 的 Visual Studio Code(VSCode)及其不断扩展的 AI 功能生态;新一代 AI 集成 IDE,如 Cursor 和 Windsurf;以及各类大型语言模型(LLM),例如 Claude(多个版本)和 ChatGPT。本节不涉及后台编码代理(background coding agents),有关它们的详细讨论见第 10 章。

阅读本节时,无需记住所有具体工具名称或功能,生态在飞速演进。目标是了解可用的解决方案类型。

VSCode + Copilot:微软的 AI 集成开发平台

VSCode 已从全球最流行的代码编辑器,演进为一个全面的 AI 辅助开发平台,这得益于其与 GitHub Copilot 的深度集成。此演变体现了微软的愿景:让数百万开发者每天使用的熟悉界面,自然而然地承载 AI 能力。

GitHub Copilot 是内嵌于 VSCode 的 AI 编码助手,基于自然语言提示和现有代码上下文,提供代码建议、解释与自动实现。它与编辑器的无缝契合,使 Copilot 不再是“插件”,而更像编辑器自带的功能。

VSCode 的 AI 能力主要体现在三种交互模式:

  1. 行内自动补全
    当你敲代码时,Copilot 会以“幽灵文字”形式给出从单行补全到整函数实现的建议,按 Tab 可一键接受,或逐词采纳。
  2. 聊天界面
    可通过侧边面板发起对话,就代码提出问题或请求具体实现。
  3. 代理模式(Agent Mode)
    这是最强大的模式:Copilot 根据你的目标,自动调用 VSCode 内部一系列工具,分步执行。它能分析整个代码库、跨文件提出编辑建议、执行终端命令、响应构建错误,并在循环自校正中完成任务。

VSCode 中 Copilot 的另一大亮点是对 模型上下文协议(Model Context Protocol,MCP) 的支持。MCP 为 AI 模型与外部工具、应用和数据源的交互提供了标准接口。启用 GitHub MCP 服务后,你只需对 Copilot 说:“为我们讨论过的每个 Bug 创建一个 Issue”,它就能直接调用 GitHub API 完成操作。借助 MCP,Copilot 已不仅是代码生成器,而是一名理解整个工作流的综合开发助理。

高效使用建议

  • 对于简单补全与重构,可依赖行内自动建议和错误旁的“闪光”图标,单击即可获得 AI 修复方案。
  • 处理更复杂任务时,打开聊天面板并在下拉框中选择“Agent”模式,它能在多个文件间自主编辑并执行命令,尤其适合需要工具调用的复杂工作。
  • 以熟悉的 VSCode 界面,结合不断增强的 Copilot 能力,为团队提供企业级 AI 支持,而无需离开既有开发环境。

VSCode + Cline:开源的自主编码代理

在探索专用 AI IDE 之前,不妨先看看 Cline(前称 Claude Dev)如何将 VSCode 打造为强大的 AI 辅助环境。Cline 与微软 Copilot 代表了不同理念:它更像一个自主编码代理,能够从头到尾完成复杂的多步骤开发任务。这款开源扩展为 VSCode 带来了许多私有编辑器中少见的能力,同时保留了 VSCode 用户期待的灵活性与可扩展性。

Cline 的核心在于其真正的“代理式”开发方式。你只需向它发出高层请求,例如 “创建一个带用户管理和认证的 REST API”,它并非只生成样板代码,而是:

  1. 分析项目结构;
  2. 制定跨文件实现计划;
  3. 创建正确的文件夹层次;
  4. 安装所需依赖;
  5. 运行测试以验证实现;
  6. 在每一步操作前,向你展示计划并征求批准或修改意见。

这种“人机共控”设计在自动化与掌控之间取得完美平衡,让开发者既能放手利用 AI 能力,也能对代码库保持监督。

Cline 的技术能力远超简单的代码生成:

  • 它可用浏览器自动化调研 API 文档;
  • 通过分析多文件的错误堆栈,调试复杂问题;
  • 依托 MCP,与外部服务交互,例如连接数据库读取 schema,或与项目管理工具对齐需求。

在调试时,只需粘贴错误信息,Cline 即可追踪代码库并定位根因,提出并实现修复方案,并添加必要的错误处理,以防类似问题重现。

对于团队而言,Cline 的开源特性至关重要:你可以审查其源代码、贡献改进,或根据安全与合规需求定制分支。它支持多种 AI 服务商,包括 Anthropic Claude、OpenAI、Google Gemini,甚至通过 Ollama 运行本地模型,让团队能够根据性能、成本或数据驻留要求灵活选择。

高效使用建议

  • 提供详细提示,包含项目上下文与约束;
  • 利用 Cline 在修改前分析整个代码库的能力;
  • 借助其迭代式对话,在同一会话中即时测试并请求优化。

将 VSCode 成熟生态与 Cline 自主能力结合,团队即可在不放弃既有工具与工作流的前提下,实现灵活、强大且具成本效益的 AI 辅助开发。

Cursor:AI 驱动的代码编辑器

氛围编码运动的旗舰工具之一是 Cursor,这是一款 AI 增强型 IDE,因其流畅的编码体验迅速赢得了开发者青睐。Cursor 本质上是一款以 AI 为先的代码编辑器(实际上是 VSCode 的一个分支),将最先进的代码生成与理解能力直接内置在开发环境中。

其标语是“AI 代码编辑器”,旨在让你使用自然语言指令来编写和修改代码。例如,你可以选中一个函数并对 Cursor 说“优化此函数”或“在此添加错误处理”,它会即时给出代码修改建议。Cursor 的 AI 具有项目感知能力——它会索引你的代码库并理解文件上下文,从而提供远超简单自动补全的相关建议。Cursor IDE 将 LLM 功能深度整合到核心界面;它就像是一个了解你代码库的 ChatGPT。

在底层,Cursor 利用先进的语言模型(根据配置,通常是 Anthropic 的 Claude 或 OpenAI 的模型)来驱动其功能。它提供一个聊天侧边栏,让你就代码展开对话,甚至还拥有多步骤代码生成的“Composer”模式。AI 先驱 Andrej Karpathy 本人在氛围编码实验中就使用过 Cursor 的 Composer 与名为 “Sonnet” 的模型,通过“SuperWhisper”进行语音转文字操作,与编辑器“对话”并生成代码,然后再接受或优化这些改动。

Cursor 不仅能生成新代码,还能根据指令编辑现有代码。举例来说,你可以问:

“能否让 transport listener 更方便地切换证书?”
Cursor 会理解你是在指当前项目的代码,并在相关文件中直接提出编辑建议,或读取规范文档(如 Markdown 文件)来辅助决策(见图 1-3)。在免费版中,它通常会在聊天中提供 diff 供你审阅;在专业版里,它则可自动将更改应用到工作区。

image.png

Cursor:AI 驱动的代码编辑器

氛围编码运动的旗舰工具之一是 Cursor,这是一款 AI 增强型 IDE,因其流畅的编码体验迅速赢得了开发者青睐。Cursor 本质上是一款以 AI 为先的代码编辑器(实际上是 VSCode 的一个分支),将最先进的代码生成与理解能力直接内置在开发环境中。

它的标语是“AI 代码编辑器”,旨在让你使用自然语言指令来编写和修改代码。例如,你可以选中一个函数并对 Cursor 说“优化此函数”或“在此添加错误处理”,它会即时给出代码修改建议。Cursor 的 AI 具有项目感知能力——它会索引你的整个代码库并理解文件上下文,从而提供远超简单自动补全的相关建议。Cursor IDE 将大型语言模型(LLM)深度整合到核心界面;它就像是一个了解你代码库的 ChatGPT。

在底层,Cursor 利用先进的语言模型(根据配置,通常是 Anthropic 的 Claude 或 OpenAI 的模型)来驱动其功能。它提供一个聊天侧边栏,让你就代码展开对话,甚至还拥有多步骤代码生成的“Composer”模式。AI 先驱 Andrej Karpathy 本人就在氛围编码实验中使用过 Cursor 的 Composer 结合名为 “Sonnet” 的模型,通过“SuperWhisper”进行语音转文字,与编辑器“对话”并生成代码,然后再接受或优化这些改动。

Cursor 不仅能生成新代码,还能根据指令编辑现有代码。举例来说,你可以问:

“能否让 transport listener 更方便地切换证书?”
Cursor 会理解你指的是项目中的相关代码,并在相应文件中直接提出编辑建议,或读取规范文档(如 Markdown 文件)来辅助决策(见图 1-3)。在免费版中,它通常会在聊天中以 diff 形式提供修改内容供你审阅;在专业版里,它则可自动将更改应用到工作区。

要在专业环境中充分发挥 Cursor 的威力,建议系统地利用它的各项功能:

  1. 开启聊天并描述需求
    打开 Cursor 聊天面板,简要说明你要实现的功能或修复的内容。例如:“添加一个带邮箱和密码验证及错误提示的用户登录表单。”Cursor 会以草稿状态生成所需代码(创建新文件或修改现有文件),并展示 diff 预览。你可以审阅这些更改,确认无误后点击“Apply”将其合并到代码库中。许多开发者遵循“提示 → 审阅 → 接受”的循环;若建议不够完美,可继续完善提示(比如“用 Tailwind CSS 美化表单”)或请 Cursor 修复你发现的问题(如“处理邮箱已注册的情况”),与代码对话直至满意。
  2. 借助 AI 辅助调试
    如果运行代码时出现堆栈跟踪或错误信息,可将其粘贴到 Cursor 聊天中,AI 往往会分析并给出修复建议。这使调试变成合作体验:你无需手动搜寻网络,Cursor 就能定位问题并生成补丁。但仍建议人工验证这些修复,因为 AI 并非始终一击必中。
  3. 利用全局上下文
    Cursor 能够同时考虑多个文件:在提示中选中一组文件,或告知项目上下文,AI 就会在生成代码时参考整个代码库。例如,你可提:“在后端添加一个支持登录表单的新 API 端点,并将其连接到我们刚创建的前端表单。”Cursor 会回忆起前端代码,并帮你编写相应后端逻辑。这种跨文件、项目级别的上下文理解,大幅超越了早期只能逐文件工作的编码助手。

总之,Cursor 就像嵌入 IDE 的全天候 AI 编程搭档——用自然语言与它对话,它就能直接修改你的代码。多加练习如何将任务拆解并提供清晰提示,短时间内你会发现自己能完成更多工作。它尤其适合迭代式开发:你写一点、运行看看效果,然后立刻请 Cursor 调整或扩展,如此循环。

Windsurf:全代码库索引的 AI IDE

另一个迅速崛起的氛围编码利器是 Windsurf,它通过对整个代码库进行索引,并采用检索增强生成(RAG)技术,在 AI 建议时提供最相关的文件片段,进一步提升了大项目的处理能力。

对开发者而言,使用 Windsurf 的体验如下:

  • 代码库问答
    你可以用自然语言询问代码库问题,比如“用户认证逻辑在哪里处理?”,Windsurf 会在索引中搜索并精准指向相应文件或函数。
  • Cascade 视图(Cmd+L)对话
    打开 Cascade 视图,在聊天框中输入:“为登录流程添加基于手机的二次验证。”由于 Windsurf 已掌握认证逻辑的上下文,它能够跨数据库、API、前端等多处文件生成一致的实现。
  • Write 模式自动应用
    在 Write 模式下,Windsurf 不仅显示 diff,还会自动创建或编辑文件,将更改直接应用到项目中,省去手动粘贴的步骤。它类似一个自信的“初级工程师”,在整个代码库内实现特性。
  • 全局上下文建议
    Windsurf 会将最相关的文件片段提供给模型,因此在执行“将支付模块重构为使用新的日志实用工具”时,它会同时参考支付模块和日志工具,实现高一致性的改动。
  • 多种模式支持
    Windsurf 提供 Autocomplete、Chat、Command 和 Cascade 等多种模式,你可以根据任务需要决定给它多大自主权。

对于团队来说,Windsurf 可像 Cursor 那样融入日常开发。因其索引和自动应用更果断,许多开发者在大型项目中更偏好它;而喜欢 VSCode 风格的用户则可能更倾向 Cursor。实际中,也可同时保留两者,或由团队统一选型。

总之,Windsurf 是一款真正“先读后写”的超智能 IDE:它透彻理解你的整个项目,并能跨文件、跨层实现功能,大幅提升开发效率。使用时请务必审阅其更改(它会展示给你),以确保关键代码无误。

AI 模型:代码生成格局概览

AI 编码领域已发生剧变,如今多款强大模型竞相为开发者提供服务,涵盖 Claude、Gemini 和 OpenAI 等系列。曾经可能只有寥寥数款主流模型,而现在的生态系统可选项繁多,各有优势,适用于不同的编码场景。

模型类别解析

当前的编码模型大致可分为以下几类,依据各自特点和擅长领域:

  • 速度优先型
    这类模型响应迅速,适合实时代码补全和快速迭代。它们在低延迟和快速反馈方面表现优秀,但在处理复杂任务时准确度可能略逊一筹。
  • 深度推理型
    这类模型在“思考”复杂问题时耗时更长,却擅长多步骤问题解决、架构决策和复杂调试。它们能够逐步分解并排查复杂 Bug。
  • 多模态巨擘
    某些模型不仅能处理代码和文本,还能理解图像、流程图甚至视频内容,因而在阅读可视化文档或处理 UI/UX 元素时尤为有用。
  • 开源替代品
    如 DeepSeek,提供可比肩闭源模型的 AI 能力,无需付费或注册,但可能不具备图像生成或网页浏览等功能。

如何为任务选型

与其寻找“最强”模型,不如根据任务需求选择:

  • 快速原型与常规编码:优先使用速度优化且支持多种语言的模型。
  • 复杂调试与系统设计:选择深度推理型模型,它们能循序渐进地分析逻辑。
  • 大型代码库维护:选用拥有超大上下文窗口的模型,以便保持全局语境意识。
  • 预算有限的团队:开源模型无需订阅费用,是性价比之选。

许多工具现已支持在 OpenAI、Claude、Gemini 等多种模型间切换,开发者可根据具体任务灵活选用。

通用实践技巧

无论选用何种模型,以下做法都有助于提升结果质量:

  1. 提供丰富上下文
    不要只请求“支付处理函数”,而应同时提供数据模型、现有代码模式、错误处理方式及具体需求。上下文越充分,输出越贴合项目。
  2. 让模型审查自身输出
    生成代码后,可让模型自查潜在问题、提出优化建议或解释其思路,这能帮助发现细微缺陷。
  3. 利用对话式迭代
    先让模型给出基础实现,然后通过后续提问不断完善。迭代式方法通常比一次性列出所有需求更高效。
  4. 摸清模型偏好
    不同模型在表达风格和语法选型上有细微差异:有的更喜欢详细注释,有的更简洁;有的偏向新语法,有的更保守。了解这些特性,有助于为其量身定制更精准的提示。

主要模型

AI 编码生态每月都在迅速演变,新模型不断涌现,对既有领先者发起挑战。竞争如此激烈,以至于开发者可享受前所未有的多样选择和能力提升。最重要的并非选出“完美”模型,而是理解如何发挥手头工具的优势。

许多开发团队如今采取组合策略:对常规任务使用响应迅速的模型,对复杂挑战借助强推理能力的模型,并针对数据库优化、前端开发等特定领域选用专用模型。一些 IDE 甚至支持在任务中途无缝切换模型。成功的关键在于了解这些选项,并有策略地应用它们以加速开发流程。

Google Gemini:多模态编码巨擘

Google 的 Gemini 系列在原生多模态能力上实现了 AI 辅助开发的根本性跃升。与主要在文本和代码上训练的模型不同,Gemini 从架构层面便可无缝理解并处理文本、代码、图像、视频等多种数据格式。这使其在需要视觉上下文的现代开发流程中极具价值。

在 Web 开发场景中,Gemini 的多模态特性尤为突出。开发者可提供设计稿截图,Gemini 即能生成像素级还原的实现;它不仅能识别图表、流程图和 UI 元素,还能理解设计模式,并在整个项目中保持美学一致性。

Gemini 可通过 VSCode、Cursor、Windsurf 等流行编辑器及 Cline、Code Assist 等插件进行深度集成,让团队从个性化设置扩展到全局规范。你可以定义自定义命令来处理重复任务,为所有代码生成设定规则,并在大型代码库中保持统一的编码风格。宽松的免费额度让学生、爱好者和初创公司都能使用,企业级功能则满足复杂组织的需求。

Gemini 的独特之处在于,既能在简单任务上快速响应,又能在复杂挑战上展开深入推理,并根据具体问题动态切换模式。这种灵活性,加上对视觉信息的深刻理解,使其在后端逻辑与前端美学同等重要的全栈开发中尤为高效。

Claude:推理大师

Anthropic 的 Claude 系列,以透明化和深度推理著称,尤其是 Sonnet 系列模型,在需要严谨分析与分步解决的复杂软件工程任务中表现卓越。Claude 的一大特色是能够展示其“思考过程”,让开发者在实施解决方案前跟随并验证其推理逻辑。

Artifacts 功能为与 AI 编码助手的交互带来范式转变。Claude 不仅在聊天界面输出代码,还创建一个专属工作区,支持实时查看、编辑和预览。这种交互式环境在前端开发、数据可视化等需要即时视觉反馈的场景中威力十足,开发者可在同一会话中迭代设计、测试功能并优化实现。

在真实软件工程基准测试中,Claude 在修复 Bug、实现新功能和代码重构等任务中始终名列前茅。它不仅能生成代码,更能深入理解软件项目整体,分析既有代码库、识别模式与反模式、提出架构改进,并保持与既有编码风格的一致性。无论是绿地项目还是遗留系统维护,Claude 都能提供极高价值。

Claude 在记忆与上下文管理方面也颇具优势:在长时间编码会话中,它能提取并保留项目结构、设计决策和特定模式等关键信息。随着会话深入,它对项目的理解不断加深,建议也愈发契合,如同一位越做越熟悉项目的“团队成员”。

ChatGPT:多面手编码伙伴

ChatGPT 已成为 AI 编码助手中的“瑞士军刀”,其无与伦比的多功能性和广博知识使其在开发工具箱中独树一帜。与专门集成到 IDE 或提供专用编码环境的模型不同,ChatGPT 更多以浏览器常驻工具的形式出现,随时为开发者提供编程咨询。

ChatGPT 的对话式界面特别适合探索性问题解决和学习。开发者常用其进行“橡皮鸭式调试”:将有问题的代码粘贴进去,通过自然对话理清思路。ChatGPT 的训练覆盖几乎所有流行编程语言、框架和工具,能识别正则表达式、解读晦涩错误信息或帮助探索陌生库的用法。

它最擅长在人类意图与代码实现之间架起桥梁,双向转换能力尤为出色——既能将自然语言描述转为可运行代码,也能将复杂代码用通俗语言解释清楚。这让它在文档编写、代码评审和团队知识传递等环节中价值倍增。开发者可将陌生代码片段粘贴给它,获得功能解析;也可描述目标行为,获得跨多种编程范式的适用实现。

ChatGPT 的适用范围超越传统编程语言,还涵盖配置文件、脚本、数据格式和领域专用语言。尽管专用编码工具在其专业领域表现更佳,ChatGPT 在跨技术边界、跨领域问题时提供的帮助同样宝贵。它能在长对话中保持上下文,支持开发者通过协作式对话迭代解决复杂问题。

为需求选择合适的模型

这些强大 AI 编码助手的出现,标志着软件开发实践的根本性变革。成功的开发者不会将它们视为互相竞争的单一选项,而是认识到每个模型家族在开发流程的不同环节中各有所长。Google 的 Gemini 在需要视觉上下文和多模态理解时表现卓越,尤其适合 UI/UX 开发以及处理设计规范。Anthropic 的 Claude 则在深度推理、复杂重构和透明化问题解决方面大放异彩。OpenAI 系列模型以其无与伦比的多功能性和广泛知识,成为学习、调试和跨领域挑战的理想选择。

许多开发团队现已采用“组合拳”策略,在同一项目中针对不同任务灵活选择模型。典型工作流可能是:用 Gemini 将设计稿转化为初始实现,用 Claude 进行复杂的架构决策和代码评审,用 ChatGPT 处理常规问题解决和文档编写。此种多模型方法能最大化生产力,将每种工具的优势与具体开发挑战精准匹配。

随着这些模型的持续演进,有效的 AI 辅助开发关键不在于选出单一“最佳”方案,而在于学会如何协调多款 AI 助手,以加速并提升软件开发生命周期的每个环节。

这个生态尚处于起步阶段,并在快速变化中,每隔几个月就会涌现新的参与者和能力。最重要的认识是:你无需从零自己训练 AI 也能利用“以意图编程”——市场上已有众多工具可供选择。在本书后续章节中,我将讨论各类平台以及它们如何融入氛围编码工作流中。

氛围编码的优劣势:更为细致的视角

认识到 AI 辅助开发真正擅长的场景——以及它可能失灵或需要大量人工干预的情况——至关重要。下面,我们将探讨氛围编码大放异彩的理想用例,以及当今 AI 仍然捉襟见肘或必须依赖人为介入的情形。

氛围编码的理想用例

就像某些架构更适合特定问题一样,氛围编码在软件开发领域也有其“最佳适配区”。

  1. 从零到一的产品开发
    零到一(zero to one)指的是从无到有地创造全新事物。氛围编码让你能在极短时间内,从空白画布跃升到可运行原型。需要搭建一个全新的 Web 应用?一连串提示就能生成前端、后端、数据库 Schema,甚至部署脚本。这对初创公司或黑客松项目尤为有利,让你在几分钟内完成往常需数周搭建的脚手架工作,快速验证想法。
    许多开发者反馈,借助 AI 配对编程,他们能在周末内完成 MVP(最简可行产品),而单打独斗可能要花费一个月。这样,你能更早地将产品拿给用户或利益相关者测试。AI 最擅长“通用套路”(路由、基本 UI、标准 CRUD 等),让你把精力放在产品差异化功能上。
    然而,一旦 MVP 获得用户认可并迈向生产环境,就必须切换到 AI 辅助工程模式。氛围编码帮你快速探索与验证,但要做大规模部署,就需要重构自动生成的代码、加入完善的错误处理、构建全面的测试覆盖,并建立清晰的架构边界。这标志着从探索自由向结构化工程的自然过渡。聪明的团队会识别这一转折点,调整 AI 使用策略——在保持速度的同时,加入可持续增长的“护栏”。
  2. 功能原型与 CRUD 应用
    许多业务应用的核心是对数据的增删改查(CRUD)。这类模式化工作 AI 异常拿手,因为其训练时见过无数示例。若要新增一个“库存”模块并实现 CRUD 界面和 API,氛围编码可以轻松搞定:生成数据库迁移脚本、ORM 模型、路由端点和带验证的 UI 表单——几乎不出错。即便有自定义业务规则,也可在提示中声明,让 AI 给出初稿。曾经费时一周的“接线搭桥”工作,如今只需一下午即可完成。对于后台管理工具或内部面板(本质上都是大型 CRUD 应用),你几乎可全权交给 AI 生成。
    但当 CRUD 牵涉复杂业务逻辑、校验规则或与既有系统集成时,就要转入工程模式。氛围编码能快速搭建基本框架,AI 辅助工程则确保模块正确处理并发更新、保持参照完整性,并遵循团队既定模式。你可以先用氛围编码生成 CRUD 骨架,再切到工程模式实现诸如库存阈值告警、多仓库分配,或与现有认证系统的深度对接。
  3. 胶水代码与系统集成
    当你需要整合两个服务或 API 时,往往要阅读文档并编写数据转换代码。很多 AI 模型已在 API 文档和示例代码上训练过,因而能加速这类集成。向 ChatGPT 提问“如何用 B 语言调用 A 服务的 API?”,它通常能给出正确的端点示例,并附带鉴权代码。将支付网关接入订单系统、在项目中植入第三方分析 SDK,都能借助 AI 快速生成相应样板和边缘情况处理逻辑。
  4. 现代框架应用
    AI 编码助手可谓“读透”了所有热门框架手册:React、Angular、Django、Rails、Express、Flutter……因此在它们之上写出地道代码不在话下。比如,生成一个带 hooks 状态管理的 React 组件,或带 admin 类和序列化器的 Django 模型,都能一键完成。你不必记住所有细节,AI 会自动补全。氛围编码在生成 HTML/JSX、绑定控制器端点等现代 Web 开发任务上表现尤为亮眼,就像随身携带了一位框架专家替你写样板。
  5. 批量重复代码生成
    有时需要编写大量相似代码(如为每种数据类型生成一组类或接口),人写容易疲劳出错。AI 却对重复结构“情有独钟”:给出一两个示例后,它能快速且一致地复制成百上千行。比如,若要为 50 种记录类型生成数据模型类,你只需提示一个示例,AI 即可在几秒内批量生成,大幅节省时间。

需要 AI 辅助工程优先的场景
尽管氛围编码在上述场景中大放异彩,但在以下情形中,AI 辅助工程必不可少:

  • 复杂算法实现
    当你在构建高性能数据结构、性能关键算法或解决全新计算难题时,需要对实现细节精雕细琢。此时,AI 更像知识助手,帮助你讲解算法思路或审阅实现,你仍需亲自掌控架构和优化决策。
  • 关键任务系统
    金融交易、医疗应用、安全基础设施等高风险领域无法承受氛围编码的探索式流程。每一行代码都需严谨审核、全面测试,并遵循法规合规。AI 在此场景下协助提供最佳实践或漏洞提示,但开发者必须对最终实现全权负责。
  • 遗留系统集成
    对几十年前的代码库、专有协议或技术债务沉重的系统进行对接,氛围编码往往因无法理解深层约束而失效。此时需深度调研约束条件,细致规划集成接口,并有条不紊地进行重构。AI 可帮你解读遗留模式或给出现代化策略,但实际编码仍需工程化思路。
  • 性能优化
    虽然 AI 可快速生成功能性代码,但在内存管理、缓存优化、并行处理和延迟控制等性能关键路径上,很少能一次出现最优解。这些领域需要对硬件、操作系统和算法复杂度有深入理解。AI 最适合作为研究助手,帮助你探索优化技术或对比基准测试结果,最终由你来做出实施决策。

总体来看,氛围编码善于处理编程中“老路子”任务(如 CRUD、常见 Web 应用结构)和验证新想法的快速试错(原型、概念验证)。它犹如一位读遍 GitHub 仓库的初级开发者,能立刻复刻常见做法,供你审阅;而 AI 辅助工程则是那位资深工程师,在关键时刻提供精准把关。

识别切换时机
现代 AI 增强开发的精髓不在于选定某一种方法,而在于精准识别何时在二者间切换。优秀的开发者会凭直觉把握这些转折点:

  • 启动新功能时,可以先用氛围编码快速探索。
  • 当代码复杂度提升或触及关键系统时,立即切换至工程模式。
  • 为客户演示概念验证时,氛围编码能助你快速成型;
  • 将概念验证转为生产系统时,则需以工程纪律来打磨。

这种在“快速探索”与“严谨构建”之间无缝切换的能力,造就了真正高效的 AI 增强开发者。他们深知氛围编码与 AI 辅助工程是工具箱中互补的利器,各自适合不同开发阶段。目标不在于选边站,而是策略性地同时运用两者,在软件开发全过程中最大化速度与质量。

AI 仍难以胜任的领域

尽管当下的 AI 编码工具令人印象深刻,它们并非万能。某些问题类别仍然很难让 AI 可靠地独立完成,往往需要人类洞察或传统编程方法。了解这些局限,能够帮助你设定合理期望,并在应“放手”与“收紧”之间作出明智抉择。

  • 高度复杂的系统
    当涉及全新算法(比如从科研论文实现新算法)或构建编译器、高度并发系统等需要精妙逻辑和创造性飞跃的任务时,AI 往往无所适从。它可能给出看似合理却不够严谨的实现,需要大量来回沟通才能补全剩下的 30% 细节(我称之为“70%问题”)。经验丰富的开发者通常只让 AI 生成框架或辅助函数,而把核心逻辑留给自己完成。
  • 底层优化与系统编程
    现有模型主要在高级语言和抽象层面训练,若需做位运算、为特定微控制器编写高度优化的 C 代码,或生成向量化 SIMD 指令,AI 往往不够可靠。它可能生成在概念上可行但在硬件级别并不最优甚至不正确的代码。诸如内存管理、实时约束等,也不是 AI 的强项:它并不会在“脑中”模拟 CPU 缓存。因此,这类性能关键代码要么彻底测试 AI 建议,要么干脆手写。当然,AI 仍能提供模板或汇编解释,但不能盲目信任。
  • 小众或新兴框架
    若所用框架极新或在模型训练时尚不存在,AI 根本不了解它。它可能凭借泛化能力给出“貌似对”的代码,却调用不存在的 API(幻觉)或沿用过时的版本。比如某框架上月刚出 breaking changes,AI 仍只会写旧版用法。这时须自行查文档,甚至将文档片段喂给 AI,让它“边学边用”。
  • 富有创造性的 UI/UX 设计
    若要让 AI 设计全新且富有创意的界面体验,它并不擅长这类创新飞跃。它能快速生成标准模式(如表单、仪表盘)的 UI 代码,但要打造无先例的独特交互,仍需人类设计师与前端工程师来构思和微调。
  • 解读隐含或矛盾需求
    当需求含糊或自相矛盾时,AI 往往难以把握真实意图。它只能靠你显式提供的信息来“猜”需求细节(比如“高效”究竟指速度还是内存占用?),容易产生偏差。人类更善于向非技术方澄清意图,也能结合业务规则避免走偏。

举个综合例子:你要用 Rust 编写一个新的 3D 渲染引擎(复杂系统、系统级性能要求、高度创新算法)。AI 可能帮你快速搭建窗口和渲染循环模板,但核心渲染算法和性能优化则要靠人类精打细磨。它能以伪代码形式给出思路,但并不能自动生成高效汇编循环,你得在每条指令上把关。

总之,AI 的本质是模式匹配,而非真正的“顿悟”。若问题需要灵光一现的创见,AI 往往只能东拼西凑,解决不了根本。此时,退一步由人类抽象思考、凭经验创新,才能掌控局面;得到洞见后,再让 AI 快速实现。

平衡利用优势与规避风险
了解上述强项与弱项后,你就能在合适场景应用氛围编码:将常见模式的“撒网式”工作交给 AI,而将复杂核心逻辑留给自己。对安全敏感的代码尤其要反复审核,别让 AI 漏掉边缘情况。

简而言之,让 AI 负责“广度”:大量样板与通用代码;让人类负责“深度”:复杂逻辑与架构设计。让 AI 在其擅长的领域大显身手,在最棘手的路段及时“夺回方向盘”,方能获得最佳效果。掌握何时启用 AI、何时依赖人类智慧,才是新纪元中成为高效开发者的关键秘诀。

总结与后续步骤

向“以意图编程”这一氛围转变,为软件开发带来了极大潜力——它既能加速开发、降低门槛,又能在许多方面提升工作乐趣。但要真正发挥这种潜力,就必须理解新的工作动态:如何与 AI 高效沟通、如何验证 AI 产出,以及如何将其负责任地融入开发流程。

基于我对这些工具的实践经验和对众多项目的观察,我的观点是:AI 最佳的用法在于将创造性的“氛围”与严谨的工程实践相结合。我们要鼓励 AI 带来的大胆创意和快速原型——这是我们手中新的超能力;同时,又要以几十年软件开发积累下来的智慧来引导这些想法:重视规划、测试,以及对所构建内容的深刻理解。

当我们在两者之间找到平衡,就能兼得快而富有想象力的开发效率,以及值得信赖、易于维护和扩展的软件。这正是 AI 时代提升我们工艺的方式:既不单选“氛围”,也不完全依赖“工程”,而是运用整个光谱的能力——从自由探索到严谨构建,一并掌握。

接下来,第 2 章将探讨提示(prompt)撰写的艺术与如何与 AI 协作。在本章奠定的基础概念指导下,你已准备好深入实践这个新编程时代的操作要领,并在后续章节学习更多实战示例和高级提示技巧。