今年年初,一家广东东莞的电子组装厂找到我们。他们的厂长上来就说了一句话,让我印象很深——"我们排产靠一个快退休的老师傅,他一请假,生产就乱套。"

这家厂有8条SMT贴片产线,每天要处理50-80个订单,每个订单涉及不同的产品型号、工艺要求、物料清单和交期。排产的人是个干了20年的老师傅,手艺确实好——脑子里装着每条产线的脾气、每个产品的好做程度、每个客户的时间要求。但他马上就要退休了,而且他的排产方式还是Excel加白板加电话,一个人一天要花半天做第二天的排程,出了一点变动就得全部重来。

我们给这家厂做了套AI Agent驱动的智能排产系统,断断续续搞了3个月。这篇文章记录整个过程——方案怎么选的、实施中踩了什么坑、最后效果怎么样。

一、现场情况摸底

第一次去工厂,在车间转了一整天,记了一些关键信息:

这些条件决定了一件事:这个排产问题,不是买个商业APS软件就能解决的。因为APS需要规范的物料数据、准确的工艺路线、实时更新的设备状态——这些这家厂基本不具备。而且商业APS动辄几十万,厂里预算有限。

所以我们的思路是:用AI Agent做"大脑",用轻量约束求解做"计算器",在现有数据条件下先跑起来,慢慢完善。

二、方案设计

最终确定的方案分三层:

数据层:从Excel和微信里"挖"数据

这家厂的核心数据散落在三个地方:

我们做了个轻量的数据网关,从ERP里拉订单数据,然后让老师傅用了一个下午的时间,把每条产线的能力参数(支持的Feeder数量、贴装速度、温度曲线范围)录入到一个简单的表单里。还建了个微信机器人,自动抓取群里关于物料异常和设备状态的通报。

踩坑起步:老师傅第一次用表单录入时,写的是"1号线比较快,但3号线贴大板子强"。这种自然语言描述很有用但没法直接给程序用。后来我们加了一层,让AI Agent把这些描述翻译成结构化参数——比如"1号线CPH(每小时贴装数)约35000,3号线在大板(600x400mm以上)场景下效率更高"。这就是第一个Agent的用处。

排程引擎层:AI Agent + 约束求解

排程的核心逻辑是这样的:

输入:
- 订单列表(产品型号、数量、交期、优先级)
- 产线能力(每条线支持的产品类型、速度、Feeder数量)
- 物料库存(当前可用量、补货时间)
- 约束条件(交期、物料齐套、换线时间、人员排班)

输出:
- 建议排程方案(哪个订单上哪条线、什么时间开始、什么时间结束)
- 如果有冲突/异常,给出调整建议

实现上,我们用了两个Agent配合:

Agent A — 信息整合Agent:负责从各个数据源拉取信息,理解"当前状态"。比如:"订单D0023的物料还有2天到货,3号线明天上午有一个设备保养计划,5号线AOI坏了正在修。"这个Agent的Prompt里加了一条规则:所有数据必须标明来源和置信度,不能自己编数据。

Agent B — 排程优化Agent:基于约束求解器(Google OR-Tools)做数学优化。目标函数是"最小化加权拖期+换线时间",约束包括:

OR-Tools算出一个基准方案后,Agent B还会做一轮"合理性检查"——比如"这个方案里3号线上连续排了4个换线频繁的小单,能不能换到多功能线上合并处理?"这种优化是数学模型做不到的,因为涉及车间现场的隐性知识。

最后,Agent B生成一个自然语言的排程说明,加上简单的时间线表格,推到厂长和生产主管的微信群。

展示与交互层:简单到不需要培训

没有做复杂的Web看板——这家厂的人不习惯看系统。而是做了三个交互入口:

这一点我觉得很关键:有些智能排产方案做得非常"重"——三维看板、数字孪生、大屏展示。但我们发现,对于这家厂的工人和管理者来说,微信群里的一段话+一张表比什么看板都管用。因为他们已经习惯了用微信处理一切工作信息。

三、实施过程

第一周:数据摸底和Agent Prompt调试

前面两周基本都在做数据准备。最花时间的事情不是写代码,而是搞清楚"每条产线到底能干什么"。

