同一个需求,我先出技术方案,再让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实验室 不讲概念,只谈实战 代码开源,每周更新

相关推荐
pshdhx_albert2 小时前
AI agent实现打字机效果
java·http·ai编程
沉鱼.443 小时前
第十二届题目
java·前端·算法
建行一世3 小时前
【Windows笔记本大模型“傻瓜式”教程】使用LLaMA-Factory工具来完成对Windows笔记本大模型Qwen2.5-3B-Instruct微调
windows·ai·语言模型·llama
轩轩分享AI3 小时前
DeepSeek、Kimi、笔灵谁最好用?5款网文作者亲测的AI写作神器横评
人工智能·ai·ai写作·小说写作·小说·小说干货
赫瑞3 小时前
数据结构中的排列组合 —— Java实现
java·开发语言·数据结构
哥布林学者4 小时前
深度学习进阶(五)Vision Transformer
机器学习·ai
叹一曲当时只道是寻常4 小时前
Xcode 接入智谱 GLM Coding Plan 报错解决方案
ai·xcode
周末也要写八哥5 小时前
多进程和多线程的特点和区别
java·开发语言·jvm
惜茶5 小时前
vue+SpringBoot(前后端交互)
java·vue.js·spring boot
杰克尼6 小时前
springCloud_day07(MQ高级)
java·spring·spring cloud