Anthropic大师课:Vibe Coding编程实战指南与最佳实践
当一位程序员因伤无法打字,工作却必须继续时,会发生什么?Anthropic研究员、《构建高效智能体》合著者Erik Schluntz的亲身经历给出了答案:将核心开发工作完全委托给Claude AI。
这并非一个孤立的实验,而是“氛围编程”趋势正在深度渗透软件工程领域的缩影。如今,它已从技术爱好者的探索,演变为企业提升研发效能必须认真评估的战略路径。
近期,Schluntz基于这段为期两个月的“全自动开发”实践,在公开演讲中系统阐述了如何在真实生产环境中负责任地落地Vibe Coding。其内容因极强的实操性,近日在X平台再度引发热议,被开发者誉为极具参考价值的实战指南。
重新定义「氛围编程」
首先需要厘清一个关键概念。频繁使用Cursor或Copilot生成代码,并不等同于氛围编程。核心区别在于人机交互模式——如果开发者仍陷入逐行审查、频繁干预的循环,这本质上仍是传统编程的增强版。
AI专家Andre Karpathy对此的定义更为精准:真正的“氛围”,意味着开发者完全信任AI的自主性,拥抱其能力的指数级增长曲线,并将注意力从代码实现细节中彻底解放出来。
这种模式显著降低了开发门槛,使非专业背景者也能构建完整应用。然而,过去其成功案例多局限于个人项目或低风险原型。若将“完全放手”的策略直接套用于企业级生产环境,极易引发失控:API配额被迅速消耗、订阅逻辑遭意外破坏、甚至核心数据被误操作。
拥抱指数级增长的战略必然性
既然存在明确风险,为何仍要积极推进?根本驱动力在于AI编码能力呈现的“指数级增长”曲线。
当前,AI能连贯处理的任务复杂度,大约每7个月翻倍。今天,AI可完成约1小时工作量的编码任务,人类尚可同步审查。但当AI能一次性生成相当于人类数日工作量的代码时,传统的人工逐行审查模式将成为生产力爆发的瓶颈。
历史提供了镜鉴。早期开发者曾不信任编译器,会检查其生成的汇编代码。随着系统复杂度指数级提升,开发者必须学会信任更高层级的抽象。面对AI,软件工程界同样需要前瞻性构建方法论:如何在生产环境中,安全、可控地接纳由大模型直接生成的复杂系统。
构建可验证抽象层与「叶子节点」策略
在生产环境实践氛围编程,必须遵循一个核心原则:你可以不关心代码,但必须时刻掌控产品。
这与现代管理逻辑相通。CTO通过验收测试管理团队,产品经理通过用户体验验证功能,CEO借助核心指标把握业务。他们均不介入底层细节。软件工程师同样需要建立无需阅读源码即可验证系统行为的抽象层。
核心方法论:找到并定义你可以有效验证的抽象层级。
然而,当前AI编码面临一个关键技术障碍:技术债的量化与验证。除了阅读源码,我们缺乏系统化手段评估AI生成代码所积累的潜在债务。
针对此挑战,Erik Schluntz提出了一个务实策略:将AI的自主编码范围,优先限定在代码库的“叶子节点”。
“叶子节点”指那些不被其他模块依赖的末端功能或独立组件。在此区域,即使产生技术债,其风险也相对可控,因为它们变更频率低,且不会阻塞核心链路。相反,对于系统主干与核心底层架构,工程师仍需深入理解并严格守护其扩展性与健壮性。
值得注意的是,随着模型能力提升,我们可信任AI接管的代码层级正在下移。以Anthropic内部测试为例,AI生成高质量架构设计的成功率在提高,这条信任边界本身是动态演进的。
成为大模型的专职产品经理
要获取高质量的生产级代码,开发者必须完成思维转换:从“编码者”转变为AI的“产品经理”。核心问题不是“AI能做什么”,而是“我如何为AI的成功创造条件”。
面对复杂任务,开发者需像指导新员工一样引导AI。模糊的“实现这个功能”指令注定失败。你必须提供详尽的代码库导航、清晰的需求规格与所有约束条件。
Schluntz强调了一套标准前置工作流。在让Claude动手编码前,他会花费15-20分钟与模型进行深度交互:引导AI探索代码库、定位相关文件、共同制定执行计划。随后,将这些梳理完备的上下文与规范整合进一个独立的、信息完整的提示词中,再交付执行。遵循此流程,任务成功率呈指数级提升。
实战案例:生产环境合并22000行AI生成代码
演讲中,Schluntz披露了Anthropic内部一个极限案例:团队在强化学习相关的生产代码库中,成功合并了一次涉及22000行代码的修改,其中绝大部分由Claude编写。
为确保这次大规模合并可控,团队执行了四项核心策略:
- 深度产品引导:投入数天进行人工规划与需求梳理,确保目标绝对清晰。
- 严格限定范围:将代码变更严格约束在允许存在技术债的“叶子节点”区域。
- 核心区域人工把关:对涉及系统扩展性与正确性的核心逻辑,执行严格的人工审查。
- 建立可验证检查点:设计针对系统稳定性的长时压力测试,并确保系统具备易于人类验证的输入输出标准。
通过这套组合策略,一个原本需要工程师耗费两周进行编写与审查的大型工程,被压缩至1天内完成。当开发时间成本呈断崖式下降,工程师便能启动那些以往因资源限制而搁置的大规模重构与功能迭代,从根本上改变研发节奏与创新可能性。
进阶实战:探索、测试与工具链协同
在问答环节,Schluntz密集回应了开发者关心的实战细节,涵盖个人成长到工具链配置等多个维度。
提问1:关于学习与知识积累
问题:过去我们通过解决语法、库文件等具体问题来学习。现在该如何学习?如何积累足够知识以胜任AI“产品经理”的角色?
回答:这是个关键问题。我们确实会错过一些“死磕”细节的学习过程。但这未必是倒退,正如现代程序员无需手写汇编。
积极的一面是,借助AI,学习新技术的速度大幅提升。我常直接询问Claude:“解释一下这个库,你的选择依据是什么?”拥有一个永不离线的结对编程伙伴,意味着懒惰者可能敷衍了事,但只要你愿意深究,Claude能帮助你透彻理解底层原理。
此外,AI允许我们进行更高频的“试错”。原本需要两年验证的架构决策,现在可能六个月就能看到结果。只要保持探索欲,工程师在同等时间内积累的经验教训,可能是过去的四倍。
提问2:关于规划与信息平衡
问题:在前期规划中,如何平衡提供给AI的信息量?是否有标准化模板?
回答:这完全取决于你的关注点。如果我不关心实现细节,就只给出最终目标。如果我对某块代码库非常熟悉,我会具体到使用哪些类、参考哪个现有示例。
但经验表明,当不对模型施加过度约束时,其表现往往最佳。因此,不建议花费大量精力制定严苛的格式模板。像与初级工程师沟通一样,保持清晰、自然即可。
提问3:关于安全与风险平衡
问题:如何平衡开发效率与网络安全?媒体报道显示,不少由非专业人士通过氛围编程构建的应用存在严重漏洞。
回答:这再次回到第一点:你必须成为懂行的产品经理。你需要知道什么是危险的,什么是安全的。媒体报道的漏洞,多出自完全不懂编程的人之手,因此在玩具项目中尝试无妨。但对于生产系统,你必须通过正确提问来引导AI。我们那个22,000行代码的案例,是一个完全离线运行的任务,因此我们能确信没有外部安全风险。
提问4:关于普惠开发与安全框架
问题:全球懂软件的人不足0.5%。为了让普通人更安全地构建软件,避免API密钥泄漏等问题,现有产品需要做出哪些改变?
回答:我们需要更多能实现“数学证明级别正确性”的产品与框架。例如,构建一种系统,将身份验证、支付等核心后端逻辑牢牢锁定并保障安全,仅开放一个“填空式”的前端沙盒,供用户进行安全的氛围编程。
最简单的例子是Claude Artifacts,它完全托管在云端,仅涉及前端交互,不触碰权限与支付,因此无论如何操作都是安全的。业界需要更多此类能作为安全基座的优秀工具。
提问5:关于测试驱动开发(TDD)
问题:关于测试驱动开发,你有什么技巧?Claude容易陷入编写过度具体测试的困境。
回答:TDD在氛围编程中极其有效。即使你看不懂具体测试用例,它也能使Claude的输出更自洽、可靠。
但确实,Claude易编写出过度依赖内部实现的“脆弱测试”。我的做法是强制规范:“只编写3个端到端测试,覆盖快乐路径、错误场景1和错误场景2”。引导它产出极其简洁、连我自己也能一眼看懂的端到端测试。
在氛围编程中,我通常唯一会仔细阅读的代码就是测试代码。测试全部通过,我才能放心。
提问6:关于“指数级增长”的含义
问题:Andre Karpathy所说的“拥抱指数级增长”具体指什么?模型是否会在我们期待的每个维度都变好?
回答:指数级增长的核心,不仅是持续改进,而是其改进速度远超我们的线性预期。就像散点图,开始平缓,随后垂直飙升。
回顾90年代的计算机发展,从几KB内存到今天的TB级存储,不是好了两倍,而是好了数百万倍。因此,我们不应思考“20年后模型比现在好两倍会怎样”,而应思考“如果它比今天聪明一百万倍会发生什么”。这极其疯狂,也充满可能性,这才是拥抱“指数级”的真正含义。
提问7:关于工作流与上下文管理
问题:你使用两种工作流:终端(Claude Code)和VS Code/Cursor。你通常用哪种?多久压缩一次上下文?因为时间长了模型容易偏离轨道。
回答:我两者都用。主要代码修改由Claude Code完成,同时我在VS Code中边走查代码(更常见的是走查测试代码)。
我通常在感觉到一个“人类程序员会停下来休息”的自然停顿点时,就压缩一次上下文。我的标准流程是:先让Claude找出所有相关文件并制定计划,然后让它将这些信息写入一个文档,接着立即压缩上下文。这样就能丢弃制定计划时消耗的约10万个Token,压缩成仅几千Token的干净上下文,效率极高。
提问8:关于多会话协作与陌生代码库
问题:你会同时使用多个Claude Code会话然后合并结果吗?面对极其陌生的代码库,如何以工程化的方式提交PR,而非胡乱修改?
回答:是的,我会用Claude Code搭建初始框架,然后用Cursor收尾和修复细节。对于我知道具体位置的小修改,我会直接用Cursor手动完成。
面对完全陌生的代码库,在动手编码前,我会先用Claude Code进行探索。我会问:“认证代码在哪里?”、“列出与这个新需求类似的现有功能”、“指出我应该查阅的核心类”。先在脑海中构建全局视图,确保我能稳妥掌控全局,然后再与Claude协同实施。










