前言

在工程成本核算中,材料价格匹配是最耗人的环节之一。一份清单几百上千项材料,逐项查市场价、对比历史采购记录、选品牌、定价格,一套流程下来少则几天,多则十几天。

更麻烦的是,同一材料不同品牌价格差几倍,信息价滞后,历史数据难以复用。价格不准,成本就算不准,报价就没有底气。

这篇文章从技术实现角度,聊一下工程材料价格匹配的完整链路:从清单中的非结构化材料描述,到标准化SKU,再到供应商推荐和价格匹配。结合工程速算狮小程序开发过程中的实践,拆解每个环节的设计思路和实现要点。


一、整体链路

先看完整流程:

text

非结构化清单 → 材料名称识别 → SKU标准化 → 供应商匹配 → 价格推荐 → 异常项标记

每个环节解决一个具体问题:

环节解决的问题输出
材料名称识别清单里的材料名写法不统一结构化的材料名称+规格+参数
SKU标准化同一材料有多个叫法统一的标准SKU编码
供应商匹配同一SKU有多个供应商和品牌候选供应商列表
价格推荐多个供应商价格不同推荐价格+推荐理由
异常项标记匹配不到或价格异常标记出来供人工处理

二、材料名称识别:从非结构化到结构化

2.1 问题

工程清单的格式五花八门。同一材料,有的写全称,有的写简称,有的用行业习惯叫法,有的用厂家型号。比如:

  • “镀锌钢管 DN100”

  • “镀锌管 100”

  • “热镀锌钢管 DN100 国标”

  • “天津友发 镀锌钢管 DN100”

这四种写法,指的是同一种材料。但直接拿去做价格匹配,系统会认为是四种不同的材料。

2.2 实现思路

材料名称识别的核心是语义解析+实体抽取。具体做法:

第一步:分词与实体识别

用NLP模型对材料名称进行分词,识别出关键实体:

text

输入:热镀锌钢管 DN100 国标
输出:
  - 材质:镀锌
  - 品类:钢管
  - 规格:DN100
  - 标准:国标

第二步:属性归一化

把不同写法归一化到统一属性:

原始写法归一化后
DN100公称直径100mm
100公称直径100mm
4寸公称直径100mm

第三步:缺失属性补全

有些清单只写了材料名,没写规格。这时候需要根据上下文补全,或者标记为待人工确认。

2.3 实测效果

在工程速算狮的实测中,消防安装项目的材料名称识别率在90%以上,暖通项目有的能到100%。识别不了的,系统会标记为异常项,由人工补充。


三、SKU标准化:从多个叫法到一个编码

3.1 问题

材料名称识别之后,还是有多个叫法对应同一材料的问题。比如“镀锌钢管 DN100”和“热镀锌钢管 DN100”,材质描述不同,但实际是同一种材料。

3.2 实现思路

第一步:建立标准SKU库

为每种材料建立标准SKU,包含:

  • SKU编码

  • 标准名称

  • 品类

  • 材质

  • 规格

  • 单位

  • 所属系统

第二步:相似度匹配

把识别后的材料与标准SKU库做相似度匹配。匹配算法可以组合:

  • 字符串相似度:编辑距离、Jaccard相似度

  • 属性匹配度:品类、材质、规格是否一致

  • 语义相似度:用预训练模型计算语义向量相似度

第三步:阈值判断

  • 相似度高于高阈值:直接匹配

  • 相似度介于高低阈值之间:进入候选列表,由人工确认

  • 相似度低于低阈值:标记为未识别,由人工补充

3.3 关键设计点

SKU库需要持续维护。 新材料的出现、旧材料的淘汰、行业标准的变化,都会影响SKU库的有效性。系统需要支持SKU的新增、修改、合并。

匹配阈值需要可配置。 不同项目的清单质量不同,阈值太严会漏匹配,太松会错匹配。系统应该允许根据项目类型调整阈值。


四、供应商匹配:从SKU到候选供应商

4.1 问题

SKU标准化之后,需要找到这个SKU对应的供应商和价格。但同一SKU可能有多个供应商、多个品牌,价格各不相同。

4.2 实现思路

第一步:建立供应商-材料关联库

记录每个供应商能提供的材料SKU、品牌、历史价格、报价有效期。

第二步:候选供应商筛选

