借助 AI 从 0 到 1 搭建图像对比服务(二):需求拆解——让 AI 把我的“大概想做这么个东西“变成“具体怎么干“
一、场景一句话需求怎么往下走上一篇我说了这个项目的需求朴素到一句话给两张图告诉我它们有多像。但真到要动手写的时候这句话就露馅了——它根本没法直接落地。有多像是像到什么程度两张图是图文件还是网址除了像不像还要不要别的谁来调用、怎么调用、返回什么换以前我得自己坐在那儿一拍脑袋硬想想错一步后面全得返工。这次我没硬想我决定先让 AI 帮我把这摊模糊的玩意儿捋成一份能看、能挑、能改的方案。这一篇讲的就是这个过程怎么用大白话喂需求怎么接住 AI 吐回来的东西以及——更重要的是——我在它吐回来的方案里改了哪几个关键的地方。二、给 AI 的指令我是怎么把需求喂出去的我第一句话没急着让它写代码而是把我大概想做这么个东西尽量讲清楚。大概是这样说的我要做一个图像对比服务。核心功能输入两张图返回它们有多像。 背景是工业巡检、图片溯源所以要判断的不只是像素像不像。 我还想知道 - 这两张是不是在同一个地方拍的 - 里面拍的是不是同一个东西 - 有没有可能是翻拍的假图 对外要提供一个 HTTP 接口给别的程序调用。 先别写代码。先给我一份方案 1. 你建议用哪几种技术分别解决哪个问题 2. 接口大概长什么样参数、返回 3. 整体的模块怎么分 我要先看你的思路确认了再动手。注意我这条指令干了三件事把背景讲清楚、把要它干的事讲清楚、把先别写代码这条规矩砸给它。这就是上一篇说的约束前置和先计划后执行。一条指令里两个规矩就用上了。三、AI 的产出它吐回来一份四只眼睛 一个裁判AI 回得挺快大意是这个事不能只靠一个招得分几路看最后再合一合。它给我的方案长这样我翻译成大白话四个角度看图让机器像人一样理解图里是什么它建议用 CLIP 这种东西让机器看图说话念字、认物体、说场景它建议用多模态大模型看照片自带的出生证GPS、相机、时间EXIF查翻拍看是不是对着屏幕拍的假货一个裁判打总分把上面四个结果按各自分量加一加合成一个总分。一个对外接口别的程序传两张图进来拿走这个总分和明细。我一看——嚯这不就是上一篇那张四只眼睛的表吗对骨架就是在这一步定下来的。AI 把我脑子里那团浆糊整理成了一张能看的图。但请注意我没照单全收。接下来才是重头戏。四、我的校验与纠偏方案我改了三个地方AI 给的方案大体能用但有几个地方我读完觉得不对劲硬改了。这几个改动后来证明救了大命。改动一为什么没有开/关 EXIF这个开关AI 给我的接口里本来设计了四个开关开不开 CLIP、开不开 EXIF、开不开翻拍、开不开大模型。每个都让调用方自己选。我盯着开不开 EXIF这个开关看了半天觉得不对。EXIF 这玩意儿是个加分项——照片带了档案就加几分没带档案就算了不罚。它不是个独立功能是个有的话更好的点缀。要是单独做成开关调用方还得操心我要不要开 EXIF纯属添乱。所以我把它删了。EXIF 永远在跑有就加分没有就不加调用方根本不用知道它存在。最后接口只留了三个开关enable_clip开 CLIP默认开、enable_anti_recapture开翻拍检测默认开、enable_vlm开大模型默认关。你看默认值也藏着心思——大模型慢、吃资源默认关着真要用的人再手动开。改动二大模型的活儿固定就干这三样AI 本来给我留了个参数让调用方自己选大模型干啥——只认字、只认物体、还是全干。我又觉得不对劲。这服务的调用方哪知道认字和认物体是啥他们要的只是帮我把图看明白。所以我把它砍了大模型一上来就三样全干认字、认物体、说场景。调用方不用选简单。改动三返回结构拍扁最多三层这是我最得意的一处改动。AI 给我的返回结构嵌套得跟俄罗斯套娃似的——一个图的信息套在一个对象里里面又套错误、又套分数、又套明细。我数了数最深的套了五六层。我干过后端知道这种套娃返回值有多坑前端取个值得写一长串a.b.c.d.e中间哪层断了就炸。所以我跟 AI 说拍扁最多三层别套了。还有个连带改动AI 原本在最外层放了个error对象专门报错。我又觉得不对——图是两张分开处理的一张出错另一张可能没事把错误统一放外层调用方分不清是谁的错。所以我让它把错误合并到每张图自己的error字段里没出错就空着。外层那个 error 对象删了。最后接口长这样如果你想看具体代码可以点这里app.py 里的接口定义Plain Text请求 batch_a / batch_b 两组图 enable_clip 开不开 CLIP 默认 开 enable_anti_recapture 开不开翻拍检测 默认 开 enable_vlm 开不开大模型 默认 关 返回最多三层 total_score 总分 每张图各自的明细 含它自己的 error 字段空 没事五、踩的坑不拍扁后面全是雷这一步其实没踩什么惊天大坑但有个事我必须得说。我之所以坚持把返回结构拍扁是因为我干过后端被这种套娃返回值坑怕了。AI 不会主动这么想——它给方案的时候脑子里没有调用方用着方不方便这根弦它只想着结构上怎么表达完整。完整归完整难用是真难用。这件事让我意识到一件事AI 会把方案做对但不会把方案做好用。好不好用得靠人来把关。这就是为什么我说会判断对错比会写重要——我得能看出 AI 这个方案对是对但用起来会疼才敢去改它。这一步如果偷懒照单全收后面写到前端对接的时候光处理那堆套娃就够我喝一壶的。六、小结AI 在这一步的能力边界到这一篇结束我对 AI 在需求拆解这个环节的能力心里有数了它特别会把模糊变结构我给它一句话它能还我一张能看的架构图。这是它最值钱的能力之一。它不替你想好不好用方案对不对它管方不方便用得你来管。像开关设计、返回结构这种跟用户体验挂钩的东西AI 默认是想不到的。你得在它给完方案的第一时间就纠偏别等代码都写完了再发现咦怎么这么套娃。越早改越省事。说白了这一步 AI 是个特别能干的架构助理但它需要一个懂行的产品经理在旁边拍板。而那个产品经理就是我。七、下篇预告方案定下来了下一步就是真刀真枪写代码。下一篇我们进入第一个真正的技术模块怎么让机器像人一样看懂一张图——CLIP 特征提取。那是我从没从零接过的东西也是我第一次真刀真枪地反向审 AI。