Spec提取:产品定制无人化的第一道关卡

发布时间:2026/10/17 3:53:42
Spec提取:产品定制无人化的第一道关卡
1. 为什么产品定制无人化先要解决Spec提取1.1 无人化产线背后藏着一条“人工翻译流水线”我帮一家做定制结构件的制造企业梳理“产品定制无人化”流程时最典型的一个场景是这样的客户发来一封邮件里面写了一句“要一个支架长500左右材质最好用铝表面黑点无所谓数量80件”。工艺员看完邮件得先打电话确认“铝是哪种铝”是6061还是6063“黑点无所谓”是不要表面处理还是只要喷粉然后手动在Excel里建一份规格书再转给后面的排产、备料和加工环节。整个过程看起来不难但每天几十张这样的订单堆在一起产线旁边的自动化设备跑得飞快信息流却卡在人手上。这就是产品定制无人化最容易被忽略的起点Spec提取。很多人一提到无人化脑子里全是机械臂、AGV、自动检测但真正决定订单能不能“不碰人”地跑完的恰恰是客户需求到产品规格之间那层翻译工作。Spec是规格书Specification的简称Spec提取就是把客户用自然语言、图纸、备注、聊天记录表达的定制要求转换成一套结构化的、机器可读的参数集合。这一步不解决后面所有的自动化都只能建立在人工录入的数据上系统越先进断点越刺眼。1.2 Spec提取在整个定制链条里处于什么位置一条完整的产品定制链路大致是这样的需求接收、规格提取、设计选型、工艺编排、排产执行、加工制造、检验交付。加工制造环节现在有很多成熟的自动化方案刀具自动补偿、在线测量、机器人上下料都不是新鲜事。排产执行也可以用APS软件做。但如果规格提取环节还是靠人那么从“客户原话”到“系统里的订单数据”之间就始终隔着一道人工翻译墙。我调研过那家企业的实际数据车间已经实现了柔性自动化换型时间压到了五分钟以内但订单规格整理仍需要两名全职工艺员每人每天处理三十条左右的定制订单平均一条要花二十分钟到四十分钟。这还不算与销售确认、和客户电话核对的隐性时间。更要命的是工艺员手工录入Excel时经常把“客户说的大概意思”简化成自己理解的字段比如客户写“90°折弯”他录成“折弯”客户原本强调的“双面焊缝”被漏掉。等到产品做出来才发现差异报废成本只能自己扛。所以Spec提取是整个定制无人化链条里优先级最高的“前置关卡”。它不在生产线上却决定了生产线能不能真正按照客户意图高速运转。后面要谈的选型、报价、工艺生成、排产、物料计划全部依赖这份规格数据。规格对了后面所有系统都是在正确的轨道上跑规格错了越自动化错得越快、错得越贵。2. 先建模再提取Spec不是随手抓的一张参数表2.1 可执行Spec的三要素很多企业一开始做的“规格表”其实就是一张Excel里面堆着“产品名称”“备注”“客户特殊要求”这类大文本字段。这种表只能给人看机器拿到之后完全不知道该怎么解析。我后来总结了一个观点一份能被机器“执行”的Spec至少要包含三个层面的内容。第一是属性层也就是用什么字段来描述这个产品。比如结构件常见的属性有长度、宽度、高度、材质、表面处理、公差等级、孔位数量、螺纹规格、包装要求。第二是取值层这个属性允许取哪些值或者落在哪个区间。长度不能是负的材质不能是客户随笔写的“好一点的钢”表面处理必须是企业自己有能力做的枚举项。第三是约束层不同属性之间存在依赖关系。比如要求了“不通孔攻丝”就必须配高精度等级比如长度超过500毫米的支架为了结构刚性宽度不能小于某个下限。有了这三层Spec提取才不是“把文本塞进字段”而是“把自然语言映射到有限状态空间”。提取过程一旦完成了机器就可以立刻做合法性校验而不是等工艺员发现“这个长度根本没法加工”之后才回头问客户。2.2 一个规格模型长什么样以“支撑支架”这个产品族为例一个简化的规格模型可能是这样的{ productFamily: 支撑支架, attributes: [ { name: length, type: number, unit: mm, range: [50, 800] }, { name: width, type: number, unit: mm, range: [30, 120] }, { name: height, type: number, unit: mm, range: [20, 100] }, { name: material, type: enum, values: [6061铝合金, 304不锈钢, Q235碳钢] }, { name: surface, type: enum, values: [阳极氧化, 镀锌, 喷粉, 不处理] }, { name: threadedHoles, type: boolean }, { name: tolerance, type: enum, values: [粗级, 中级, 精级] } ], rules: [ if material 304不锈钢 then surface in [喷粉, 不处理], if threadedHoles true then tolerance 精级, if length 500 then width 60 ] }这个模型是我接触过的某类定制订单整理出来的典型版本不一定适合所有企业但结构可以复用。里面最重要的不是字段多而是取值域和规则必须跟自己的加工能力严格对齐。比如你有阳极氧化线就可以把“6061铝合金”和“阳极氧化”这个组合纳入默认选项如果你没有镀锌能力就千万别让客户选“镀锌”否则后面交期一定炸。建模的时候不要凭空设计我建议直接拉过去三到五年的历史订单统计每个字段出现的频次。出现频率低于百分之五的字段除非是行业硬性要求否则先不要放进模型避免把提取问题搞得越来越复杂。频次高的字段优先标准化频次低的字段可以暂时留在“补充说明”里由人工兜底。2.3 建模工作80%的时间在统一“叫法”真正动手建模时最大的障碍不是数据建模本身而是不同角色对同一个参数的口径不一致。销售、工艺、质量、客户面对“材质”这个词可能会产生四种理解销售习惯写“铝”工艺习惯写“6061-T6”客户可能写“航空铝”质量那边又要求写“GB/T 标准牌号”。如果不把这些同义词在模型里统一掉后续做NLP提取时就一定会翻车。我在实际项目里维护了一张同义词映射表放进了规格模型里{ materialSynonyms: { 6061铝合金: [6061, 6061-T6, 铝, 航空铝, al, aluminium], 304不锈钢: [304, sus304, 不锈钢, 不锈铁, stainless steel], Q235碳钢: [q235, a3钢, 碳钢, 普通钢, 铁板] } }表面处理也一样“氧化”要区分是阳极氧化还是黑色氧化“喷漆”要区分是粉末喷粉还是液体喷漆。这些业务叫法的统一必须让有经验的工艺员和销售一起参加评审不能只靠IT人员闭门造车。我当时做了一个看起来很笨但很有效的动作把五百条历史订单里的原始描述打印出来让工艺员一条一条念说明每个词在内部对应什么标准值。只花了两个下午同义词表的覆盖率就达到了百分之八十以上。后面算法不管用什么模型都在这个基础上跑准确率才有了保障。3. Spec提取的四条实战路径3.1 结构化表单准确率最高但“最不自由”第一条路径听起来最不“智能”但往往最管用在客户下单或销售录入的环节直接嵌入一套动态结构化表单。表单根据产品族动态展示字段材质用下拉框长度用带范围的数值输入框表面处理用单选。客户每选一项系统立刻校验合法性。这条路径的准确率几乎百分之百因为客户根本没有机会写“铝”之外的自由文本。后端接到的直接是JSON格式的规格数据不需要做任何解析。它的代价是灵活性差老客户习惯了发邮件、发图纸你让他去网页表单里一项一项填他会嫌麻烦。我的建议是把结构化表单用在三个地方新客户首次下单、标准化程度最高的产品线、以及所有需要报价的环节。表单设计有一条实用经验一次展示的字段不要超过十个否则客户会放弃填写。字段多了就做成分步引导先选产品族和关键尺寸再展开表面处理和公差等次级字段。另外一定要预填默认值比如材质默认选该产品族近三个月订单里占比最高的选项客户只需要在少数地方改动体验会好很多。3.2 文本提取从邮件、备注、历史订单里“抠”参数真正有挑战的是文本提取。客户发来的邮件正文、Excel备注、聊天记录截图转出来的文字甚至销售在下单系统里随手写的“客户要求那种黑色的架子”都算。这类数据是非结构化的没法直接进ERP。我用的方案是“规则引擎加轻量NLP再加置信度评分”的组合流程分五步。第一步是预处理去掉邮件签名、问候语、公司抬头这些噪声。第二步是分句和命名实体识别把“长500左右材质最好用铝表面黑点无所谓”切成短句识别出候选属性。第三步是别名归一把“铝”映射到“6061铝合金”把“500”识别成长度候选值。第四步是规则校验检查取值是否落在规格模型的取值域内比如500在50到800之间通过如果客户写“长度5m”就要考虑是否超过了区间上限。第五步是置信度评分根据模式命中强度、上下文一致性、多来源支持度算出一个分数低于阈值的进入人工审核队列。规则部分可以用一些正则模式做快速命中比如import re patterns { length: [ r长(?:度)?\s*[:]?\s*(\d(?:\.\d)?)\s*(?:mm|毫米)?, r[Ll]\s*[:]?\s*(\d(?:\.\d)?) ], material: [ r材质[:]?\s*([一-龥A-Za-z0-9]), r用\s*([一-龥A-Za-z0-9])\s*(?:做|制造|来) ] } text 材质最好用铝长度500mm左右 for field, pats in patterns.items(): for pat in pats: m re.search(pat, text) if m: print(field, m.group(1))实际线上环境会比这个复杂得多。光靠正则肯定不够因为同一个词在不同语境下含义可能完全不一样。比如“304”后面跟着“个”那可能不是材质编号而是数量比如“表面黑点无所谓”客户想表达的是“表面处理选最普通的就行”不是让你真的做黑点。正则加轻量NLP的好处是结果可解释出了问题你能明确知道是哪个词被误判了可以针对性加规则而不是整个模型重训。3.3 图纸和3D模型提取把标题栏和STEP属性用起来定制订单里经常附带PDF图纸或者三维模型这部分信息的密度比纯文本高得多但提取难度也更大。我常用的路径有三条。第一条是读取图纸标题栏。很多企业的PDF图纸右下角有标准标题栏包含材料、表面处理、重量、比例、图号这些字段。用OCR加模板定位可以比较稳定地抽出字段值。难点是标题栏格式不统一不同客户发来的图纸格式千奇百怪模板需要做泛化。第二条是解析三维模型的自定义属性。如果是STEP文件很多系统会把材料、表面处理写进自定义属性或者PMI产品制造信息。通过解析STEP AP242格式可以读到这些信息。如果客户发的是原生三维模型通常需要先转换成中间格式再读取。这条路径精度高但兼容性有限老客户发来的老格式文件经常读不出属性。第三条是结合几何信息做尺寸提取。对三维模型求包围盒直接得到长宽高的大致尺寸。对PDF图纸则可以通过识别尺寸标注线来获取主体尺寸。这条路径适合处理那些“客户发了个图什么文字都没写”的情况能把大方向先定下来。需要特别提醒的是图纸提取不要把鸡蛋都放在一个篮子里。我见过不少团队花了大精力做图纸OCR结果因为客户发的是扫描件、倾斜、模糊、手写准确率始终上不去。更稳妥的做法是图纸提取的结果作为候选证据源和文本、表单一起进入多源融合环节而不是单独依赖它做唯一结论。3.4 机器学习补全基于历史订单推断缺失字段文本和图纸能提取出显式出现的参数但定制订单里经常有“客户没说”的字段。比如客户只提了“承重500公斤左右”没有明确说材质和表面处理。这时候可以用历史订单训练一个补全模型基于其他已提取字段和订单上下文推断最可能的材质、表面处理和公差等级。这个方案不能理解成“凭空预测”而是“基于相似订单的合理补全”。比如历史订单里长度在400到600、承重500公斤左右的支架有百分之八十用的是Q235碳钢加喷粉那新订单缺失材质时就可以给出这个推荐值并标记为“推断值”。推断值默认不能直接进生产计划需要经过规则校验或者低层级的人工确认。这个模型见效的前提是历史数据足够多、足够干净。我建议先从某个单一产品族开始积累几千条高质量订单再做补全。如果数据量不够模型输出的高置信度往往是一种假象背后的逻辑很危险。4. 从Spec提取到无人化执行数据流与系统落地4.1 交互层、提取层、执行层怎么分工Spec提取不是单独一个脚本它在整条系统链路里承担的是“翻译中间层”的角色。我习惯把它拆成三层来看。交互层负责接收原始需求包括客户下单表单、销售录入界面、邮件解析入口、图纸上传通道。这一层的目标是“把需求沉淀下来”不要直接修改或清洗保留原始状态。提取层是核心负责把原始需求转换成结构化规格数据并执行校验、评分、路由。执行层是下游系统包括ERP、PLM、MES、APS。每一层都有独立的产出物交互层产出原始订单附件提取层产出SpecJSON和置信度记录执行层产出物料清单、工艺路线和排产任务。这样分层最大的好处是每层可以独立迭代。比如提取算法要换模型只要输出结构不变交互层和执行层都不用动。我曾经见过一个赶进度的团队把提取规则直接写进ERP触发器里结果每次改规则都要停ERP教训非常深刻。4.2 接口约定与数据结构设计提取层向下游输出时我强烈建议统一规格。即便不同产品族字段不同外层结构也要保持一致这样才能让下游系统稳定对接。一个典型的输出结构是这样的{ orderNo: SO-20250607-013, specId: SPC-A0642, version: 1, status: pendingReview, items: [ { lineNo: 001, productFamily: 支撑支架, params: { length: 500, width: 60, material: Q235碳钢, surface: 喷粉, threadedHoles: true, tolerance: 精级 }, source: { material: text, length: model }, confidence: 0.92, status: autoPassed } ] }重点关注几个细节。第一所有提取结果都要附上来源标记和置信度下游系统知道哪些字段是直接提取的、哪些是推断的在做决策时能区分对待。第二每次提取必须保留一条原始文本或图纸元数据的引用方便追溯“为什么是这个值”。第三一个订单有多个产品行项时不要把多行参数揉进一个大JSON尽量按行项拆分否则MES解析会非常痛苦。4.3 和ERP、MES集成时的三个红线第一未冻结的Spec不要流入MES。很多企业把ERP订单建好后直接同步到车间结果工艺员还在改参数车间已经按旧版本加工了。我建议在Spec提取层加一个“冻结”状态只有冻结后的规格数据才允许被MES读取。第二不要在ERP里直接按客户原始描述建订单。客户邮件原文“铝支架长500”不能作为ERP的品名规格字段否则后续所有系统和报表都会被脏数据污染。正确做法是先经过提取层生成标准规格再拿着标准规格去ERP建单。第三客户中途改需求时要走版本管理而不是覆盖修改。客户说“长度改成600”如果直接把旧值覆盖掉排产记录和检验记录就都对不上了。正确的做法是生成Spec新版本对比差异输出影响面。差异只涉及备料那就改物料计划差异涉及已完成的加工工序那就必须走中止或返工流程。这三个红线看起来很简单但凡是做到中途的项目几乎没有不踩的。5. 实战踩坑记录五个最容易翻车的环节5.1 多来源信息冲突时不知道该信谁的同一个订单表单里填写材质是“6061铝合金”图纸标题栏却写着“Q235”客户邮件又补了一句“用不锈钢”。三个来源三个说法到底信谁我的解决办法是建立证据优先级动态表单大于结构化图纸属性大于人工录入文本大于OCR结果大于模型推断值。同时每种来源都有独立权重最终以“优先级最高且置信度达标”的值为准。如果最高优先级来源不能覆盖某个字段就逐级下探。存在冲突时不能静默选择其中一个而是必须把冲突标记出来哪怕这单最后走了人工确认也要保留冲突记录。否则下次复盘时你永远不知道系统为什么会选错。5.2 单位换算和“顺手写错”的边界情况客户写“长1米”内部标准单位是毫米提取时如果没做单位归一1会被当成1毫米直接触发范围校验失败。类似的还有英寸、英尺以及“一米五”“1.5m”“1500”这种写法。建议在预处理阶段统一单位转换米转毫米、英寸转毫米并把原始表述留档。还有一种更难防的情况是客户“顺手写错”比如型号和数量写反了“支架80件长500”被提取成“长80数量500”。规则引擎能做的是校验取值域80不在长度50到800之外吗它也在所以单纯靠范围校验抓不住这种错。我后来加了一个针对“数字相邻”的上下文规则如果两个数字紧挨在一起且一个更像数量、一个更像尺寸就提高数量词的置信度让模型按语序权重来判。这类问题没有一劳永逸的答案只能靠积累规则和人工复盘的反馈数据。5.3 同义词和多义词没有你想的那么简单“氧化”在表面处理这个语境下可能是阳极氧化也可能是黑色氧化必须看上下文。“喷漆”可能是喷粉也可能是液体漆。“普通钢”有时候指Q235有时候指45号钢因为45号钢也会被叫成“普通圆钢”。这些多义词单纯靠关键词匹配一定会翻车。我的做法是在同义词映射表之外再加一层“上下文限定规则”。比如“阳极氧化”只能作为枚举值映射给铝合金材质“镀锌”不能出现在不锈钢表面处理选项中。当提取到的表面处理枚举值跟材质冲突时规则校验会直接标记为低置信度并转入人工。虽然多了一道审核但至少不会让一个“不锈钢镀锌”的荒唐组合直接下发到车间。5.4 测试集太干净上线被真实数据击穿上线前用历史订单测试准确率能做到百分之九十五大家都觉得稳了。结果一开真实流量各种奇怪样本涌进来客户发来一张手写快递单的拍照图、工艺员把两个订单的备注写在同一个单元格、销售用语音输入把“6061”转成了“刘零幺”。测试集再干净也覆盖不了这种真实世界的数据噪声。最有效的办法就是影子模式。新系统先不参与正式流程在后台镜像一份真实订单数据跑结果每天把机器提取结果和人工处理结果放一起比对。跑一到两周你就能看到准确率崩塌的曲线然后有针对性地补规则或加训练样本。真金白银的系统大概率都要经历这个过程。5.5 人工审核队列被淹没置信度阈值设得太高比如0.95会导致大量订单涌进人工审核队列审核员一天要看几百条疲劳之后反而容易放行本应拦截的错误。我的建议是一开始不要追求高自动通过率先设0.75到0.8的阈值保证人工队列的量在可控范围。跑一段时间后把误判案例分析清楚再逐步把自动通过门槛往上抬。另一个技巧是给审核队列按风险分层。高风险订单比如参数冲突、多来源不一致、字段缺失排在前面优先审低风险订单比如只是某个非关键字段置信度略低可以批量放行。只要把审核资源集中投入真正有问题的样本上整个流程的节奏就会顺很多。6. 怎么判断Spec提取做得好不好6.1 三个关键指标判断一套Spec提取系统有没有价值不能只看“算法准确率”要看业务结果。我建议盯三个指标。第一是自动通过率也就是不需要任何人工干预就直接冻结规格的订单占比。这个指标综合反映了提取能力和规则校验的效果目标一般可以定在百分之七十以上。第二是字段级准确率对人工复核后的结果做抽样统计看机器提取的字段值被人工修正的比例。第三是订单处理平均耗时从客户需求进入系统到规格冻结的总时长直接反映对交付周期的影响。举个例子那家定制结构件企业实施前后的对比大概是这样的指标实施前目标值稳定运行后实测自动通过率0%≥70%76%字段级准确率依赖人工无统计≥95%96.8%单条订单全流程处理耗时20-40分钟≤10分钟7分钟左右实测数值会因产品族复杂度不同而波动但这个量级可以作为很多定制制造企业评估时的参考。6.2 稳健落地的三个阶段不要想着一步到位直接跑全自动建议分三个阶段推进。影子模式阶段提取系统在后台运行不接正式流程每天把机器结果和人工结果做差异对比重点是积累真实样本、暴露规则漏洞。双轨并行阶段系统开始输出结果但必须人工确认后才冻结这个阶段重点观察自动通过率和置信度分布确认哪些产品族可以先脱手。灰度放开阶段选择一两个标准化程度最高的产品族、几类配合度最好的老客户先让订单真正走无人工流程稳定后再逐步扩大范围。每个阶段都要有明确的退出标准。比如影子模式阶段必须做到差异率连续一周低于百分之五才能进入双轨并行双轨并行阶段必须做到自动通过率连续两周高于百分之七十才能灰度放开。没有量化标准就往下走极大概率会在上线后被一堆偶发问题拖垮。6.3 结构化Spec之后无人化还能走多远拿到结构化Spec之后能玩的事情远不止“下单”这一件事。规格数据一旦稳定自动报价就能做按产品族锁定材料成本、工时、表面处理单价几分钟算出一版报价。工艺路线也能自动生成同一产品族绑定标准工艺模板再按特殊参数动态调整工序。排产侧可以按规格里的交期、优先级、设备能力约束直接生成排产建议。质检计划同样可以从规格里抽取尺寸公差、表面处理等级等要求自动生成检验项。这也是为什么我一直强调Spec提取是“产品定制无人化”的第一块地基。它不是终点但它决定上层建筑能建多高。地基歪了上层再漂亮都会塌。最后说一点个人体会。我见过几个项目最后做成“半吊子”不是因为算法不行而是因为一开始没把业务口径对齐。Spec提取本质上是把散落在人脑里的经验变成系统里的明确规则这个过程中最费时间的不是写代码而是让销售、工艺、质量、生产坐在一起把“铝”“防腐”“黑点”这些模糊说法逐个明确下来。另外真没必要追求百分之百无人化留百分之二十的人工兜底系统反而更稳定。先找一条最标准的产品线跑通再逐步扩大这条路看起来慢实际是走得最快的一条。