同一个需求,我先出技术方案,再让AI出方案——差距让我沉默了

0 阅读12分钟

同一个需求,我先出技术方案,再让AI出方案——差距让我沉默了

上周,我带着一个新人做需求评审。

需求不复杂:给平台做一个用户行为日志系统,记录用户在App里的操作轨迹,支持后续查询和分析。

评审开始前,我让他先独立想10分钟,把技术方案思路说出来。

他想了一会儿,打开Cursor,把需求文档粘进去。

30秒后,Cursor吐出了一份技术方案,密密麻麻,三页纸。

他把屏幕转向我,说:"你看,方案出来了。"

我没说话。

因为我上周刚做了一个实验:同样这个需求,我先花30分钟独立出方案,再让AI出一份,然后对比。

结果让我沉默了。


一、实验背景

我做这个实验,不是为了证明"人比AI强"或者"AI比人强"。

是因为我发现了一个越来越普遍的现象:

身边越来越多的工程师,拿到需求的第一件事,是打开AI工具。

不是坏事,效率确实高了。

但有一天,一个工作了3年的同事问我:"我感觉自己越来越不会独立思考了,脑子像生锈了一样。"

这句话让我停下来想了很久。

如果你从来不独立出方案,只靠AI生成,你的方案设计能力还在吗?

所以我做了这个实验。规则很简单:

  • 同一个需求
  • 我先独立思考,不查资料,不用AI,30分钟内出方案
  • 再把同样的需求喂给AI,让它出方案
  • 最后做完整的对比

需求是:用户行为日志系统(真实项目,已脱敏)。


二、需求说明

核心功能:

  • 记录用户在App内的行为:页面访问、按钮点击、功能使用
  • 支持按用户ID查询历史行为轨迹
  • 支持按行为类型统计(如:某功能今天被使用了多少次)
  • 数据保留180天,过期自动清理

业务背景:

  • 日活用户约5万,高峰期并发约2000
  • 现有系统:Spring Boot + MySQL + Redis
  • 团队规模:5人,没有专职DBA和运维

三、我的方案(30分钟,独立输出)

我把30分钟的思考过程如实记录下来了,包括我考虑过的和没考虑到的。

首先想到的:存哪里?

5万日活,每个用户平均100次行为,一天就是500万条记录。180天就是9亿条。

MySQL肯定撑不住,第一反应是用Elasticsearch。

写入快,查询灵活,支持全文检索,刚好适合日志场景。

接着想:怎么写入?

直接同步写会影响主链路响应速度。用消息队列解耦,异步写入。

已有技术栈里没有消息队列,要引入RabbitMQ或Kafka。

考虑到团队只有5人,运维成本是个问题。

然后想:怎么查询?

按用户ID查轨迹,按行为类型做聚合统计,Elasticsearch都能支持。

索引设计:以user_id和timestamp为主要索引维度。

最后想:数据清理。

180天过期,ES支持ILM(索引生命周期管理),可以自动清理。

30分钟后,我的方案大纲:

技术选型:
- 日志存储:Elasticsearch
- 消息队列:引入RabbitMQ(已有团队有使用经验)
- App端:埋点SDK,批量上报(每30秒或累积50条上报一次)

架构:
App埋点 → HTTP接口接收 → RabbitMQ → Consumer写入ES

接口设计:
- POST /api/log/report(批量上报,App调用)
- GET /api/log/user/{userId}(查询用户轨迹)
- GET /api/log/stats(行为统计,内部使用)

数据清理:
- ES ILM,180天自动滚动删除

我对这个方案还算满意。

然后我把同样的需求喂给了AI。


四、AI的方案(逐条拆解)

我用的Prompt很简单,就是把需求原文粘进去,加了一句:

请给出完整的技术方案,包括技术选型、架构设计、核心接口设计和风险点。

AI的方案出来了。我花了20分钟认真读完,然后开始逐条和自己的方案做对比。

超出我预期的地方