根据SKU,从关联库中筛选出能提供该材料的供应商列表。

第三步:规则排序

对候选供应商进行排序,排序规则可以包括:

  • 历史采购优先:优先展示历史采购过的供应商

  • 白名单优先:白名单内的供应商优先

  • 黑名单排除:黑名单内的供应商直接排除

  • 价格优先:总价最低优先

  • 前N家优先:取前六家供应商

  • 不足N家时逐步放宽条件补足

4.3 规则引擎设计

规则引擎需要支持:

  • 规则配置:规则可以动态增删改,不需要改代码

  • 规则优先级:多条规则冲突时,按优先级执行

  • 规则解释:每条推荐结果要能说明“为什么推荐这家”

比如推荐结果是“供应商A,价格100元”,需要能解释:

推荐理由:历史采购优先 + 白名单供应商 + 价格在候选供应商中最低


五、价格推荐:从候选到最终价格

5.1 问题

候选供应商有了,价格也有了,但最终推荐哪个价格?

5.2 实现思路

第一步:价格归一化

不同供应商的报价可能包含不同的费用项(含税/不含税、含运费/不含运费)。需要归一化到统一口径。

第二步:价格推荐

根据规则引擎的排序结果,推荐最终价格。推荐逻辑可以是:

  • 取排序第一的供应商价格

  • 取候选供应商的中位数价格

  • 取历史采购均价

具体用哪种,取决于业务规则。

第三步:兜底机制

如果以上规则都匹配不到,默认取该材料最近一次人工录入的单价;还没有,就置0由用户自行录入。

5.3 异常项标记

匹配不到的项,明确标出来:

  • 未识别的系统名、材料名,用黄色背景标记

  • 价格显示为0的项,代表AI识别失败或未检索到市场价

这样设计的好处是:人只需要处理异常项,正常项自动通过,整体效率反而更高。


六、数据闭环:让匹配越来越准

6.1 问题

AI匹配不可能100%准确。人工处理的异常项,如果不沉淀下来,下次还会遇到同样的问题。

6.2 实现思路

第一步:记录人工处理结果

人工处理异常项时,系统记录:

  • 原始材料名称

  • 人工指定的标准SKU

  • 人工选择的供应商和价格

  • 处理时间

第二步:回写规则库

人工处理结果可以回写到SKU库和供应商关联库:

  • 新材料名称 → 新增SKU映射

  • 新供应商 → 新增供应商关联

  • 新价格 → 更新历史价格

第三步:下次匹配时优先使用

下次遇到同样的材料名称,系统优先使用已记录的映射关系,不需要再人工处理。

6.3 数据闭环的价值

这个闭环让系统越用越准:

  • 用的项目越多,SKU库越丰富

  • 人工处理越多,规则库越完善

  • 匹配率越高,人工处理量越少


七、和传统定额组价的关系

需要说清楚的是,这套自动化方案不是要取代定额组价,而是在定额组价的基础上,解决“材料单价怎么来”这个环节的效率问题。

定额消耗量、组价逻辑仍然可以沿用,但材料询价、品牌选择、历史数据复用这些环节,可以交给系统自动完成。两者是互补关系,不是替代关系。


八、实践中的注意点

1. 识别准确率依赖知识图谱覆盖度

常规材料识别率高,非标材料可能需要人工补充。建议将AI核算结果作为参考,最终报价由专业造价人员复核确认。

2. 异常项显式化是关键设计

与其追求全自动,不如把不确定的项标出来让人快速处理,整体效率反而更高。

3. 规则引擎要可配置

不同项目、不同企业的规则不同,规则引擎需要支持动态配置,而不是硬编码。

4. 数据闭环要建立

人工处理的结果要回写到规则库,让系统越用越准。


九、总结

工程材料价格匹配的AI实现,核心是四个环节:

  • 材料名称识别:从非结构化清单中提取结构化材料信息

  • SKU标准化:把多个叫法归一到一个标准编码

  • 供应商匹配:按规则筛选和排序候选供应商

  • 价格推荐:根据规则推荐最终价格,异常项显式标记

这套链路在工程速算狮小程序中已有落地实践。该工具目前聚焦四川地区的消防安装、暖通、水电项目,用于工程清单的AI识别与成本核算。如果你正好做这类项目,可以在微信中搜索“工程速算狮”小程序了解具体实现效果。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