夜雨聆风学习资料网

ARTICLE · 989545

AI 写的代码能跑,但不是我要的:三个月后我这样提需求

AI 写的代码能跑,但不是我要的:三个月后我这样提需求

AI 写的代码能跑,但不是我要的:三个月后我这样提需求

上一篇结尾我说要写这个,今天写。

先说清楚这三个月我最贵的一课:AI 给我的东西能跑起来,和它是我要的东西,是两件不相干的事。

这话听着像废话。但我真正明白它的代价,是在一个已经上线的功能上。

能跑,但三个月后会咬你一口

我做完登录之后,学员可以注册、登录、看课程、记进度,全都正常。我自己测了一圈,也找人帮我点过,没问题。

后来我准备接支付,顺手问了 AI 一个问题:如果一个学员退款了,我怎么把他踢下线。

它的回答让我坐直了。

当时的登录方案是这样:登录成功后服务端签发一张凭证给浏览器,浏览器每次请求带上它,服务端验一下签名,签名对就认。这个方案很干净,服务端不用存任何东西。

问题就在"不用存任何东西"。

服务端没有这个人的登录记录,就没有办法把它作废。凭证有效期我设了 14 天,也就是说:学员申请退款,我在后台把他账号停掉,他浏览器里那张凭证在 14 天内照样能进课程。封号踢不掉人,改密码也踢不掉,凭证被别人拿到了更没救。

功能是好的,测试是过的。这个洞要等到我有付费学员、有人真的退款那天才会现形。

我后来把它整个改了:服务端建一张会话表,凭证换成一串随机数,库里只存它的哈希值。这样谁登录了、什么时候登录的、用的什么设备,我都有记录,可以单条作废,也可以一键把某个人的所有设备全踢下线。

改完我做了个验证:登录进去,然后直接从数据库里把那行记录删掉,回浏览器刷新,立刻退出。旧方案做不到这件事。

AI 没有骗我,是我没问对问题。 我最初的需求是"做一个登录功能",它给了我一个能登录的功能,完成得挺好。我没告诉它这里会有付费、会有退款、会有封号,它不知道,也猜不到。

这件事之后我改了提需求的方式,具体写法我放在后面。

它给我一个精确的分数,但它压根没读懂

第二个坑更小,但我觉得更值得讲,因为它教会我一个判断习惯。

我装了一个文本分析工具,想让它帮我检查中文内容的表达质量。装的过程本身就折腾:按资料上的名字去装,找不到;换一个相近的名字,安全检查没通过;第三个才装上。

装好之后我丢了一段一千八百多字的中文进去。

它给了我一份报告:识别出 96 个词,综合评分 0 分,句式变化度 0。

如果我当时直接信了这个 0 分,我会得出一个完全错的结论。

我盯着"96 个词"看了一会儿,觉得不对。一千八百字的中文,怎么可能只有 96 个词。

然后我想起来它是个英文工具。英文按空格切词,中文句子里没有空格,所以它把我整段话当成了少数几个超长的"词"。那个 0 分不是"没问题",是它根本没读懂我给它的东西。

这个坑难受的地方在于它的输出格式非常专业。有指标、有数字、有小数点,你很容易忘记问一句:它凭什么算出这个数。

我现在的习惯是,AI 或者工具给我一个结论,我先看它的中间量对不对,再看结论。中间量荒谬,结论就不用看了。上面那个例子里,"96 个词"就是中间量,它比那个 0 分诚实得多。

聊得越久,它越容易给我一个过期的答案

第三个坑是我最近才意识到的,也是最影响成本的一个。

有一次我让 AI 帮我检查一段代码的安全问题,它很认真地报告了一个隐患,说某个配置项如果设短了会静默退回开发模式。

听起来很专业。但那段代码我在两个小时前就已经整个删掉了。

我全局搜了一遍那个配置项的名字,零个结果。它在跟我讨论一段不存在的代码。

原因不复杂:我们聊了很久,它记着的是几个小时前的版本,而那个版本已经被我改掉了。它没有说谎,它只是在用过期的事实推理。

同一天我还遇到过一次,我让它去做一件事,它回报"已完成"。我去看,文件根本没生成,我查了两遍才确认。

这两件事合起来给我一个结论:AI 说的"现在的情况"不可信,只有你自己看到的才算。它报告完成,你去列一下目录;它说某段代码有问题,你去搜一下这段代码还在不在。这个动作花十秒,能省你半小时。