第一,它考虑了"写入失败"的降级策略。

AI的方案里有这么一段:

消息队列消费失败时,建议设计死信队列(DLQ)和人工介入机制。 同时,App端上报失败时,应将日志缓存到本地,下次启动时重试, 避免行为数据丢失。

我的方案完全没想到App端的本地缓存重试。如果上报接口挂了,这批数据就丢了。

这是个真实的数据完整性问题。

第二,它提出了"数据分级存储"。

建议对日志数据做冷热分离:

  • 近30天数据(热数据):ES,快速查询
  • 30-180天数据(冷数据):转储到对象存储(OSS/S3),成本降低80%

ES存储成本较高,全量存180天在5万日活规模下, 存储成本大约在每月XX元,冷热分离可以显著降低。

我的方案是全量放ES,没有想过存储成本问题。

AI还给我算了一笔账,让我意识到这不是可以忽视的小问题。

第三,它指出了我的消息队列选型问题。

RabbitMQ在日志场景下需要注意: 消息堆积时内存压力较大,建议评估是否使用Kafka。 Kafka更适合高吞吐日志场景,且天然支持数据持久化和回放。

但如果团队没有Kafka运维经验,引入成本较高。 折中方案:使用阿里云MNS或腾讯云CMQ等托管消息队列, 减少运维压力。

这个trade-off分析,比我的方案要细致得多。我只考虑了"RabbitMQ团队有经验",没有评估它在这个场景下的局限性。

AI答非所问的地方

第一,它的方案假设团队有能力运维ES集群。

AI给出了一套完整的ES集群部署方案:3个master节点,N个data节点,详细的JVM参数配置。

但我们团队5个人,没有专职运维,根本hold不住自建ES集群。

我们更可能用的是云托管的ES服务(阿里云/腾讯云),部署和运维完全不同。

AI不知道我们的团队规模和运维能力,所以给了一个"教科书级别正确但实际用不了"的方案。

第二,它没有考虑现有系统的改造成本。

AI的方案是从零开始设计的,接口命名、返回格式、异常处理方式,和我们现有系统完全不同。

如果直接用,需要对现有代码做大量改造。

但AI不知道我们的代码规范是什么样的,也不知道改造成本有多高。

第三,它建议引入Flink做实时计算。

如果后续有实时分析需求,可以考虑引入Flink, 实现用户行为的实时漏斗分析、A/B测试等。

现阶段我们的统计需求很简单,就是按行为类型计数。Flink是大炮打蚊子,引入成本远大于收益。

这是AI"大而全"的惯性:总是提供完备的技术栈,而不是适合当前阶段的最小可行方案。


五、差距让我沉默的原因

做完对比,我在椅子上坐了很久。

我沉默,不是因为AI比我强。

也不是因为我比AI强。

我沉默,是因为我发现了一件更重要的事:

AI的方案在广度上远超我。它覆盖了更多的技术细节,考虑了更多的边界情况,给出了更完整的风险列表。

但我的方案在深度上有AI没有的东西:我知道这5个人的团队能干什么、不能干什么,我知道我们的运维能力上限,我知道"引入Flink"意味着什么代价。

换句话说:

AI给出的是一个"完美世界"里的方案。

我给出的是一个"我们公司"里能落地的方案。

这两者之间的差距,不是技术能力的差距,而是业务判断力的差距。

AI不知道我们团队的运维能力,不知道我们的技术债,不知道我们半年内的业务发展方向,不知道我们上周刚因为引入一个新中间件翻了一次车还心有余悸。

这些上下文,只在我脑子里。


六、但有一件事我不能忽视

对比结束后,我做了一件有点羞耻的事:

把AI方案里那3个我没想到的点,逐条想了一遍,复盘自己为什么会漏掉。

App端本地缓存重试:我只想了服务端,没有站在客户端视角想上报失败的情况。典型的后端工程师思维盲区。

