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亿参数的多模态大模型。简单理解,它同时具备了“眼睛”(视觉理解)和“大脑”(任务规划与推理)的能力,专门训练用来操作图形用户界面。

它的核心工作流程可以概括为:截图 -> 理解 -> 决策 -> 执行

  1. 截图:获取当前MES系统界面的屏幕图像。
  2. 理解:模型“看”这张图,识别出上面的文字(如“生产订单”、“提交”)、UI元素(如输入框、下拉菜单、按钮)以及它们的布局关系。
  3. 决策:结合用户给它的指令(例如:“在‘生产数据录入’界面,将工单A123的完成数量填写为150,良品数填写为145,然后点击提交”),模型推理出下一步应该执行什么动作。动作可以是“点击某个坐标”、“在某个区域输入文字”、“滑动”等。
  4. 执行:通过系统级的自动化工具(如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):

  1. 打开浏览器,导航至MES系统数据录入页。
  2. 在“工单号”输入框,填入指定的工单。
  3. 在“生产数量”输入框,填入数量。
  4. 在“合格数量”输入框,填入良品数。
  5. 在“不合格原因”下拉框(如果有),选择或输入原因代码。
  6. 点击“保存”或“提交”按钮。
  7. 确认系统提示“保存成功”。

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系统的工单创建界面。实现两个孤立系统间简单的数据流转。

如果你也想在自家工厂尝试,我有几个务实建议:

  1. 从最高频、最规则的任务开始:比如每天下班前必做的数据汇总。成功率最高,价值感最 immediate。
  2. 准备一个稳定的测试环境:最好是与生产环境镜像的测试MES系统。避免在正式系统上调试,干扰生产。
  3. 人机协同,而非完全替代:设计流程时,让AI处理90%的标准化步骤,把需要复杂判断、异常处理的10%留给人工干预。例如,当模型遇到一个从未见过的错误弹窗时,可以设置为暂停并通知管理员。
  4. 关注变化管理:最大的阻力可能不是技术,而是人。需要让一线员工理解,这个“数字同事”是来帮他们摆脱枯燥劳动的,而不是来取代他们的。培训他们如何与AI协作,处理AI搞不定的例外情况。

5. 总结

这次将MAI-UI-8B引入制造业MES系统的探索,让我们看到了GUI智能体在工业场景下的巨大潜力。它不像传统的RPA那样“死板”,更像一个有一定理解力和适应力的初级助手。

技术本身还在快速发展,MAI-UI的精准度、对复杂界面的理解能力还有提升空间。但对于制造业那些定义清晰、重复性高的GUI操作来说,它已经是一个相当可用的工具了。核心价值不在于追求百分之百的全自动,而在于它能可靠地承担掉那部分最枯燥、最容易出错的“脏活累活”,把人力释放到更有创造性的工作中去。

部署过程比想象中要平滑,尤其是模型开源后,自己搭建一套测试环境的技术门槛降低了很多。当然,要把它变成7x24小时稳定运行的生产级应用,还需要在工程化、异常监控、流程设计上花不少功夫。但这条路的方向是对的,至少我们亲眼看到了错误率下降90%这个实实在在的结果。

对于制造企业的IT或自动化部门来说,现在可能是一个不错的时机,去小范围评估一下这类技术,看看它能为你的业务带来怎样的效率提升。也许,你的MES系统就差这么一个会“看”会“点”的智能助手了。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