比如老师傅说"1号线不能打BGA"。为什么?是温度曲线不支持还是精度不够?一问才知道,1号线的回流焊炉有一个温区温控器坏了,温度不准,BGA这种对温度敏感的产品容易虚焊。但这个问题修一下就能解决——之前没人说,老师傅习惯了绕开它。

类似这种"隐性约束"发现了七八个。我们全部录入了Agent的约束知识库。

Agent Prompt的调试也花了不少时间。一开始Agent A在整合信息的时候经常"过度解读"——群里有人说"D0045的料可能到了",Agent就标记为"物料已到"。改了一版,要求Agent对信息来源做分级:ERP数据>人工确认>群消息。群消息级别的信息只标记为"待确认",不参与排程约束。

第二周到第四周:排程效果逐步提升

第一版排程方案出来的时候,老师傅看了笑了——"这不行,3号线这么排,Feeder位不够用。"

我们发现一个问题:约束模型里虽然考虑了Feeder数量,但实际的Feeder分配比想象中复杂。因为一个Feeder只能装一种物料,多个小订单共用同种物料时可以共享Feeder,但换线时Feeder需要重新配置。老师傅脑子里有一套"Feeder编排经验"——类似拼图的策略,把共用物料尽量集中。

我们把这个信息加到了约束里。改了约束模型后,第二版方案老师傅说"还行,能打60分"。然后我们保持"AI排->老师傅调->反馈给Agent学习"的循环,每轮迭代排程质量都在进步。到第四周末,老师傅说"可以到85分了,我再调一下就能直接用"。

排程质量打分(老师傅主观评分):
第一版:30分 —— 不可用,约束遗漏太多
第二版:60分 —— 方向对了但细节不对
第三版:75分 —— 大部分合理,偶尔有奇怪的分配
第四版:85分 —— 基本可用,微调即可
第五版(上线后2周):90分以上 —— 老师傅开始说"这个排得比我好"

第五周后:并行运行和信任建立

第五周开始,我们让系统排程和老师傅手工排程并行跑了两周。每天对比两个方案:

并行跑了两周后,厂长决定正式上线。老师傅不再手工排白班了,改为审核系统方案+应对异常。他的说法是:"早该这样了,我每天早上半天的活,现在20分钟看完签字就行了。"

实施中遇到的麻烦和解决办法

麻烦1:微信群消息质量参差不齐

微信机器人在群里抓异常通报,但群里的消息非常杂——有闲聊、有问食堂今天吃什么、有@所有人通知开会。一开始Agent把很多无关消息理解成了生产异常。后面处理方式是:只抓包含特定关键词的消息("缺料""停线""坏了""修好""补料"),并且要求消息发送者在消息末尾加个标记 #生产,否则忽略。

麻烦2:数据更新的时效性问题

ERP里的数据并不是实时的。订单状态、物料入库都有延迟。有几次Agent排好了方案,但实际物料还没到,导致方案无效。解决办法是在Agent A的Prompt里加了一条规则:所有从ERP获取的物料数据,如果距离上次更新时间超过4小时,标记为"可能过期",排程时不作为硬约束,只作为参考。

麻烦3:排程方案太频繁变动

系统刚上线那周,因为不断有异常信息进来,Agent不断调整排程方案。早上8点排好的方案,到10点已经变了3次。生产主管很烦躁——"我刚让工人做好准备了,你又换了!"

后来加了一个策略:每天只在三个时间点重新排程——早上6点(抢修/异常整合后的终版)、中午12点(根据上午进度调整下午排程)、下午5点(预排第二天)。其他时间进来的异常信息只记录,不触发重排,除非达到以下条件之一:(1)某条线停线超过2小时(2)有紧急插单(优先级A级)(3)关键设备故障。这个策略落地后,变动的频率从每天3-5次降到了基本每天一次(早晨那版)。

这个教训挺值得说的:智能排产不是越智能越好。"频繁优化"解决了数学模型的最优性,但忽略了工厂管理的稳定性需求——工人不知道接下来做什么才是更致命的问题。

四、实际效果

系统正式上线运行两个月后,我们汇总了几组数据:

