一、场景:一句话需求,怎么往下走
上一篇我说了,这个项目的需求朴素到一句话:
给两张图,告诉我它们有多像。
但真到要动手写的时候,这句话就露馅了——它根本没法直接落地。"有多像"是像到什么程度?"两张图"是图文件还是网址?除了像不像还要不要别的?谁来调用、怎么调用、返回什么?
换以前,我得自己坐在那儿一拍脑袋硬想,想错一步后面全得返工。这次我没硬想,我决定先让 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"。
:需求拆解——让 AI 把我的“大概想做这么个东西“变成“具体怎么干“&spm=1001.2101.3001.5002&articleId=164048929&d=1&t=3&u=b5301c51019844cd9ee498d94e6f9b15)
307

被折叠的 条评论
为什么被折叠?



