GLM-OCR驱动智能Agent自动阅读截图并执行操作你有没有想过如果电脑能自己“看”懂屏幕上的内容然后帮你完成那些重复、繁琐的点击和填写任务那该多省事比如每天都要登录一堆系统、填写格式固定的报表或者处理大量相似的客服工单。这些工作本身不复杂但就是耗时间还容易因为疲劳而出错。现在这个想法可以变成现实了。通过结合视觉识别和大模型的理解能力我们可以构建一个能“看懂”屏幕并“动手”操作的智能助手。今天我们就来聊聊如何用GLM-OCR技术打造一个能自动阅读截图并执行操作的智能Agent。它就像一个坐在你电脑前的虚拟员工看到按钮知道点哪里看到输入框知道填什么帮你把那些机械化的流程自动化。1. 场景与痛点为什么需要“会看”的Agent在办公自动化和流程处理中我们经常遇到一些基于图形界面GUI的重复任务。传统的自动化方案比如基于坐标的脚本或者一些RPA机器人流程自动化工具往往很“脆弱”。只要软件界面稍微改个版按钮位置挪动几个像素或者字体颜色变一下整个自动化流程就可能崩溃。这就是“刚性自动化”的痛点它无法适应变化缺乏真正的“理解”能力。一个理想的智能Agent应该像人一样先“看到”屏幕上的内容理解哪些是按钮、哪些是输入框、哪些是提示文字然后基于理解做出决策和操作。这样即使界面布局变了只要元素的文字标识没变Agent依然能正确工作。GLM-OCR在这里扮演的就是“眼睛”和“初级大脑”的角色。它负责从截图中提取出所有文字信息并将这些信息连同它们的位置交给更上层的“决策大脑”通常是一个大语言模型去分析和规划下一步动作。2. 核心组件构建智能Agent的三驾马车要打造这样一个Agent我们需要三个核心部分协同工作。2.1 眼睛GLM-OCR图像文字识别这是整个系统的感知层。它的任务是把一张屏幕截图转换成结构化的文字信息。这不仅仅是识别出“登录”两个字还要知道这两个字在图片的哪个区域坐标框。这样我们才能知道“登录”按钮在哪里。GLM-OCR在这方面表现不错特别是对中文场景下的各种字体、大小和背景的识别准确率很高。它能把截图里所有的文字块都找出来并告诉我们每个文字块的内容和位置。这一步的输出是一份屏幕内容的“文字地图”。2.2 大脑大语言模型决策规划拿到“文字地图”后就需要一个“大脑”来理解当前屏幕处于什么状态以及接下来该做什么。这就是大语言模型LLM的用武之地。我们把OCR识别出的所有文本以及用户下达的指令比如“帮我登录系统”一起交给LLM。LLM会像人一样阅读这些文本理解界面的构成哦这里有一个“用户名”输入框旁边是“密码”输入框下面是一个“登录”按钮。当前用户名的框里是空的。那么要完成登录指令我需要先输入用户名再输入密码最后点击登录。LLM会输出一个清晰的、步骤化的操作计划。2.3 双手自动化操作执行器计划有了就需要“手”来执行。这部分依赖于操作系统的自动化接口比如Python的pyautogui、pywinauto库或者更底层的Windows API、AppleScript等。执行器接收LLM规划出的具体操作如在坐标(x, y)处点击或在某个区域输入文本“admin”并调用相应的系统指令来模拟鼠标移动、点击、键盘输入等操作从而真正操控软件。3. 实战演练构建一个自动填写网页表单的Agent原型光说不练假把式。我们用一个具体的例子把上面的流程串起来让Agent自动打开一个登录页面并填写表单。假设我们有一个简单的登录页面上面有“用户名”、“密码”输入框和“登录”按钮。我们的目标是让Agent自动完成填写和登录。3.1 第一步环境准备与工具安装首先确保你的Python环境已经就绪。我们需要安装几个关键的库pip install pillow pyautogui opencv-python # 假设GLM-OCR有可用的Python SDK或API这里以安装相关客户端为例 # pip install glm-ocr-clientpillow用于图像处理。pyautogui用于模拟鼠标键盘操作。opencv-python有时用于更精确的图像定位本例中OCR提供坐标可暂不用。glm-ocr-client这里作为示例代表调用GLM-OCR服务的客户端。3.2 第二步让Agent“看见”屏幕我们写一个函数来捕获屏幕并调用OCR服务。这里我们模拟一个OCR识别的结果。import pyautogui import json from PIL import ImageGrab import time def capture_and_ocr(): 捕获全屏并调用OCR识别此处为模拟数据 # 1. 截取全屏 screenshot ImageGrab.grab() screenshot.save(current_screen.png) print(屏幕截图已保存。) # 2. 模拟调用GLM-OCR并返回结果 # 实际应用中这里应该是调用GLM-OCR的API上传图片获取JSON响应 # response glm_ocr_client.analyze(current_screen.png) # ocr_result response[data] # 3. 为了演示我们手动模拟一个OCR识别结果 # 每个元素包括文本内容(text)和边界框坐标(bbox: [左上x, 左上y, 右下x, 右下y]) mock_ocr_data { text_blocks: [ {text: 用户名, bbox: [200, 300, 280, 320]}, {text: 密码, bbox: [200, 350, 240, 370]}, {text: 登录, bbox: [300, 400, 350, 430]}, {text: 欢迎使用测试系统, bbox: [250, 150, 450, 180]} ] } print(OCR识别完成。) return mock_ocr_data # 测试截图与OCR screen_data capture_and_ocr() print(json.dumps(screen_data, indent2, ensure_asciiFalse))运行这段代码它会保存当前屏幕的截图并打印出模拟的OCR识别结果。这个结果列出了屏幕上识别到的所有文字块及其位置。3.3 第三步让Agent“思考”决策接下来我们需要一个“大脑”。这里我们使用大语言模型的API例如GLM大模型来分析OCR结果。由于直接调用API需要密钥我们在代码中模拟其决策过程。核心思路是将用户指令和屏幕文本信息组合成一个提示词Prompt送给LLM让它输出一个JSON格式的操作序列。def plan_actions_with_llm(ocr_data, user_command登录系统): 基于OCR结果和用户指令规划操作步骤此处为逻辑模拟 # 将OCR数据转换成纯文本描述供LLM理解 screen_description 当前屏幕识别到以下文本元素\n for block in ocr_data[text_blocks]: screen_description f- 文本{block[text]} 大致位置{block[bbox]}\n # 构建给LLM的提示词实际调用时发送此提示词 prompt f 你是一个自动化助手。请根据当前屏幕信息和用户指令规划出具体的鼠标键盘操作序列。 {screen_description} 用户指令{user_command} 已知用户名是“admin”密码是“123456”。 请输出一个JSON数组每个元素是一个操作对象。操作类型包括 1. click: 点击。需要字段type: click, text: 目标按钮的文本用于定位。 2. type: 输入文本。需要字段type: type, text: 要输入的内容。 3. press: 按键。需要字段type: press, key: 键名如 enter。 请只输出JSON不要有其他内容。 print(提示词已构建发送给LLM...) # 模拟LLM的响应实际应调用API获取 llm_response [ {type: type, text: admin}, {type: press, key: tab}, {type: type, text: 123456}, {type: click, text: 登录} ] import json action_plan json.loads(llm_response) return action_plan # 测试决策规划 action_plan plan_actions_with_llm(screen_data) print(生成的行动计划) print(json.dumps(action_plan, indent2))这个模拟的LLM返回了一个清晰的计划先输入“admin”按Tab键切换到密码框输入密码最后点击“登录”按钮。3.4 第四步让Agent“动手”执行最后我们需要一个执行器来把文字计划变成真实的操作。这里的关键是如何根据OCR识别出的“文本”找到对应的“坐标”来操作。def execute_actions(ocr_data, action_plan): 根据OCR数据定位元素并执行行动计划 # 创建一个从文本到坐标的映射字典简单匹配实际应用需更鲁棒如模糊匹配 text_to_bbox {block[text]: block[bbox] for block in ocr_data[text_blocks]} for action in action_plan: action_type action[type] print(f执行操作{action}) if action_type click: target_text action[text] if target_text in text_to_bbox: bbox text_to_bbox[target_text] # 计算按钮中心点坐标 center_x (bbox[0] bbox[2]) // 2 center_y (bbox[1] bbox[3]) // 2 pyautogui.click(center_x, center_y) print(f 点击了 {target_text} 在 ({center_x}, {center_y})) time.sleep(0.5) # 操作间稍作停顿 else: print(f 警告未在屏幕上找到文本 {target_text}) elif action_type type: pyautogui.write(action[text]) print(f 输入了文本{action[text]}) time.sleep(0.2) elif action_type press: pyautogui.press(action[key]) print(f 按下了键{action[key]}) time.sleep(0.2) print(所有操作执行完毕) # 执行行动计划注意在实际运行前请确保鼠标光标位置安全 # execute_actions(screen_data, action_plan) print(【安全提示】执行代码已注释。在实际运行前请确保测试环境安全并手动确认坐标。)重要安全提示在真正运行自动化脚本之前务必在测试环境如虚拟机或无关紧要的测试页面中进行。错误的坐标可能导致意料之外的操作。上述代码中的执行行已被注释请谨慎启用。4. 扩展思考让智能Agent更强大上面的原型展示了最基础的“看-想-做”闭环。要让这个Agent真正实用还需要考虑更多更鲁棒的定位OCR的文本匹配可能不准比如“登陸”和“登录”需要模糊匹配或结合图像特征。处理复杂交互下拉框、复选框、右键菜单、拖拽等复杂操作。状态判断与异常处理操作后屏幕状态是否如预期登录失败怎么办需要让Agent具备验证和重试的能力。记忆与学习Agent可以记住成功操作的路径下次遇到类似界面时更快决策。与工作流结合将单个的Agent封装成节点嵌入到更大的自动化工作流中处理多步骤、跨应用的复杂业务。5. 总结通过GLM-OCR与大语言模型的结合我们让电脑程序第一次拥有了接近人类的“视觉理解”能力来处理GUI任务。它不再依赖死板的坐标而是通过“阅读”屏幕来适应变化这为自动化打开了新的大门。从自动填表、数据录入到软件测试、日常办公辅助甚至是游戏内的自动任务这种模式的潜力很大。当然目前这还是一个需要不断打磨的原型在精度、速度和可靠性上还有很长的路要走。但它的方向是令人兴奋的未来那些我们不愿做的重复性电脑操作也许真的可以交给一个善解人意的智能助手去完成。如果你对某个具体场景的自动化有想法不妨基于这个框架尝试搭建起来看看它能为你带来多少效率提升。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。