1. 为什么质检判定会成为智能制造里最头疼的环节
做了几年智能制造相关的AI落地项目,我越来越确定一件事:质检环节的"判定"问题,远比"识别"问题更值得花时间去解决。你看产线上一套视觉检测系统,识别缺陷、定位缺陷位置,这些环节在深度学习成熟之后其实已经相对稳定了,真正让项目卡壳、让产线工程师头疼的,往往是最后那一步——系统看出来了,但它到底该不该判不合格?这个缺陷算轻微还是严重?要不要返工?这些"判定"问题如果处理不好,前面再准的识别模型也白搭。
制造业里质检判定的复杂程度,真的只有干过的人才知道。同样是表面划痕,出现在功能面上和出现在非功能面上,结论完全不同;同样是色差,A客户能接受的范围和B客户能接受的范围可能差出好几个等级。传统机器视觉用阈值、规则、边缘检测那一套,遇到标准模糊、缺陷形态多变的情况就力不从心。后来大家开始上深度学习模型,模型确实"看"得更准了,但"判"的环节反而更模糊了——因为模型输出的是一堆概率值和类别标签,产线要的不是概率,是明确结论。
这时候提示工程的价值就体现出来了。我近两年在多个质检项目里尝试用提示工程来重构判定环节,效果相当明显:同一套视觉模型,只改提示词的设计方式,判定一致性可以从不到70%拉到95%以上。这篇文章我就把整个思路、架构、踩坑过程完整拆开讲,适合正在做质检AI落地、或者正准备给现有视觉系统加"智能判定"能力的团队参考。
2. 判定困境的本质:不是模型不够聪明,而是"判定标准"没有真正表达出来
搞提示工程之前,得先想明白一个问题:质检判定到底难在哪?我自己的体会是,这事的本质矛盾在于——产线里的判定标准是一套"活的、隐性的经验",而现有的AI系统只能处理"死的、显性的规则"。
2.1 质检判定标准的三层结构
在制造业现场,一份看起来写得很详细的《检验作业指导书》,真正落到老师傅手里执行时,会变成完全不同的东西。我把质检标准的实际构成拆成三层:
第一层是书面标准。就是挂在工位上、写在文件里的那些内容:"目视无明显划痕""直径0.3mm以下气孔允许存在"。这些文字看似明确,实际执行起来全靠个人理解。
第二层是经验标准。老师傅看一眼工件,嘴上说"这个不行",你问他为什么,他能说出一堆理由,但这些理由往往没法完全写进指导书。比如某种纹理在特定光照下看起来像裂纹,老手知道那是材料本身的纹理,新手就容易误判。
第三层是客户隐性标准。这是最麻烦的。客户验收时不会把所有要求都写进合同,但退货时会告诉你"这批外观不行"。到底是什么不行?很多时候要靠质量工程师反复沟通、试错才摸清楚。
传统视觉系统只能处理第一层,把规则固化成参数。深度学习模型能处理到第二层的一部分,但它的判断依据是隐性的特征分布,不受控。而提示工程的价值在于:它提供了一种把这三层标准"翻译"成模型能理解的语言的方式,让判定过程有迹可循。
2.2 "模糊"到底出在哪个环节
我复盘了多个质检项目后发现,"模糊感"主要来自三个地方:
第一个是类别边界模糊。合格与不合格之间不是一条清晰的线,而是一个过渡带。比如铸件表面的轻微砂眼,单看标准很难说算不算缺陷,得结合位置、数量、大小综合判断。模型在这类边界样本上的输出往往是"各打五十大板"——给出一个接近0.5的概率,等于没说。
第二个是上下文缺失。模型只看到了一个局部图像块,但判定结论需要的是全局上下文:这个缺陷在零件的哪个位置?零件用在什么场景?这批订单的客户容忍度如何?没有这些信息,模型看到的就是"图像特征",而不是"质量问题"。
第三个是输出不可控。模型有这个能力判断,但输出形式千奇百怪。有时候它自己补充一句"建议复检",有时候直接下结论,而且给结论的时候不说明依据。产线系统拿到这种输出根本没法自动化处理。
有意思的是,这三个问题在提示工程层面都有对应的解决手段,而且不需要动模型本身。这也是我为什么推崇先做提示工程、再考虑微调的原因——成本低、见效快、可解释性强。
3. 质检场景提示工程架构:四个关键设计维度
真正动手写提示词之前,我建议先搭一个架构框架,不要想到哪写到哪。这里我把自己总结的一套架构分享出来,按重要性排序:系统角色设定、判定规则注入、推理路径引导、输出格式约束。
3.1 系统提示词:给模型一个"质检工程师"的身份和边界
我见过太多人写系统提示词就是一句话:"你是一个质检助手,请判断工件是否合格。"这种写法和没写差不多。质检场景里,系统提示词至少要包含四类信息:
- 角色定义:不只是"质检工程师",而是"在某某产线从事外观检验10年的质检工程师",角色越具体,模型调用的知识模式越贴近真实场景。
- 任务边界:明确告诉模型哪些属于它的职责范围,哪些不属于。比如"你只负责基于提供的图像和检测数据做出判定,不负责分析设备故障原因"。
- 判定原则:写明首要原则是"防止不良品流出"还是"兼顾产线效率",这个倾向不同,同样的缺陷会得到完全不同的结论。
- 禁止事项:明确模型不该做什么,比如"不得仅凭单一特征下结论""不得使用'可能''大概'等不确定表述"。
我做过一个实验,两组提示词,一组只有简单的角色定义,一组包含完整的四类信息,在同样的200个真实检测样本上跑,判定一致性从71%提升到了88%。差距非常大,而且完全不需要改模型。
3.2 判定规则注入:把"老师傅经验"编码进提示词
这是整个提示工程架构里最核心的部分,也最考验对业务的理解深度。所谓判定规则注入,就是把前面说的三层标准——书面标准、经验标准、客户隐性标准——转写成模型能利用的文本规则。
具体写法上,我推荐用"条件-结论"的结构化语句,比如:
缺陷判定规则: 1. 若缺陷类型为"划痕"且位于"功能面",则直接判定为不合格; 2. 若缺陷类型为"划痕"且位于"非功能面",且长度小于5mm,则判定为合格; 3. 若缺陷类型为"气孔"且数量小于3个,且单个直径小于0.5mm,则判定为合格; 4. 若缺陷类型为"气孔"且位于"密封面",无论大小数量,直接判定为不合格; 5. 若同时存在多种缺陷,以最高严重等级作为最终判定结论。这里有几个容易踩的坑。第一个是规则之间要互斥,不能出现同一条缺陷既满足规则2又满足规则4的情况,否则模型会无所适从。第二个是规则的颗粒度要适中,太粗解决不了问题,太细提示词会膨胀到模型处理不过来的程度。我曾经给一个项目写了80多条规则,结果模型准确率反而下降了,后来精简到30条,效果反而更好。第三个是要把规则按优先级排序,让模型先处理"一票否决"类的强规则,再处理需要综合判断的弱规则。
3.3 思维链引导:逼着模型把判定依据"说清楚"
质检判定最怕的就是模型"凭感觉"给结论。我让模型先输出推理过程、再给结论,这招在多个项目里都被证明有效。具体做法是在提示词里加入类似这样的指令:
请按照以下步骤进行分析: 第一步:描述图像中检测到的所有缺陷特征,包括类型、位置、数量、尺寸; 第二步:对照提供的判定规则,逐条评估每个缺陷是否命中规则; 第三步:如果存在规则冲突或模糊地带,结合缺陷位置和零件功能进行分析; 第四步:给出最终判定结论。这个做法表面上看只是把输出结构调整了一下,实际上带来了两个好处:
其一,模型必须先生成可验证的中间描述,这天然降低了幻觉概率。当模型需要逐条描述"我看到了什么"时,它会比直接下结论时更克制。实测中,加了思维链引导之后,模型描述缺陷特征与人工复检结果的一致性显著提高了。
其二,输出的推理过程可以直接用于追溯。质量部门最怕的就是系统判了不合格,但追问为什么时说不出来。有了思维链输出,每一步都有据可查,这解决了很多管理层面的信任问题。
需要提醒的是,思维链不是越长越好。我发现对质检场景来说,4到5个固定步骤就足够了,步骤太多模型容易在前面绕圈子、后面草草收尾。
3.4 结构化输出约束:让判定结果能直接接入MES系统
提示工程做完了,判定结论最终要交给产线系统去执行,是放行、返工还是报废,每一步都有后续操作。所以提示词的输出格式设计必须跟MES系统的接口对齐。
我常用的输出格式是JSON,并且在提示词里给出明确的schema要求:
{ "defect_list": [ { "type": "划痕", "location": "非功能面", "count": 1, "max_size_mm": 3.2, "severity": "轻微" } ], "conclusion": "合格", "confidence": "高", "reasoning": "缺陷位于非功能面,长度为3.2mm,小于5mm阈值,未命中其他否决规则" }这里有个细节值得注意:confidence字段不要用数字概率,用"高/中/低"这种离散值。原因是多模态模型给出的概率数字并不具备严格的统计意义,反而会误导下游系统。离散等级更容易让产线系统做出稳定的分支判断。
输出格式约束这件事,很多人觉得不重要,实际上它直接决定了整个方案能不能自动化落地。如果每次输出的格式都变,光是写解析脚本和异常处理就够喝一壶的。
4. 实操记录:一个五金件表面缺陷判定项目的完整迭代过程
光讲理论不过瘾,我把最近做的一个真实项目过程完整复盘一遍。某五金加工厂要做一套针对冲压件的表面质检AI系统,产线上原来的做法是人工目检,漏检率高、标准不稳定,厂里想用多模态视觉模型做自动判定。项目本身不复杂,但提示词的迭代过程非常有代表性。
4.1 项目背景与第一版方案:为什么效果惨不忍睹
这个厂的主要产品是一批结构件,表面缺陷类型有划痕、压伤、氧化色差、毛刺、轻微变形五种。我最初拿到的需求描述就是一张表格,里面写着每种缺陷的判定标准,但语焉不详,比如"划痕不允许明显可见""氧化色差不允许影响外观"。
第一版我偷懒了,直接写了个通用提示词丢进去,大意是"你是质检专家,请根据图片判断工件是否合格"。结果在120个标注好的测试样本上,判定准确率只有64%,而且输出极不稳定——同一个样本跑了三次,两次合格一次不合格。产线工程师看完直摇头,说这还不如老师傅来得靠谱。
复盘时我发现了几个问题:首先是判定标准在提示词里完全没体现,模型只能靠自己的"常识"去理解什么是表面缺陷,理解方式跟工厂实际标准差异很大;其次是输入信息不完整,我只传了一张图,完全没告诉模型零件的功能面在哪里、客户对这批货的要求是什么;最重要的是,没有约束模型的输出行为,它经常答非所问,甚至偶尔蹦出"这是一个美丽的工件"这种废话。
4.2 关键迭代一:把判定规则写进提示词之后的变化
第一版失败后,我开始认真做规则梳理。带着厂里的质检主管和老师傅开了两次会,把每条缺陷标准都追问到可操作的程度。比如"划痕不允许明显可见"这句话,老师傅实际的执行口径是:
- 划痕长度大于5mm,不管深度如何,直接判不合格;
- 划痕长度在2到5mm之间,看深度和位置,功能面从严、非功能面从宽;
- 划痕长度小于2mm,一般放行,但如果后续有抛光工艺需要看具体情况。
类似的规则,我把五种缺陷全部梳理清楚了,一共整理出28条结构化规则。写进提示词之后,模型的表现一下子上来了:判定准确率从64%提升到82%,输出稳定性也好了不少。但还有一个问题没解决——模型对疑难边界的处理仍然不稳定。
4.3 关键迭代二:加入少样本示例后的质变
统计了一下,剩余的18%错误里,绝大部分集中在两类边界情况:一是"多个轻微缺陷同时存在,单独看都合格,合起来怎么办";二是"缺陷特征不明显,模型识别得模棱两可"。这两类恰恰是规则文字最难覆盖的。
解决思路就是加少样本示例。我在提示词里加入了三条典型的边界案例,每条包含图像特征描述、推理过程和最终判定。比如:
示例1: 图像特征:工件非功能面存在一条长度约4mm的浅划痕,同时表面有2处直径约0.3mm的微小压伤点。 推理过程:划痕长度未超过5mm阈值,且位于非功能面;压伤点数量为2,未超过3个的上限,但有轻微密集的趋势,需结合外观要求从严判断。 结论:不合格。原因:多个轻微缺陷同时存在,外观综合质量下降,判定从严。这三条示例不是随便找的,是我专门挑出来的、在历史质检数据里由质量主管仲裁过的典型案例。加入少样本示例后,模型在边界样本上的判定稳定性有了明显提升,整体准确率到了91%,但距离上线目标还有差距。
4.4 关键迭代三:系统提示词的重构和输入增强
最后这一步,是把整个架构重新梳理了一遍。我之前把规则、示例、推理步骤全都堆在了一段提示词里,结果模型有时候会"跑偏"——该按规则判的时候跟着示例跑了,该参考示例的时候又把规则丢了。
重构时我把系统提示词拆成了清晰的模块:角色定义、判定总原则、结构化规则、少样本示例、推理步骤、输出Schema。更关键的一步是改进了输入内容——不再只传原始图像,而是额外传入了检测算法的前置输出,包括缺陷检测框坐标、类型预判、尺寸测量值等。这些信息本身来自另一套视觉模型,但把它们作为文本附加信息传给判定模型,相当于给判定模型递了一张"检查单",让它不用从零开始看图,而是基于已有的检测结果做裁决。
这一步的效果非常显著。最终在500个真实样本的测试集上,判定准确率达到了96.5%,判定结果与人工仲裁的一致性超过了93%,完全满足产线自动化判定的需求。整条链路的完整调用流程最后长这样:
# 伪代码:质检判定主流程 def quality_judgment(image_path, detection_result): prompt = build_prompt( rules=rules_28, examples=boundary_examples, reasoning_steps=True, output_schema=json_schema ) response = multimodal_model( image=load_image(image_path), context=detection_result, # 检测框、缺陷类型预判等 system_prompt=prompt ) judgment = parse_json(response) return judgment # {"conclusion": "合格/不合格", "reasoning": "..."}整个迭代过程花了大概三周,其中写规则开会就占了一周多,真正调提示词的时间反而不多。这也印证了我一直以来的看法:提示工程的大部分功夫在提示词之外,对业务的理解深度才是决定上限的东西。
5. 常见问题与排查实录:那些年我们踩过的坑
提示工程做质检判定,坑是真的多。我把自己遇到过的、以及圈子里同行分享过的典型问题整理成了一份速查表,按问题现象、可能原因、解决思路三个维度来梳理。
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 同一张图多次判定结果不一致 | 模型采样温度过高,或提示词中规则冲突 | 把采样温度调到0或接近0;检查规则是否互斥;增加确定性指令 |
| 模型对明显缺陷强行判定合格 | 提示词中"从严"原则缺失,或示例覆盖不足 | 在系统提示词中强化零容忍声明;补充同类漏判案例 |
| 输出JSON格式频繁解析失败 | 输出Schema描述不够严格,或模型生成了多余内容 | 使用严格的格式约束措辞;在Schema中给字段加枚举值限制 |
| 模型把"疑似缺陷"描述成确定缺陷 | 思维链步骤缺失,模型跳过了特征描述直接下结论 | 强制要求先描述特征再推理再判定;可在推理步骤中要求分级表述 |
| 换了一批产品后准确率骤降 | 判定规则与新产品的工艺特征不匹配 | 建立按产品族切换的提示词模板;维护多套规则库 |
| 提示词越来越长但效果越来越差 | 规则和示例冗余,模型注意力被稀释 | 精简规则数量;移除低价值示例;将长文本拆分成模块 |
5.1 "模型嘴硬"问题:它压根没看清楚却非要给结论
这大概是质检场景最危险的问题。大模型本身就倾向于"回答问题",你给它一张模糊的图,它宁可瞎猜一个结论,也不愿意承认自己看不清楚。但如果模型看不清时强下结论,后果就是不合格品流出,这在制造业是不可接受的。
我的处理方案是在提示词里加入一个"置信门槛"机制:明确告诉模型,当无法清晰识别缺陷特征时,必须输出"无法判定"并触发人工复检流程。同时在思维链步骤里要求模型先判断"图像质量是否满足判定需求",比如存在反光、遮挡、分辨率不足等情况时,直接走复检分支,不进入判定流程。这个门槛机制,把模型从"必须给结论"的困境里解放出来,让它敢于说"我不确定"。
5.2 判定标准的漂移问题:换了批次就翻车
产线质检一个很现实的问题是:同一款产品,不同批次的材料、模具状态、工艺参数会有波动,导致正常品的外观特征也在变。如果提示词里的判定规则写得过于绝对,比如"划痕长度大于5mm即不合格",遇到一批表面纹理整体偏粗的产品,模型就会大量误判。
应对办法是建立一个提示词模板的参数化机制。把容易随批次变化的部分——比如尺寸阈值、数量上限、位置敏感度——提取成模板变量,由工艺工程师根据每批次的实际标准填写。这样提示词本身保持稳定,只有变量部分随批次切换。我在一个连接器外观检测项目里用了这个机制,换批次时只需要更新一个配置文件,不需要动提示词正文。
5.3 幻觉问题:模型"脑补"出不存在的缺陷
多模态模型的幻觉在质检场景里也有体现。明明表面很光滑的工件,模型有时候会因为纹理干扰,在思维链描述阶段"看到"了一个实际上不存在的划痕。这种情况如果只是描述还好,最怕它顺着幻觉往下推理,最终给出不合格的结论。
我做过对比实验,发现思维链对幻觉有抑制作用,但无法根除。更有效的办法是在输入侧做处理:把检测算法输出的缺陷框叠加在图像上,让模型"只关注框内区域、忽略框外背景"。这么做之后,由背景纹理引发的幻觉降低了七成以上。这也说明了为什么提示工程在质检场景里必须跟前置视觉算法配合,单独靠提示词解决不了所有问题。
6. 落地建议与个人体会
说了这么多,最后聊点实际的建议。如果你所在的团队正准备用提示工程来改造质检判定环节,我觉得有三件事值得提前想清楚。
第一,先想清楚哪些环节该用提示工程,哪些不该用。提示工程最适合的是"判定"环节,也就是已经有了检测结果、需要结合标准做裁决的部分。如果零件识别、缺陷定位本身还没做好,那是另一个领域的问题,别指望靠提示词来补。
第二,团队里必须有一个真正懂业务的人深度参与。我在多个项目里发现,决定提示工程上限的往往不是技术能力,而是能不能把老师傅脑子里的经验"挖"出来、转写成规则。这个人需要既听得懂产线语言,又理解模型的思维方式。如果团队里没有这样的人,建议先花时间培养,或者借助质检工程师的力量,而不是闷头调提示词。
第三,建立评测集和回归机制。提示词的每次改动都可能引入新的问题,一定不能靠感觉判断改得好不好。我每次项目都会从历史质检记录里抽取几百个样本,覆盖各类缺陷和边界情况,做成固定的评测集。每次改提示词,就跑一遍评测集,对比准确率、召回率、稳定性指标,用数据说话。
我个人在实际操作中的体会是:提示工程在质检判定这件事上,真正的价值不是"让模型更聪明",而是"让判定过程更透明"。它逼着我们把那些藏在老师傅脑子里的、写在客户抱怨里的隐性标准,一条条挖出来、写清楚、放进去。哪怕最终某些环节还是要上微调模型,这个梳理过程本身也值回票价了。如果你正在做类似的项目,希望这篇复盘能帮你少走几个弯路。
最后再分享一个小技巧:提示词版本管理一定要用Git或者类似的工具,每条改动都留记录。我吃过没做版本管理的亏——有一次改了规则之后整体准确率掉了5%,想回退却发现上一版提示词已经找不回来了,只能重新调。从那以后,每次迭代我都养成了提交版本、写清楚改动内容的习惯,这个习惯省下来的时间远远大于养成它花掉的时间。