借助 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"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人生败类

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值