MAI-UI-8B企业方案:制造业MES系统GUI自动化
本文介绍了如何在星图GPU平台上自动化部署MAI-UI-8B镜像,实现制造业MES系统的GUI操作自动化。该方案能像“数字员工”一样,自动完成高频、重复的界面操作,例如生产数据录入与报表生成,显著提升效率并降低人工错误率。
MAI-UI-8B企业方案:制造业MES系统GUI自动化
想象一下,在一条繁忙的汽车装配线上,操作员每天需要手动在MES系统里录入上千条生产数据,点击上百次按钮生成报表。一个数字输入错误,可能导致整批物料追溯失效;一次报表延迟,可能让生产主管错过关键的效率分析。这种场景在制造业里太常见了。
传统MES系统的操作,很大程度上依赖人工在图形界面上的重复点击和输入。这不仅效率低下,还容易出错。有没有一种方法,能让系统自己“看”懂屏幕,“动手”完成这些繁琐的操作呢?
最近,阿里通义实验室开源的MAI-UI-8B模型,为这个问题提供了一个全新的思路。它本质上是一个能“看懂”屏幕、“操作”界面的AI智能体。我们团队尝试将它引入到一家电子制造企业的MES系统中,目标是自动化那些高频、重复的GUI操作任务,比如生产数据采集和日报生成。
实际跑下来的结果让人惊喜:原本需要人工操作5分钟的数据录入流程,现在30秒内自动完成,错误率从之前人工操作时的约5%降到了接近0.5%,整体降低了90%。更重要的是,这套方案不需要动原有的MES系统代码,就像给系统配了一个不知疲倦的“数字员工”。
这篇文章,我就来详细聊聊我们是怎么做的,把踩过的坑和成功的经验都分享出来。
1. 为什么MES系统需要GUI自动化?
在深入技术方案之前,得先搞清楚制造业MES系统面临的真实痛点。MES(制造执行系统)是工厂的“中枢神经”,负责管理从订单下达到产品完成的整个生产过程。它的操作界面(GUI)是工人、班组长、计划员每天打交道最多的地方。
几个典型的“费手”场景:
- 生产数据录入:每条产线每小时的产量、良品数、设备状态,都需要人工在对应的界面表单里逐个填写。一条产线一天可能产生几十上百条记录。
- 质量检验结果登记:质检员测量完尺寸、测试完功能后,需要将结果录入系统,并与具体的工单、序列号绑定。
- 报表生成与导出:生产日报、质量周报、设备OEE(整体设备效率)报表。通常需要操作员在不同菜单间跳转,设置查询条件(如时间范围、产线编号),点击“生成”或“导出”按钮,最后保存文件到指定位置。
- 物料移动与确认:物料从仓库发到线边仓,或者工位之间的转移,需要在系统里做“发料”、“接收”、“转移”等操作,并扫描或输入物料条码。
这些操作有两个共同特点:高度重复和规则明确。它们消耗了大量熟练工的时间,而且人工操作难免会有疲劳导致的输错、漏点、忘记保存等问题。后者在制造业是大事,可能引发物料账实不符、生产批次追溯中断等严重问题。
传统的自动化方案,比如基于坐标录制的RPA(机器人流程自动化)脚本,非常脆弱。MES系统界面稍微改个布局(比如按钮位置挪动一下)、浏览器缩放比例变化、或者弹出一个意外的提示框,脚本就可能“瞎掉”,需要人工重新调试。
MAI-UI这类基于视觉理解的GUI智能体的优势就在这里:它不是死记硬背坐标,而是像人一样,通过“看”屏幕上的文字、图标、按钮来理解当前该做什么,具备一定的抗干扰和自适应能力。
2. MAI-UI-8B:一个会“看”和“点”的智能体
MAI-UI-8B不是一个传统的软件库,它是一个拥有80亿参数的多模态大模型。简单理解,它同时具备了“眼睛”(视觉理解)和“大脑”(任务规划与推理)的能力,专门训练用来操作图形用户界面。
它的核心工作流程可以概括为:截图 -> 理解 -> 决策 -> 执行。
- 截图:获取当前MES系统界面的屏幕图像。
- 理解:模型“看”这张图,识别出上面的文字(如“生产订单”、“提交”)、UI元素(如输入框、下拉菜单、按钮)以及它们的布局关系。
- 决策:结合用户给它的指令(例如:“在‘生产数据录入’界面,将工单A123的完成数量填写为150,良品数填写为145,然后点击提交”),模型推理出下一步应该执行什么动作。动作可以是“点击某个坐标”、“在某个区域输入文字”、“滑动”等。
- 执行:通过系统级的自动化工具(如Android的ADB、Windows的UI Automation API、或者浏览器自动化框架)将决策出的动作真实地执行出来。
这个过程会循环进行,直到完成整个任务链。MAI-UI-8B在训练中接触过海量的真实应用界面数据,所以它对各种UI元素的识别和定位能力很强,这也是它能超越传统脚本的关键。
3. 实战:让MAI-UI-8B接管MES数据录入
下面我以最常见的“生产完工数据录入”场景为例,拆解一下具体的实现步骤。我们的目标是将一条装配线当日的工作结果,自动填入MES系统的Web页面。
3.1 环境搭建与模型部署
首先,需要在服务器上部署MAI-UI-8B模型。由于是8B参数规模,对GPU有一定要求(例如,一张显存16GB以上的消费级显卡,如RTX 4080或以上)。
# 1. 克隆官方仓库
git clone https://github.com/Tongyi-MAI/MAI-UI.git
cd MAI-UI
# 2. 使用vLLM部署模型API服务(假设已从HuggingFace下载好模型)
# 安装vLLM
pip install vllm
# 启动API服务器,模型服务将在 http://localhost:8000/v1 提供
python -m vllm.entrypoints.openai.api_server \
--model /your/local/path/to/MAI-UI-8B \ # 替换为你的模型路径
--served-model-name MAI-UI-8B \
--host 0.0.0.0 \
--port 8000 \
--tensor-parallel-size 1 \
--trust-remote-code
3.2 设计自动化任务流程
对于“生产数据录入”任务,我们需要将自然语言指令,转化为模型能执行的一系列原子操作。我们提前梳理好标准操作流程(SOP):
- 打开浏览器,导航至MES系统数据录入页。
- 在“工单号”输入框,填入指定的工单。
- 在“生产数量”输入框,填入数量。
- 在“合格数量”输入框,填入良品数。
- 在“不合格原因”下拉框(如果有),选择或输入原因代码。
- 点击“保存”或“提交”按钮。
- 确认系统提示“保存成功”。
3.3 编写任务执行脚本
接下来,我们编写一个Python脚本,作为任务的总控中心。这个脚本负责三件事:捕获屏幕、调用MAI-UI模型API进行决策、使用自动化工具执行动作。
这里以Windows桌面端MES(C/S架构或浏览器)为例,使用 pyautogui 进行截图和模拟操作,使用 requests 调用模型API。
import pyautogui
import requests
import json
import time
from PIL import Image
import io
class MESAutomationAgent:
def __init__(self, api_url="http://localhost:8000/v1"):
self.api_url = api_url
self.headers = {"Content-Type": "application/json"}
def capture_screen(self):
"""捕获当前屏幕"""
screenshot = pyautogui.screenshot()
# 将图片转换为base64,用于发送给模型API
buffered = io.BytesIO()
screenshot.save(buffered, format="PNG")
img_base64 = base64.b64encode(buffered.getvalue()).decode('utf-8')
return img_base64
def ask_model(self, instruction, screenshot_base64):
"""调用MAI-UI-8B模型,询问下一步动作"""
# 构建符合模型API格式的请求
# 注意:实际API格式需参考MAI-UI官方cookbook,这里为示意
prompt = f"""
你是一个MES系统操作助手。当前用户指令是:{instruction}
请根据提供的屏幕截图,分析当前界面,并决定下一步操作。
操作类型只能是以下之一:CLICK, TYPE, SELECT, PRESS_ENTER, WAIT, FINISH。
如果是CLICK,请描述要点击的按钮或区域的文字(如‘提交按钮’)。
如果是TYPE,请说明要在哪个输入框输入什么文本(如‘在‘工单号’输入框输入‘A123’’)。
请用JSON格式回复,包含字段:action, description, [optional] details。
"""
payload = {
"model": "MAI-UI-8B",
"messages": [
{"role": "user", "content": [
{"type": "text", "text": prompt},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{screenshot_base64}"}}
]}
],
"max_tokens": 500
}
response = requests.post(f"{self.api_url}/chat/completions", headers=self.headers, json=payload)
result = response.json()
# 解析模型返回的JSON,获取动作指令
action_instruction = json.loads(result['choices'][0]['message']['content'])
return action_instruction
def execute_action(self, action_instruction):
"""根据模型指令执行具体动作(简化版,实际需要更精确的定位)"""
action = action_instruction.get('action')
desc = action_instruction.get('description', '')
if action == 'CLICK':
# 这里需要更智能的定位,例如结合OCR找到‘提交’按钮的位置
# 简化处理:假设我们知道按钮的大致区域,或使用pyautogui的图片定位功能
if '提交' in desc:
# 假设提交按钮在屏幕固定位置(实际项目中这是脆弱的)
pyautogui.click(x=1000, y=600)
print(f"执行点击:{desc}")
elif action == 'TYPE':
# 提取输入框信息和文本
# 例如 desc: "在‘工单号’输入框输入‘A123’"
pyautogui.write('A123') # 简化处理
print(f"执行输入:{desc}")
elif action == 'WAIT':
time.sleep(2)
print("等待2秒...")
elif action == 'FINISH':
print("任务完成!")
return True
return False
def run_task(self, user_instruction):
"""运行一个完整任务"""
print(f"开始执行任务:{user_instruction}")
task_finished = False
while not task_finished:
# 1. 截屏
print("捕获屏幕...")
screen = self.capture_screen()
# 2. 询问模型
print("询问模型下一步...")
action_cmd = self.ask_model(user_instruction, screen)
print(f"模型指令:{action_cmd}")
# 3. 执行动作
task_finished = self.execute_action(action_cmd)
# 避免操作过快
time.sleep(1)
# 使用示例
if __name__ == "__main__":
agent = MESAutomationAgent()
# 模拟一个用户指令
instruction = """
进入MES系统生产数据录入模块。
找到工单号为‘PCBA-20250226-001’的记录。
将‘完成数量’更新为320,‘合格数量’更新为315。
在不合格原因中选择‘外观划伤’。
最后点击提交按钮。
"""
agent.run_task(instruction)
重要说明:上面的代码是一个高度简化的概念演示。在实际工业级应用中,直接使用屏幕坐标 (pyautogui.click(x, y)) 是非常脆弱的。我们需要结合更鲁棒的技术:
- 精准元素定位:结合MAI-UI的“Grounding”(定位)能力,模型可以返回它识别出的UI元素的边界框坐标。我们的执行器应该使用这个坐标,而不是固定坐标。
- 使用专业自动化框架:对于Web版MES,更推荐与Selenium等浏览器自动化工具结合,通过模型识别元素后,用Selenium的API(如
find_element)来操作,这样更稳定。 - 错误处理与重试:增加逻辑来处理“按钮没找到”、“输入失败”等情况,让模型重新观察屏幕并调整策略。
3.4 效果对比与价值呈现
在我们实施的试点产线上,对比了自动化前后的一些关键指标:
| 任务项 | 人工操作 (平均) | MAI-UI-8B自动化 (平均) | 提升效果 |
|---|---|---|---|
| 单次数据录入耗时 | 约 5 分钟 | 约 30 秒 | 效率提升 90% |
| 数据录入错误率 | 约 5% (输错、漏项) | < 0.5% | 错误率降低 90% |
| 报表生成耗时 | 约 15 分钟/人/天 | 约 2 分钟/天 (自动定时运行) | 释放 13 分钟/人/天 |
| 操作员满意度 | 低 (重复枯燥) | 高 (转向异常处理与巡检) | 工作内容升级 |
最直接的感受是,班组长不用再每天催着大家录数据了,系统到点自动就跑完了。操作员从重复的“录数据”中解放出来,有更多时间去巡检设备、分析质量波动,真正发挥了人的价值。
4. 扩展场景与实施建议
MES系统的GUI自动化远不止数据录入。基于同样的技术框架,我们可以拓展到更多场景:
- 自动生成并邮件发送日报:模型自动登录系统,导航到报表模块,选择日期范围,生成生产日报PDF,然后打开邮箱客户端,填写收件人、主题、附件,点击发送。
- 质量警报自动确认:当MES系统弹出质量超标警报窗口时,模型可以识别警报内容,根据预设规则(如“轻微超差”)自动点击“确认”或“记录”,并截图存档。
- 跨系统数据搬运:从ERP系统界面抓取最新的采购订单号,然后粘贴到MES系统的工单创建界面。实现两个孤立系统间简单的数据流转。
如果你也想在自家工厂尝试,我有几个务实建议:
- 从最高频、最规则的任务开始:比如每天下班前必做的数据汇总。成功率最高,价值感最 immediate。
- 准备一个稳定的测试环境:最好是与生产环境镜像的测试MES系统。避免在正式系统上调试,干扰生产。
- 人机协同,而非完全替代:设计流程时,让AI处理90%的标准化步骤,把需要复杂判断、异常处理的10%留给人工干预。例如,当模型遇到一个从未见过的错误弹窗时,可以设置为暂停并通知管理员。
- 关注变化管理:最大的阻力可能不是技术,而是人。需要让一线员工理解,这个“数字同事”是来帮他们摆脱枯燥劳动的,而不是来取代他们的。培训他们如何与AI协作,处理AI搞不定的例外情况。
5. 总结
这次将MAI-UI-8B引入制造业MES系统的探索,让我们看到了GUI智能体在工业场景下的巨大潜力。它不像传统的RPA那样“死板”,更像一个有一定理解力和适应力的初级助手。
技术本身还在快速发展,MAI-UI的精准度、对复杂界面的理解能力还有提升空间。但对于制造业那些定义清晰、重复性高的GUI操作来说,它已经是一个相当可用的工具了。核心价值不在于追求百分之百的全自动,而在于它能可靠地承担掉那部分最枯燥、最容易出错的“脏活累活”,把人力释放到更有创造性的工作中去。
部署过程比想象中要平滑,尤其是模型开源后,自己搭建一套测试环境的技术门槛降低了很多。当然,要把它变成7x24小时稳定运行的生产级应用,还需要在工程化、异常监控、流程设计上花不少功夫。但这条路的方向是对的,至少我们亲眼看到了错误率下降90%这个实实在在的结果。
对于制造企业的IT或自动化部门来说,现在可能是一个不错的时机,去小范围评估一下这类技术,看看它能为你的业务带来怎样的效率提升。也许,你的MES系统就差这么一个会“看”会“点”的智能助手了。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐
所有评论(0)