顺着这个坑,正好说下一件事。

提示词怎么写:既省钱,又能拿到你要的

先讲清楚为什么会烧钱,不然后面的建议没有道理。

跟 AI 对话不是打电话。你每发一句话,它并不是只读这一句,整段对话历史会被重新发一遍给它。所以第 30 轮的一句"嗯改一下",实际消耗远远大于第 1 轮的同一句话。聊得越久,每一句越贵。

明白这一点,下面六条就都好理解了。

一、先要方案,再要代码。

我现在几乎不会一上来就说"帮我写"。我先说:先别写代码,告诉我你打算怎么做,分几步,会改哪些文件。

看它的方案很便宜,几百个字。代码很贵,动辄几千行上下文。方向错了,代码全废,你还得再花一轮让它改回来。

这条我是从项管习惯直接搬过来的,等于让它先交一份实施方案再动工。命中率提升非常明显。

二、给路径,不要贴一大段代码。

早期我习惯把整个文件复制进去。现在我说:你去看 src/lib/db.ts 里的 createSession 这个函数。

它自己会去读,而且只读它需要的那部分。我贴进去的每一行都要计费,它自己去读则精准得多。

三、把"不要动什么"写清楚。

这条最容易被忽略,收益却很大。

我早期只说想要什么,结果它经常顺手把周边的代码一起"优化"了。有几次我得回退它的改动,比自己写还费时间。

现在我会加一句:只改这个函数,其他文件不要动,样式不要调。

划清边界比描述目标更能减少返工,而返工是最贵的。

四、带上业务场景,别只说功能。

这条就是前面那个登录教训的解法。对比一下:

  • 我以前会说:帮我做一个登录功能。
  • 我现在会说:帮我做登录。这是个付费课程网站,会有退款和封号,所以我必须能在后台把某个人的登录状态立刻作废,包括他所有设备。

后面这句多了三十个字,省掉了我后来整整一次返工。

这一段是我认为做项目管理的人最占优势的地方。 退款怎么办、封号怎么办、两个人共用账号怎么办、并发了怎么办,这些问题我们过去天天问开发,问得很熟。现在问的对象换成 AI 而已。你不需要会写实现,但你知道该问什么,而这正是 AI 猜不出来的部分。

五、任务换了,就换个新会话。

一个话题聊完了,接着在同一个对话里问下一件事,是双重浪费:既要为几万字用不上的历史付费,又要承担它拿旧事实推理的风险。

我现在做完一个功能就重开一个对话,把必要的背景两三句话重新讲一遍。这两三句的成本,远低于拖着一大段历史走。

六、有一个地方别省:报错原文。

前面五条都在减字,这条相反。

报错信息不要转述,不要只说"它报了个错",把那一整段原文贴过去,包括你觉得没用的路径和行号。那些看起来啰嗦的部分往往正是定位的关键。

这是我唯一愿意多花的地方,性价比最高。

一个可以直接套用的写法

把上面几条合起来,我现在的提问大致长这样:

背景:Next.js 项目,付费课程网站。 目标:注册接口要防刷。 约束:只改 src/app/api/auth/register 这一个路由,别动数据库结构,别改前端样式。 业务前提:以后会投广告,会有人批量注册领免费课。 先别写代码,告诉我你准备怎么做、改哪几个文件,我确认后你再动手。

五行字,写它花不到一分钟。我拿它换掉的是过去那种问一句改一版、来回七八轮的过程。

最后

这三个月我最大的变化,跟语法没什么关系。

是我终于意识到:AI 会听我的话,问题在于我给的信息不够它做判断。 它填空的能力极强,你留的空越多,它填得越自信,也越容易偏离你要的东西。

而"把需求说清楚、把边界划明白、把异常场景提前问出来"这件事,我们做项目管理的人已经练了很多年。

我一开始以为自己的短板是不会写代码。现在我觉得,不会写代码是 AI 能补的那一半,知道该要什么,是它补不了的那一半。


下一篇我想写钱的事:从零做这个网站到现在,我实际花了多少,哪些是必须花的,哪些是我花错的。有人问过我,我算一笔明账。

如果你有正在用的提示词写法,欢迎评论区交换。我这套还很粗糙,还在改。

相关学习资料

返回首页浏览学习资料