排程时间:从半天缩到20分钟
老师傅以前每天早上花3-4小时手工排程,现在只需要20分钟审核系统方案。如果有插单或物料变更,以前要重新排1-2小时,现在系统5分钟出调整方案。
换线时间:减少约40%
系统通过合理安排产品顺序——把共用物料的产品尽量集中排到一起——大幅减少了Feeder更换次数。以前每天换线18次左右,现在降到10次左右。每次换线45分钟算,每天省出了6个小时的产线有效运行时间。
订单准时交付率:提升明显
排程方案更贴近实际产能,不盲目接单,也不过度承诺。订单按排程节点完成率从上线前的约75%提升到了约90%。加急单的影响面也变小了——以前来一个加急单,老师的做法是手动把所有订单往后推,导致大批订单延迟。系统会计算加急单的最优插入点,找到对全局影响最小的方案。
产能利用率:从68%提升到82%
因为排程更合理,产线等待物料、等待换线的时间大幅减少。而且系统能发现"未被充分利用的产能"——比如5号线(多功能线)之前被认为"速度慢",排产优先级低,但改完排程后发现,很多小批量多品种的订单更适合在5号线做,反而释放了高速线的产能。

当然也有不如预期的地方。比如自动识别微信异常消息的功能,准确率大概在80%左右,剩下的20%需要人工确认。而且系统上线后,偶尔会出现一些"AI无法理解"的情况——比如"今天老板的亲戚工厂急单,必须优先处理"这种人情关系,系统当然不理解。遇到这种情况,操作方式是在群里艾特Agent说"@排产助手 优先处理D0098",Agent会把这个订单的优先级提到A级。

五、我的思考

做完这个项目,几个感受比较深:

排产的核心不是算法,是数据。约束求解和Agent Prompt都是成熟的工具,真正难的是把工厂里散落在Excel、微信、老师傅脑子里的数据整合成结构化信息。如果你还没有把基础数据搭建好,再强的排程算法也是空中楼阁。

"人机协作"比"全自动排产"更实际。一开始我们的目标是"AI全自动排产,人只看结果"。做了两周就发现这是错的——工厂里的变数太多、太微妙,AI抓不到所有信息。后来改成了"AI排方案+人审核微调",效果反而好很多。老师傅现在说"系统帮我做了80%的活,我干那20%需要经验判断的活",我觉得这就是比较好的状态。

从微信群切入是个正确的决定。很多工业数字化项目失败,是因为做了高大上的系统但没人用。我们从工人和管理者每天必用的微信切入,学习成本接近为零。先让用户觉得"有用",再慢慢加功能,而不是一开始就上一整套系统。

把老师傅的经验数字化,比上一套新系统值钱得多。这家厂排产老师傅干了20年,脑子里的经验非常宝贵。但传统做法是他退休了经验也带走了。通过AI Agent把他的隐性知识提取成结构化约束,这件事本身的价值可能比排产优化更大。

六、给你的建议

如果你的工厂也想做智能排产,几点实在的建议:

  1. 先搞清楚你的"数据现状"。不需要完美的ERP、不需要实时的设备数据,但至少要知道哪些数据是可信的、哪些是不可信的。Agent的Prompt里把数据来源和可信度标注清楚,比所有数据都要准确更重要——因为后者根本做不到。
  2. 别一上来就想全自动。先让人工排程和系统排程并行跑两周,让老师傅和系统互相校验。这个阶段发现的约束遗漏会很多,但也正是系统变得靠谱的关键时期。
  3. 从微信或者钉钉切入。建一个群,让AI Agent在群里推送排程方案、接收异常通报。工人不用学新系统,用已有的工具就能和AI协作。
  4. 约束条件的提取需要跟老师傅聊,一个下午不够的话就聊一个礼拜。看起来"很简单"的一个排产决策,背后可能是几十个约束条件。漏掉一个,排出来的方案就是废纸。
  5. 设定合理的排程重算策略。不要每次异常都重排——那会乱套。固定时间段重排+重大异常触发重排,是比较好的折中方案。
  6. 做好"AI不理解人情世故"的准备。工厂里经常有"非理性"的决策需求——老板的朋友的急单、某个客户今天要加量、某个批次需要特别照顾。这些信息AI抓不到,需要人参与。设计系统时要留好"人工干预接口"。

最后说一句:排产这件事,看起来是技术问题——用算法优化排程。实际上它更是一个管理问题——怎么把人的经验转化为系统逻辑、怎么让系统辅助人而不是替代人、怎么在稳定性和灵活性之间找到平衡。技术只是手段,真正让排产变好的,是对工厂现场的理解和对工人习惯的尊重。