当 Agent 遇见 Serverless:一场静悄悄的开发范式革命
上周四下午,我与同事闲谈起一个看似寻常的需求:构建一个 email 网关。这网关要接收发往不同地址的邮件,做些初步处理,再将其推送到各应用的 SQS 队列中,让各家自取自用。
若你用过 Expensify 或 FrontApp,定能体会此等架构的妙处 —— 借邮件这古老却通用的协议,打通了系统之间的藩篱。报销单据也好,客户反馈也罢,内部审批亦可,统统借邮件流转,而各个系统只消关心自家的一亩三分地。
这需求说难不难,说易也不易。真正的难处不在业务逻辑,而在基础设施的编排:你得让 AWS SES、SQS、Lambda、DynamoDB、S3、EventBridge 这一堆服务正确地协同作业,如同指挥一支乐队。
若在从前,这意味着什么?意味着你要在好几个浏览器标签页和终端窗口之间来回穿梭,在 CloudWatch 日志的汪洋大海中捞针,在本地与云端环境的罅隙间反复试错。每一次调试都是场马拉松,每一个配置错误都可能让你抓狂半日。
然而,当我祭起 Coding Agent 这柄利器,整个局面为之一变。
双刃剑:Serverless 的甜蜜与苦涩
说起 Serverless 架构,倒真是应了那句「成也萧何,败也萧何」。
一方面,它让你得以专注业务逻辑,无需操心服务器运维、扩容缩容这些琐碎杂务。按需付费的模式,更是让小团队也能搭建起从前只有大厂才玩得起的分布式系统。可谓是「四两拨千斤」,妙哉。
但另一方面,Serverless 的复杂性却是另一重天地,以这个 email 网关为例:
看似清晰的架构图,实际开发起来却是另一番光景。每个箭头背后都藏着一堆配置:IAM 权限、环境变量、超时设置、重试策略… 更要命的是,当系统出了岔子,你得在四散的日志中抽丝剥茧,拼凑出完整的调用链路,如同破案一般。
我曾经花了整整一个下午,就为了查明为何有个 Lambda 函数未被正确触发。最后发现,原来是 Lambda 函数的执行角色缺了对某个 S3 bucket 的写权限,导致写入失败,没有后续事件来触发下一个 Lambda。这等问题,在传统单体应用中不过是一行日志的事,在 Serverless 的世界里,却成了一场考验耐心的侦探游戏。
Agent 的通天本领:全局视野与即时反馈
传统开发模式下,我们好比戴着眼罩的马,只能看到眼前的一小片天地。写代码时瞧不见日志,看日志时改不了配置,改配置时又忘了之前的错误信息。我们在不同的工具和界面间疲于奔命,认知负载已至极限。
而 Coding Agent 却大不相同。它能在几秒钟之内:
- 遍览所有相关服务的配置
- 分析跨服务的日志流转
- 洞悉整个系统的调用链路
- 定位问题所在并提出解决之道
- 修改代码、部署、验证,一气呵成
更妙的是,Observability 成了 Agent 的千里眼。Serverless 架构天然产生的大量日志和监控数据,从前是开发者的包袱,如今却成了 Agent 的养料。它可瞬间消化这些信息,构建起系统运行的全景图,如同俯瞰沙盘。
这个循环可以在几分钟内完成多次迭代。从前需要几天的活计,如今可能几个时辰就搞定了。
从「写代码」到「规约先行」:范式之变
这变化可不仅仅是效率的提升,更是编程范式的根本转变。
从前,我们直接动手写代码,一行行敲,一个个函数雕琢。如今,我的工作方式却大不相同,更像是在与 Agent 进行一场「协同创作」:
第一步,我将脑中的想法凝练成 prompt,抛给 Coding Agent。这想法可能还很粗糙,但包含了核心诉求。
第二步,Agent 帮我认真思考,将这些零散的想法条分缕析,构建成一份完整的需求文档。它会提出疑问,补充细节,甚至指出我未曾考虑的边界情况。
第三步,我细细审阅这份需求文档,修正偏差,补充遗漏。这个过程如同「切磋琢磨」,想法在一来一往中愈发清晰。
第四步,需求确认无误后,Agent 继续推演,生成设计文档和开发计划。系统架构、技术选型、实现步骤,一一呈现。
第五步,我再次审阅设计与计划,确保方向正确。一切妥当后,Agent 便按图索骥,开始实际编码。
这便是我所谓的「规约先行」(Spec-driven)编程 —— 不是直接写代码,而是先把想法、需求、设计统统想清楚、写明白,然后再动手。Agent 在这个过程中,既是协作者,也是执行者。
这光景,像极了当年从汇编语言到高级语言的跃迁。彼时也有人质疑:不直接操作寄存器,怎能写出高效的程序?但历史证明,抽象层次的提升解放了生产力,让更多人得以参与软件开发。所谓「退一步海阔天空」,便是此理。
如今,我们正在经历另一次跃迁:
每一次跃迁都不是替代,而是增强。汇编语言没有消失,高级语言也不会消失,直接写代码的方式也依然有其价值。但多数时候,我们可以站在更高的抽象层次上思考问题,如同登高望远,先谋全局,再图细节。
开发者的新角色:从执行者到指挥家
在 Agent 时代,开发者的角色正在发生微妙而深刻的变化。
我们不再只是代码的「执行者」,而更像是系统的「指挥家」。此中要义有四:
- 清晰地表达意图:知晓自己想要什么,并能准确描述出来,所谓「胸有成竹」
- 理解系统架构:虽不用手写每一行代码,但要洞悉系统如何运作,所谓「提纲挈领」
- 验证和优化:判断 Agent 的输出是否符合预期,指导其改进,所谓「明辨是非」
- 处理边界情况:Agent 可能漏掉些细节,需要人类的经验与直觉,所谓「画龙点睛」
这让我想起了音乐指挥家。他们无需会演奏每一种乐器,但需理解每种乐器的特性,知道如何让它们和谐地协作。同样,未来的开发者无需记住每个 API 的参数,但需理解系统设计的原则,知晓如何编排(orchestrate)各个组件。
软件工程的新形态
这变化对软件工程的影响是全方位的,细细数来,至少有三:
文档即代码的真正实现
从前我们说「文档即代码」,往往只是个美好的愿景。如今,当你用自然语言描述需求时,这描述本身就可生成代码。文档与代码的边界开始模糊,如同水乳交融。所谓「言出法随」,大抵如此。
测试驱动开发的新诠释
TDD 强调先写测试,后写代码。在 Agent 时代,你可先描述期望的行为,让 Agent 同时生成测试与实现。这不是偷懒,而是将注意力集中在「系统应该做什么」而非「如何实现」。正所谓「目标导向」,便是这般道理。
持续集成的加速
当修改与验证的周期从小时缩短到分钟,CI/CD 不再是个独立的环节,而是融入开发过程的每一次呼吸中,如同行云流水,浑然天成。
未来已来的信号
说回开头那个 email 网关项目,我最终用 Claude Code 在两个时辰内完成了原本预计需要一周的活计。这不是个例,而是一个信号。
这信号告诉我们:
- 复杂性不再是障碍:Agent 可以帮我们管理认知负载,如同「举重若轻」
- Serverless 的春天真正到来:有了 Agent,Serverless 的复杂性被很好地封装了,如同「化繁为简」
- 个人开发者的黄金时代:一人配 Agent,可完成从前需要团队才能完成的工作,可谓「一骑当千」
然而,新时代也带来新的挑战:
- 如何保证 Agent 生成代码的安全性?所谓「防患于未然」
- 如何在 Agent 辅助下保持对系统的深度理解?所谓「知其然亦知其所以然」
- 如何培养下一代开发者?所谓「薪火相传」
尾声:拥抱变化,但不忘初心
站在这变革的节点上,我想起了王国维在《人间词话》中所言的三重境界。
「昨夜西风凋碧树,独上高楼,望尽天涯路」—— 我们已经看到了变化的方向,如同登高远眺。
「衣带渐宽终不悔,为伊消得人憔悴」—— 我们正在探索与实践,如同求道之人。
「众里寻他千百度,蓦然回首,那人却在灯火阑珊处」—— 最好的工具,往往就在我们身边,只是我们未曾留意。
Agent 不是来替代我们的,而是来增强我们的。就像当年从汇编到高级语言,从命令行到图形界面,从 CGI 到 Rails,每一次工具的进化,都让开发者从繁琐的细节中解放出来,去思考更本质的问题。Agent 亦是如此,它让我们可以把精力放在「创造什么价值」而非「如何实现细节」上。
这不是让开发者变得不重要,恰恰相反,是让开发者变得更重要。因为当执行层面的工作被 Agent 承担后,我们的价值就体现在判断、决策、创新上 —— 这些恰恰是机器最难替代的。所谓「人机协作」,便是各展所长,相得益彰。
这场静悄悄的革命已经开始。你,准备好了吗?如果你对此心动,想更深刻地参与这场革命,欢迎你加入我的 AI 编程实战营,和我一起探索 AI 编程的无限可能。