多模态大模型质检:提示工程让缺陷判定更可信 如果你让一个从没进过产线的视觉工程师看图判断“这个工件上有没有划痕”他会很快给出答案如果你把同样的图交给一个从没做过质检的多模态大模型它也很可能顺畅地给出结论——但这两个答案的可靠性可能完全不在一个量级。我最近以提示工程架构师的角色扎进一个智能质检项目最深的感受是提示工程真正要解决的不是“让模型能说”而是“让模型判得可信”。在零件外观质检这类制造场景里缺陷判定天然是模糊的划痕多长算“明显”色泽差异多大算“异常”标准文件写得再细落到不同班次、不同光源、不同工件表面判定边界永远是灰的。过去大家习惯堆标注数据让模型用统计办法逼近这条灰线提示工程则换了一条路把老师傅脑子里的判定经验转化成模型能稳定执行的语义约束再用结构化输出和置信度机制兜底。这篇文章想讲的就是从“模糊经验”到“精准判定”之间需要搭起怎样的提示架构以及我在搭建过程中踩过的那些坑。适合看这篇文章的人正在用大模型做质检、审核、缺陷识别的工程人员被传统视觉方案“误报漏报”折磨的工艺工程师以及希望在小样本条件下尽快跑通判定的算法团队。1. 先把“模糊”拆明白质检判定为什么比想象中更难很多人一听到“质检判定”四个字第一反应是“这不就是个分类问题吗”。真正做过产线项目之后你会发现它远比分类问题复杂。难点不在于“能不能识别”而在于“标准本身带着大量主观成分”。1.1 质检员的“手感”与标准文件之间的鸿沟某汽车零部件项目里工艺文件写得很明白“A面不允许有长度超过3毫米的划伤。”可是这句话落到实际图片上问题立刻来了划伤是弯曲的怎么量长度表面有反光怎么看深度有的划伤要凑近才看得清有的老远就扎眼它们都算“目视可见”吗现场的质检老师傅心里有一套从经验里长出来的隐性规则但他很少能把这套规则变成别人能直接照做的语言。你问他“这条为什么判NG”他会说“这个一看就不行”。这种“手感”不是玄学而是大量案例教出来的模式识别能力但它天然依赖个人经验导致不同质检员对同一张图的判定一致性经常只有七成左右。标准文件与实际判定之间的这条裂缝就是提示工程介入的第一现场。你没法用工程图纸语言直接告诉模型“划伤大于3毫米就NG”模型看不懂毫米你得把它翻译成视觉语义比如“在正常目视距离下可辨认的线性痕迹长度大致超过标签纸的宽度”。这层翻译工作就是提示工程架构师最核心的活。1.2 数据困境样本少、坏样本更少、标注还互相打架传统深度学习做质检遇到的第二个坎是数据。产线良率一般在95%以上这意味着缺陷样本天然稀缺。更麻烦的是缺陷和缺陷之间差异巨大划伤、压伤、脏污、气泡、流挂每一种都算缺陷但形态完全不同。想让模型在真实产线上稳定识别需要收集大量“边界样本”——那种看起来模棱两可、老师傅都要犹豫半天的图而这恰恰是最难积累的。标注一致性也是大问题。同一张图上A质检员判OKB质检员判NGC质检员说需要复核。把这样的标签喂给分类网络模型学到的不是“缺陷是什么样”而是“标注噪声长什么样”。数据层面投入高、回报低是很多质检AI项目做不下去的真正原因。提示工程提供了另一条路预训练多模态大模型在训练阶段已经见过海量真实世界图像具备通用的视觉理解能力。它不一定需要你给它几千张缺陷样本但需要你把“判定规则”讲清楚它就能在零样本或少样本条件下完成判定。规则以文本形式存在换标准时改一段提示词就好不必重新训练。这就是它和传统方案在底层逻辑上的根本区别。2. 提示工程在质检里的正确打开方式不是写提示词是搭判定系统很多人以为提示工程就是“写一段话然后调用模型”这个理解放在聊天场景里没问题放在质检产线上会死得很难看。产线要的是稳定、可解释、可回滚而不是某一次“灵光一闪”判得准。2.1 先选型多模态大模型在质检链条中的位置先看一张对比表理解为什么这时候要引入多模态大模型。方案类型依赖条件擅长场景主要短板传统机器视觉稳定的打光、固定工位、硬规则阈值尺寸测量、有无检测、规则清晰的缺陷语义模糊场景误报率极高规则调参耗时深度学习CV网络大量标注样本且样本覆盖边界场景数据充足的单类缺陷识别小样本下过拟合标注噪声直接影响上限多模态大模型提示词设计、上下文示例、结构化输出约束标准多变、缺陷形态多样、样本稀缺存在幻觉置信度不可靠成本和延迟偏高这里的关键不是“谁取代谁”而是“谁处理哪一段”。高速线体上尺寸偏差、装配缺失这类确定性检测传统视觉几十毫秒出结果大模型根本没必要参与。真正需要提示工程接管的是传统视觉反复误报漏报、又没有足够数据训练专用模型的“语义模糊判定区”。把问题限定到这个区域里大模型的优势才能发挥出来。2.2 架构师视角提示系统要包含哪些模块我参与项目时第一件事就是定义“提示系统”的概念它不是一句提示词而是一条从图像进入到判定结果输出的完整链路。这条链路由六个模块组成。第一是图像预处理模块。拍回来的图不能直接扔给模型要裁剪ROI区域、统一尺寸、调整光照方向、屏蔽与工件无关的背景。第二是标准解析模块把工艺文件里的判定条款翻译成提示词里的语义约束。第三是示例管理模块维护正例、反例和边界案例的样本池并负责版本管理。第四是推理模块负责调用视觉语言模型、设置温度参数、控制输出结构。第五是裁决模块解析结果、看置信度、跑多轮投票、决定直接放行还是转人工。第六是回流模块把线上争议样本和人工复核结论存下来变成下一轮提示词的弹药。这套架构用一句生活化的话说相当于给新员工做上岗培训提示词是培训手册包含判定标准条款few-shot示例是带教师傅留下的实际案例输出格式是考核答题卡置信度裁决是班组长复核。缺了任何一个环节“培训”效果都会大打折扣。3. 实操详解一套多模态质检提示体系从零搭建理论说完了进入具体搭建环节。我以一个虚构的“某电子结构件外观检测”场景为例演示从提示词骨架到参数设置的完整过程。这个场景的工件是铝合金边框需要检测划伤、压伤、脏污三类缺陷。3.1 建立一个可复用的提示词骨架我最终确定的提示词模板长这样功能区分得很清楚你是一名经验丰富的外观质检工程师负责对外观图像进行缺陷判定。 本次任务只针对输入图片中工件表面的缺陷情况忽略其他无关信息。 【工件与工况信息】 - 工件型号M12-03 铝合金边框 - 检测面C面非外观面 - 光源45度环形光 - 放大倍率原图 【判定标准】 请只依据以下标准判断不要自行添加经验条款 1. 划伤长度小于2mm或宽度小于0.1mm的细线忽略 长度超过5mm且肉眼可见深度判为NG。 2. 压伤/磕碰任何可见凹陷或形变判为NG。 3. 脏污/残留可被无尘布擦除的白色残留判为OK 黑点直径大于0.5mm判为NG。 4. 标准中未提及的异常一律输出REVIEW不要自行判定。 【检查步骤】 1. 先整体观察工件表面忽略标签、水印、条码、反光斑。 2. 逐个对照上述四条标准记录你观察到的证据。 3. 只有证据满足NG条件时才输出NG证据不足时输出REVIEW。 【输出要求】 只输出JSON格式不要输出任何解释性文字 { verdict: OK | NG | REVIEW, confidence: 0.0~1.0, defect_type: scratches|dent|stain|null, evidence: 一句话描述你观察到的依据必须与判定结论一致, steps: [逐条描述你如何对照标准检查] }这个骨架里每一段都有它的用途。角色定义“资深外观质检工程师”不是装饰它能让模型的输出语气和评判尺度更贴近质检场景“只依据以下标准不要自行添加条款”是防止模型用自己训练数据里的经验乱判“REVIEW”中间态是关键设计让模型在知识不足时不硬猜JSON结构化输出则是为了方便下游程序直接解析。3.2 判定标准的“翻译”方法从条款到可检索语义标准翻译是整个提示工程里最容易做砸的一步。原标准写“表面不允许目视可见划伤”直接抄进提示词模型根本不知道“目视可见”到底是多重。我自己的翻译习惯是把条款拆成三个维度位置、严重程度、排除项。位置维度要说明缺陷发生在哪个区域比如A面、B面、C面不同区域判定标准不同严重程度维度要把抽象的“明显”“轻微”转化为可观察的视觉线索比如“连续长度超过5mm”“在斜光下出现连续阴影过渡”“颜色对比肉眼可辨”这类描述排除项维度要明确什么情况不算缺陷比如“可擦除的白色残留”“不影响装配的微小凹坑”。判断翻译是否成功的标准很简单把这个翻译后的条款交给一个从没做过质检的人让他对照看十张图如果他能独立给出与老师傅基本一致的判断说明翻译到位了如果他出现大量“这个很难说”的反馈说明条款里还有没敲实的模糊词。生活化地讲教一个实习生时你不会只告诉他“凭感觉看”而是说“用食指指甲轻轻划过能感觉到台阶才算不良”。提示词要做的就是这个级别的具象化。3.3 Few-shot示例让模型看到边界实例只给规则不给示例模型在边界场景下容易飘。我测试下来效果比较稳的示例数量在5到7个之间太少权重不够太多模型开始“死记硬背”。示例分布一般是2到3个正例、2到3个反例、1到2个边界案例。选示例有四个硬性要求。第一示例图片的光照角度必须与线上真实图像一致否则模型会把光影当成缺陷特征。第二每个示例的evidence字段都要按规则逐条写清楚不能只写结论因为示例不仅是给模型看结果更是给它演示“推理路径”。第三边界案例必须包含那种老师傅都要停一下的图这类示例对模型判定边界的塑造作用比普通缺陷图大得多。第四示例里不要出现与缺陷无关的高亮文字或干扰信息否则模型会把注意力分给无关区域。我还遇到过一种情况示例做成后过了一个月线上换了新产品型号模型开始把新的正常纹理判成缺陷。原因就是示例库太久没更新模型在面对分布漂移时更倾向于匹配旧示例。所以示例池不是建一次就完事而是要随着产品变更、标准变更做定期清洗和替换。3.4 参数与环境设置控制模型的“胆子”提示词只是其中一半另一半是推理参数。质检场景我通常把temperature压在0.1到0.2之间top_p压在0.8到0.9之间目的很明确让模型尽量减少随机性优先输出最保守、最主流的判断。seed能固定就固定至少在同一个版本里保持可复现否则调参时你分不清是代码改动还是随机波动造成了效果差异。图像输入层面有三个经验。第一不要贪大图不是分辨率越高越好模型在1700p大图上反而容易迷失我一般把工件区域裁剪到1024x1024以内缺陷细节靠局部放大而不是整体缩放。第二一定要做ROI裁剪把工件的检测区域从背景里切出来减少无关信息干扰。第三如果一条产线上有多工位每个工位要根据自己的光照和姿态单独微调提示词直接复用会带来不必要的误报。最后说两句接口调用层面的细节。能用强制JSON输出就用强制JSON解析失败时不要盲目重试更不要直接把“无法解析”当成OK放过正确的做法是落到REVIEW并记录日志等人工处理。调用超时问题也要预留重试策略首次超时后重试一次第二次再超时就判REVIEW宁可慢一点、拒判多一点也不要静默漏掉缺陷。4. 进阶机制置信度校准、自洽投票与闭环迭代提示词能让模型“判得对”但产线要求的不仅是“判得对”还有“知道自己什么时候对”。一个只输出OK和NG的判定系统在模型犯错的瞬间没有任何缓冲这是不可接受的。4.1 引入REVIEW中间态与阈值矩阵我一开始在设计提示词时只有OK和NG两个结果上线一试就发现问题。模型对某些模糊图片给出NG后人工复核时发现是光斑模型对另一批OK图片给出了高置信度结果第二天换光源方向后开始批量漏检。模型的自报置信度并不是真实概率它在训练过程中为了对齐用户预期天然偏向高置信度表达。解决办法是引入“REVIEW”这个中间态并且先在验证集上做校准。具体做法是拿几百张已经有人工标签的线上真实图片跑一遍模型记录每种判定结果对应的实际准确率然后画出置信度区间直方图再结合业务对漏检和误检的容忍度定阈值。我一套常用的阈值逻辑可以给你参考模型输出置信度区间裁决动作OKconfidence ≥ 0.8直接放行OKconfidence 0.8转REVIEW人工复核NGconfidence ≥ 0.85直接拦截NGconfidence 0.85转REVIEW人工复核REVIEW任意转人工复核注意NG的阈值比OK的阈值要高因为漏检比误检严重得多。这个阈值不是拍脑袋定的而是根据验证集上NG判定在0.85置信度以上时准确率能稳定在95%以上的实测结果来确定的。4.2 多轮采样与自洽投票不信单个答案即使有阈值兜底单次推理仍然可能输出幻觉。视觉语言模型在特定光照下可能把纹理当划痕、把灰尘当压伤而且给出非常高的置信度。面对这种情况我引入了多轮采样投票机制同一张图独立调用3到5次temperature适度调到0.3到0.5让每次推理有一定多样性然后统计verdict分布并计算最高置信度。判断逻辑可以写成这样def final_decision(results): verdicts [r[verdict] for r in results] mode_verdict max(set(verdicts), keyverdicts.count) mode_count verdicts.count(mode_verdict) max_conf max(results, keylambda r: r[confidence])[confidence] if mode_count / len(verdicts) 1.0 and max_conf 0.85: return mode_verdict if mode_count / len(verdicts) 0.6 and max_conf 0.8: return mode_verdict return REVIEW如果模型连续多次都给出同一个结果说明它在这张图上是自洽的可信度显著提高如果五次结果里OK和NG各占一半说明模型也没看清楚这时候快刀斩乱麻直接上人工。当然多轮调用是有成本的我实际用下来采取的是两级策略先跑一次如果置信度很高且结果是OK或NG就直接返回如果第一次结果的置信度偏低或verdict是REVIEW再补两到四轮投票。这样平均每张图只增加一到两次调用成本却能把误判率明显往下压。4.3 把争议样本变成下一轮提示词的弹药闭环迭代提示词不是一次性写完就结束的。我每周都会做一次回流分析把线上触发REVIEW的样本、人工复核后改判的样本、以及模型自信但判错的样本全部捞出来按三个类别处理。第一类是“模型理解不足”表现为模型给出的evidence明显没有命中提示词里的判定条款这时候不需要改示例而是回看那条判定标准的表述是否还不够具体。第二类是“示例覆盖不足”表现为模型在一个特定场景反复出错这通常意味着示例池里缺少这个场景下的正反例。第三类是“标准本身模糊”表现为人工复核时老师傅之间也意见不一致这时候要做的不是调提示词而是推动工艺部门重新定义条款。所有提示词模板我都建议用版本管理。每个提示词版本对应一个标准文件版本评估集固定不变改动时先在离线评估集上跑一遍指标不掉点才准上线。印象很深的一次教训是某次修改后离线指标涨了上线却开始大量误报最后发现是旧版本示例库没有同步替换新旧标准混在一起反而把模型搞糊涂了。从那以后凡是标准变更示例库必须同步重标绝不允许偷懒只改文本。5. 排坑实录我在质检提示工程项目中踩过的五个坑这部分是纯经验分享。以下五个坑都是我在真实项目里踩过、并且花了不少时间才填平的希望能帮你少走点弯路。5.1 坑一模型被背景文字带偏理由写得漂漂亮亮但结论全错第一个坑出现得很早。线上测试时模型把工件旁边的标签纸识别成“印字不良”eveidence里还一本正经地写道发现在标签区域存在油墨异常建议判定NG。问题就是我当时在提示词里只写了“检测工件表面”没有告诉模型“哪些区域不要管”。排查时我打开原图才发现标签纸不仅显眼而且上面有清晰印刷文字颜色与基准色接近模型很容易把那些文字当成缺陷特征。解决方式分两步一是在提示词里显式补充“忽略标签、水印、条码、环境背景中的任何元素”二是在图像预处理阶段直接用ROI把标签区域裁掉从源头物理隔离。经过这次我在所有提示词模板里都固定加上一句“如果异常来自边界区域或非工件区域请忽略并在evidence中说明原因”这句话救了很多次命。5.2 坑二置信度虚高模型自信满满地给出错误判断有段时间我特别信任模型的confidence字段直到一次验证集统计让我后背发凉。有一批图片模型输出NG且confidence高达0.97按我的阈值规则妥妥直接拦截但人工复核后发现全是正常工件只是斜光把它们表面的细反光拍成了类似划痕的纹理。问题的根源在于多模态大模型的置信度严格来说不是统计学意义上的概率它受训练时的对齐策略影响很大。模型倾向于越表达越自信尤其是在提示词里用了“你很严格请谨慎判断”这类措辞时表面上它承认自己谨慎实际输出反而更激进。排查之后我把提示词里所有带有情感倾向的修饰词都去掉了改成中性表述同时把多轮投票机制加上不再信任单次confidence的绝对值。经过这几个动作误报率下来一大截。5.3 坑三Few-shot示例越多效果越差模型开始死记硬背项目早期我陷入一个误区觉得示例自然是越多越好于是一次性加了十几个示例把划伤的各类形态全塞进去。结果测试集上一跑准确率不升反降很多明显的真实缺陷被判成OK。后来分析才发现模型在示例过多的情况下会放弃按提示词里的标准条款推理转而去猜“当前图片最像示例库里的哪一张”这是典型的模式匹配行为。示例数量一多每个示例的信息被稀释模型反而更依赖整体相似性而不是局部规则。解决方法是把示例压缩到5到7个保证每个示例都有清晰的evidence注释另外把验证集分成两份每次新增示例都在旧验证集上回测准确率不掉才保留。我后来一直要求自己示例数量宁可少一点、精一点也不要让它盖过判定标准本身。5.4 坑四工艺标准一改线上判定立刻失灵某次客户突然更新标准不允许某特定色差出现。我们当晚改了提示词第二天上线测试却发现问题更大模型不仅没有按新标准判NG反而把原本正常的工件判成NG整个产线误报率暴涨三倍。复盘下来原因有三个。第一新版标准的表述只加在提示词文本里但旧版标准的示例还在示例库中模型把新旧标准混在一起理解出现了严重冲突。第二这次标准变更影响了“颜色偏差”这个语义而模型对颜色的判断高度依赖示例图的色彩分布旧例没有同步更新。第三我们没有做灰度发布直接在主力线体上全量切换问题暴露面被放大。从此以后标准变更必须走流程更新标准条款同步重标所有相关示例在离线评估集上确认指标选定一条产线先试运行连续观察至少两天确认无误再全量放行。宁可多花三天切换也不要花三周填线上误报的坑。5.5 坑五成本与延迟失控肉眼可见的账单焦虑还有一种坑跟效果无关但同样能搞死项目钱和时间的账单扛不住。一开始我用最重的多模态模型对所有图片做全量推理单张图成本高不说产线节拍又等不及高峰时段直接排队。这让我意识到提示工程落地不只是把准确率做上去还要算清楚每张图的平均成本和P95延迟。我的解法是两级级联架构。先用轻量模型对所有图片做快速初筛只有初筛结果置信度低于阈值、或者给出疑似缺陷提示的图片才进一步发给重型模型做精细判定。打个比方产线上人人都过安检但只有警报响起来的那几个才需要打开行李细查。这样综合下来重型模型的调用量降到原来的百分之二十以下单图成本下降了七成多误判率并没有明显恶化。另外一个节省成本的办法是图像压缩把不承载缺陷细节的背景区域大幅压缩只保留ROI全分辨率视觉挂在网上其实挺省。跑完整个项目我给自己留了一份自查清单每次调提示词前都会对着过一遍判定标准是否翻译到了视觉语义层面示例库里是否存在与新标准冲突的旧样本置信度阈值有没有基于验证集重新校准单图平均成本是否在业务预算内每次规则变更有没有走灰度流程这套系统上线后真正让我放心的不是模型单次的准确率有多高而是它在哪个场景判得准、在哪个场景会拒判、拒判后有没有人工兜底这些问题全部有了明确答案。如果你也在做类似的事我最后的建议只有一条不要试图让模型替人做决定而是让它把“模糊地带”清晰地暴露出来然后由你和老师傅一起把模糊地带逐步填实。提示工程越往后做越像在搭一层层确定性极强的护栏这比单纯追求“判得对”重要得多。