打开网易新闻 查看精彩图片

后端监控里跳出一条数据时,我盯着屏幕愣了几秒。一个看似普通的API请求,数据库调用次数栏赫然写着「20+」。代码长得人畜无害,遥测数据却在尖叫。

这就是Vibe Coding(氛围编程)时代的典型陷阱:AI写的代码本地看着对,上线后系统行为完全跑偏。

事情从一个用户资料接口开始。我让AI助手写个简单端点,返回用户基本信息、运动偏好、帖子列表和活动记录。AI秒回一段代码:四个函数调用,结构清晰,职责分明,可读性拉满。

本地跑一遍,完美。单元测试全绿。代码审查时同事点头:「这写得挺干净。」

但上线后的遥测数据暴露了真相。时间戳显示,同一秒内连续出现:

21:15:40 GET /sports
21:15:40 GET /users
21:15:40 GET /event_rsvps
21:15:41 GET /sports
21:15:41 GET /users
21:15:41 GET /event_rsvps

同一批资源被反复请求。代码层面毫无异常,系统却在疯狂加班。

AI的盲区:看不见的系统代价

AI的盲区:看不见的系统代价

问题出在经典的N+1查询陷阱。四个辅助函数各自独立,每个都悄悄 hit 一次数据库。从本地代码正确性看,这是好代码;从系统行为看,这是性能杀手。

更隐蔽的版本长这样:先拉取用户列表,再循环查每个用户的帖子。10个用户变11次查询,100个用户变101次。单次查询都很快,叠加起来就是灾难。

AI编码工具擅长生成「局部正确」的代码。它们不会自动考虑:数据库往返次数、缓存策略、并发场景下的资源竞争。你得到的是语法正确、结构优雅的代码,以及一颗定时炸弹。

我花了好一会儿才定位问题。端点本身不可疑,是遥测数据在说话。这种错位感很熟悉——就像医生看着体检报告正常,但病人就是不舒服。

修复:把活儿塞回数据库

修复:把活儿塞回数据库

N+1问题的解法通常是把更多计算推进数据库层。常见手段包括:JOIN查询、数据加载器(DataLoader)批量处理、或者数据库RPC函数。

这次我用了最后一种。改造前:API层发起多次数据库调用;改造后:API发一次RPC,数据库内部组装完整结果。

round trip(往返次数)从20+降到1,端点行为变得可预测。代码可读性稍降——RPC函数里的SQL黑盒化了一部分逻辑——但系统健康度大幅提升。

打开网易新闻 查看精彩图片

这个bug最讽刺的地方在于:代码审查时没人觉得有问题。它太「合理」了,符合所有 clean code(整洁代码)教条。小函数、单一职责、易测试——教科书级别的实现,却在生产环境埋雷。

遥测不是可选项,是必需品

遥测不是可选项,是必需品

Vibe Coding流行后,这类问题只会更常见。开发者越来越习惯让AI生成代码块,自己负责拼装。拼装后的系统行为,AI不会帮你验证。

原文作者Aquil Abdullah在复盘时提到:「AI coding tools are very good at generating locally correct code. But they don't automatically reason about system behavior.」翻译过来就是:AI能写对代码,但不管代码跑起来对不对。

这倒逼出一个硬性要求——遥测(Telemetry)必须从「锦上添花」变成「基础设施」。不是上线后看看大盘,而是开发流程里就必须有可观测性。

具体怎么做?三个抓手:

第一,本地开发环境接轻量级遥测。不是生产级监控,但至少能看到数据库调用次数、缓存命中率、关键路径耗时。AI生成的代码跑第一遍时,数据就该出来。

第二,代码审查清单加一条:「这段代码的遥测数据呢?」不是问有没有bug,是问有没有数据能证明没bug。没数据支撑的「看起来对」,一律打回。

第三,CI/CD流水线里埋性能基线。同一套测试用例,数据库调用次数环比超10%自动告警。AI改一行代码,可能多触发三次查询,机器比人更适合抓这种漂移。

工具链正在补课

工具链正在补课

好消息是,生态在快速响应。Cursor、Windsurf等AI编码工具开始集成性能提示;数据库ORM(对象关系映射)框架强化懒加载检测;云厂商的Serverless(无服务器)平台默认暴露调用链追踪。

但这些是补丁,不是解法。核心矛盾没变:AI生成代码的粒度是「函数级」,系统优化的粒度是「架构级」。中间断层需要人来填,而人越来越依赖AI。

原文提到的RPC改造,本质上是用数据库的计算能力换网络往返。代价是数据库负载上升、SQL复杂度增加、调试难度提高。没有银弹,只有权衡。

更深层的问题:当AI能写出「看起来对」的代码,开发者的技能树该怎么点?也许答案不是跟AI比代码产量,而是比谁能更快从遥测数据里读出故事。

那个触发20次调用的端点,最终修复只用了两小时。但如果没有遥测,它可能潜伏数月,直到某个大促流量洪峰时才引爆。届时排查成本、用户投诉、团队信任损耗,远超技术债本身。

Vibe Coding不是原罪,盲目信任才是。AI是加速器,不是自动驾驶。方向盘还在人手里,仪表盘必须亮着。

你的AI编码工作流里,遥测数据占多大权重?是事后救火,还是事前防线?