数据冷热分离:我习惯性地把"方案设计"和"成本核算"分开来想,方案设计阶段不考虑钱。但在一个小团队里,成本是技术选型的核心约束之一。

RabbitMQ在日志场景的局限:我对RabbitMQ的了解停留在"通用消息队列"层面,没有深入对比过它和Kafka在大量日志写入场景下的差异。这是知识盲区。

这3个漏洞,AI帮我找出来了。

这才是AI做方案设计真正的价值:不是替你出方案,而是帮你找到你的方案里的盲区。


七、正确的使用姿势

做完这个实验,我形成了一套自己的工作流。

第一步:人先出方案(20-30分钟)

不要一上来就问AI。

先独立思考,逼自己形成一个完整的方案轮廓,哪怕不完善。

这一步的目的不是"想出最好的方案",而是激活你的判断力

你在独立思考的过程里,会形成很多隐性的判断:这个技术我们团队能用、那个方案成本太高、这个风险我们可以接受。

这些判断,是你后面评估AI方案的基础。

没有这一步,你拿到AI的方案,只会觉得"好像挺对的",然后照单全收。

第二步:AI补漏洞(不是出方案)

把你的方案思路告诉AI,让它来找问题:

我要做一个用户行为日志系统,我的初步方案是:
[粘贴你的方案]

背景:
- 日活5万,峰值并发2000
- 团队5人,无专职运维
- 现有技术栈:Spring Boot + MySQL + Redis

请帮我:
1. 找出这个方案可能存在的技术风险和漏洞
2. 指出我可能遗漏的边界情况
3. 针对我们团队规模,给出更适合的技术建议

不要问"给我出个方案",要问"帮我找我方案的问题"。

这两个问法,AI给出的东西完全不同。

前者给你一个大而全的通用方案,后者给你针对你的具体情况的精准反馈。

第三步:人做决策(这一步不能外包)

AI给出了它的反馈,接下来的决策是你的,不是AI的。

哪些风险要接受,哪些要规避,哪些建议符合你们的实际情况,哪些是理论上正确但实际上做不到——这些判断,只有你能做。

Prompt模板(可直接用):

我在做[系统名称]的技术方案,背景如下:
- 业务规模:[DAU/并发/数据量]
- 团队规模:[人数/技术栈/运维能力]
- 约束条件:[时间/预算/现有系统]

我的初步方案是:
[你的方案]

请帮我:
1. 找出这个方案的技术风险(按严重程度排序)
2. 指出可能遗漏的边界情况
3. 针对我们的团队规模,哪些建议可以简化或推迟
4. 有哪些我没提到但值得考虑的技术点

八、回到开头那个新人

评审结束后,我把AI生成的方案打印出来,放到他面前。

我问他:"这个方案你能看懂吗?"

他说:"能看懂,挺全面的。"

我指着"Flink实时计算"那一段,问他:"这个你们能落地吗?"

他沉默了。

我又指着"3节点ES集群"的部署方案,问:"这个你们能运维吗?"

他还是沉默。

然后我说:

"这个方案说的技术,大部分是对的。但它不知道你们是5个人,不知道你们上周刚因为引入一个新东西翻车了,不知道你们接下来3个月要赶哪些需求,没有时间做这么重的东西。

AI会写代码,但它不了解你们公司。

你的价值,恰恰在这里。"

他点了点头,第一次认真地开始在纸上写他自己的想法。


写在最后

这个实验让我想明白了一件事:

AI的方案没有错,只是它活在一个没有约束的世界里。

你的工作不是复制AI的方案,而是用你对业务的理解、对团队的了解、对现实约束的判断,把一个"理想方案"变成一个"能落地的方案"。

AI给你广度,你给方案深度。

这才是对的分工。


你平时出技术方案,是先自己想还是先问AI?欢迎评论区聊聊。


后端AI实验室 不讲概念,只谈实战 代码开源,每周更新

扫码_搜索联合传播样式-标准色版.png