基于LLM的GUI自动化智能体:从原理到实践
1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目叫“aihoc-copaw-agent”。光看这个名字可能有点摸不着头脑但如果你对AI智能体、自动化工作流或者RPA机器人流程自动化感兴趣那这个项目绝对值得你花时间研究一下。简单来说这是一个基于AI大语言模型LLM驱动的智能体框架它的核心目标是让AI能够像人类一样去理解和操作电脑上的图形用户界面GUI从而实现一系列自动化任务。你可以把它想象成一个“数字员工”能帮你点击按钮、填写表单、浏览网页甚至处理一些本地软件的操作。为什么说它有价值因为传统的自动化工具无论是商业的RPA软件还是开源的脚本工具大多依赖于固定的坐标、图像识别或者DOM元素定位。这种方式在面对界面变化、分辨率调整或者软件更新时往往非常脆弱维护成本很高。而“aihoc-copaw-agent”的思路是让AI去“看”屏幕理解屏幕上有什么比如按钮、输入框、文本然后像人一样“思考”下一步该做什么最后通过模拟鼠标键盘操作去执行。这种基于视觉和语义理解的自动化理论上适应性更强也更接近人类的操作逻辑。它特别适合处理那些没有开放API、或者结构复杂多变的桌面应用和网页任务比如数据录入、报表生成、跨系统信息同步等繁琐重复的工作。2. 核心架构与工作原理拆解2.1 智能体Agent的核心循环这个项目的核心是一个经典的“感知-思考-行动”智能体循环。它并不是一个简单的脚本录制回放工具而是一个具备一定自主决策能力的AI系统。感知Perception智能体首先需要“看到”当前屏幕的状态。这通常通过截图Screenshot来实现。获取到的屏幕图像会被送入一个视觉理解模块。这个模块可能结合了OCR光学字符识别技术来提取屏幕上的文字以及目标检测或图像分割技术来识别界面元素如按钮、图标、输入框的位置和类型。最终系统会将视觉信息转化为一段结构化的文本描述例如“当前窗口标题为‘用户登录’屏幕中央有一个文本输入框标签为‘用户名’其下方有一个标签为‘密码’的密码输入框右侧有一个蓝色的‘登录’按钮。”思考Cognition/Planning拿到对当前屏幕的描述后智能体需要决定下一步做什么。这是大语言模型LLM大显身手的地方。项目会将屏幕描述、用户设定的任务目标例如“登录系统”、以及可能的历史操作记录组合成一个提示词Prompt发送给LLM比如GPT-4、Claude或者本地部署的开源模型。LLM基于其强大的自然语言理解和推理能力分析当前状态与目标之间的差距并生成下一步的具体操作指令。这个指令必须是精确且可执行的例如“将鼠标移动到‘用户名’输入框内单击左键输入文本‘admin’。”行动Action收到LLM生成的操作指令后智能体需要将其转化为对操作系统的实际控制。这依赖于一个动作执行器Action Executor。执行器会解析指令调用操作系统底层的API如Windows的pyautogui、pynput或者跨平台的PyDirectInput来模拟真实的鼠标移动、点击、滚动以及键盘按键、文本输入等操作。执行完毕后循环回到第一步捕捉执行后的新屏幕状态开始下一轮的“感知-思考-行动”。这个循环会持续进行直到LLM判断任务已经完成例如生成了“任务完成”的指令或者达到了预设的步骤上限。2.2 关键技术组件选型解析一个成熟的aihoc-copaw-agent实现通常会涉及以下几个关键的技术栈选型每个选择背后都有其权衡大语言模型LLM这是智能体的“大脑”。选择取决于对成本、速度和隐私的要求。云端API如OpenAI GPT, Anthropic Claude优点在于模型能力强能处理复杂的推理和模糊指令开箱即用。缺点是会产生API调用费用有网络延迟且屏幕截图等敏感信息需要发送到第三方服务器。本地模型如Llama 3, Qwen, DeepSeek优点是完全离线数据隐私有保障无持续使用成本。缺点是对本地算力GPU有要求且小规模模型在复杂任务规划上可能不及顶级云端模型。项目需要提供灵活的模型接入层。视觉理解模块这是智能体的“眼睛”。纯依赖LLM处理图像像素是不现实的需要前置处理。OCR引擎用于提取屏幕上的所有文字及其坐标这是理解界面语义的关键。Tesseract是经典的开源选择但准确率一般PaddleOCR或EasyOCR在中文场景下表现更好商业API如百度、阿里云OCR准确率最高但非免费。UI元素检测仅靠OCR不够还需要识别非文本元素。可以训练一个目标检测模型如YOLO来识别通用控件按钮、输入框、复选框。更高级的方案是直接使用操作系统提供的UI自动化框架如Windows的UIAutomation/AccessibilityAPIs macOS的Accessibility Linux的AT-SPI它们能直接获取控件的类型、名称、状态等结构化信息比纯视觉方案更稳定、信息更丰富。“Copaw”这个名字可能就暗示了结合了“Computer Vision”视觉和“OS Accessibility”可访问性两种途径。动作执行器这是智能体的“手”。需要跨平台且稳定。pyautogui简单易用跨平台但控制精度相对较低且容易被一些反自动化软件检测。pynput提供了更低级别的监听和控制功能更灵活。PyDirectInput模拟DirectInput信号在游戏等对输入精度要求高的场景下比pyautogui更可靠。最佳实践往往是组合使用并根据目标应用类型进行选择。注意在实际开发中直接模拟低级鼠标键盘事件有时会触发应用程序或操作系统的安全限制。对于特别敏感或复杂的应用可能需要考虑在虚拟机环境内运行或者研究应用本身是否提供更友好的自动化接口如COM对象、内部API。3. 从零开始搭建与实操指南假设我们现在要基于这个思路自己动手实现一个简易版的“桌面AI智能体”。下面是一个可行的技术路线和实操步骤。3.1 环境准备与基础依赖安装我们选择Python作为开发语言因为它有丰富的AI和自动化库。首先创建一个干净的虚拟环境并安装核心依赖。# 创建并激活虚拟环境以conda为例 conda create -n copaw_agent python3.10 conda activate copaw_agent # 安装核心自动化与图像处理库 pip install pyautogui opencv-python pillow numpy # 安装OCR引擎这里以PaddleOCR为例它支持中英文且效果不错 pip install paddlepaddle paddleocr # 安装LLM调用库以OpenAI API为例 pip install openai # 可选如果需要更好的控件识别在Windows上可以安装 pip install pywinauto uiautomation对于LLM我们假设使用OpenAI的GPT-4 API。你需要准备一个有效的OPENAI_API_KEY并设置环境变量。3.2 核心模块代码实现我们将项目拆分为几个核心的Python模块。1. 感知模块 (perception.py)这个模块负责捕捉屏幕并生成描述。import cv2 import numpy as np from PIL import ImageGrab from paddleocr import PaddleOCR import pyautogui import json class PerceptionEngine: def __init__(self, use_ocrTrue): self.screen_size pyautogui.size() self.use_ocr use_ocr if use_ocr: # 初始化PaddleOCR使用轻量版模型 self.ocr_engine PaddleOCR(use_angle_clsTrue, langch, use_gpuFalse) # 根据实际情况调整GPU使用 def capture_screen(self, regionNone): 捕获指定区域或全屏的截图 if region: screenshot ImageGrab.grab(bboxregion) else: screenshot ImageGrab.grab() # 转换为OpenCV格式 (BGR) 和 numpy数组 screenshot_cv cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2BGR) return screenshot_cv def analyze_screen(self, image): 分析屏幕图像生成结构化描述 description_parts [] # 1. 使用OCR提取文本信息 if self.use_ocr: ocr_result self.ocr_engine.ocr(image, clsTrue) text_elements [] if ocr_result: for line in ocr_result: for word_info in line: text word_info[1][0] bbox word_info[0] # 四个点的坐标 # 计算粗略的中心点 center_x int(sum([p[0] for p in bbox]) / 4) center_y int(sum([p[1] for p in bbox]) / 4) text_elements.append({ text: text, position: (center_x, center_y) }) # 可选在图像上画出文本框调试用 # cv2.polylines(image, [np.array(bbox, dtypenp.int32)], True, (0, 255, 0), 2) if text_elements: # 将文本按位置粗略分组例如按行 # 这里简化处理直接列出所有识别到的文本 text_desc 屏幕上识别到的文字包括 .join([f‘{elem[‘text’]}’ for elem in text_elements[:10]]) # 只取前10个避免过长 if len(text_elements) 10: text_desc f 等共{len(text_elements)}处文字。 description_parts.append(text_desc) # 2. 简单的颜色/区域检测示例寻找可能的按钮区域 # 这里可以加入更复杂的CV逻辑比如模板匹配找图标颜色过滤找突出按钮等 # 例如寻找蓝色的矩形区域假设是按钮 hsv_image cv2.cvtColor(image, cv2.COLOR_BGR2HSV) lower_blue np.array([100, 150, 50]) upper_blue np.array([140, 255, 255]) blue_mask cv2.inRange(hsv_image, lower_blue, upper_blue) contours, _ cv2.findContours(blue_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) button_candidates [] for cnt in contours: area cv2.contourArea(cnt) if area 500: # 过滤太小的区域 x, y, w, h cv2.boundingRect(cnt) button_candidates.append((x, y, w, h)) if button_candidates: description_parts.append(f检测到约{len(button_candidates)}个显著的蓝色矩形区域可能为按钮。) # 3. 组合描述 if not description_parts: final_description 屏幕内容较为空白或未识别到显著元素。 else: final_description .join(description_parts) # 返回描述和可能的元素数据供后续步骤使用 return { description: final_description, text_elements: text_elements if self.use_ocr else [], candidate_buttons: button_candidates, screen_size: self.screen_size } # 示例使用 if __name__ __main__: pe PerceptionEngine() img pe.capture_screen() analysis pe.analyze_screen(img) print(屏幕分析结果, analysis[description])2. 思考与规划模块 (planner.py)这个模块负责与LLM交互生成操作指令。import openai import os import json from typing import List, Dict class LLMPlanner: def __init__(self, api_keyNone, modelgpt-4-turbo-preview): self.client openai.OpenAI(api_keyapi_key or os.getenv(OPENAI_API_KEY)) self.model model # 定义智能体可以执行的动作类型 self.available_actions [CLICK, DOUBLE_CLICK, RIGHT_CLICK, TYPE, PRESS_KEY, SCROLL, WAIT, FINISH] def generate_plan(self, screen_analysis: Dict, task_goal: str, history: List[str] None) - Dict: 根据屏幕分析、任务目标和历史生成下一步动作计划。 返回一个包含动作类型和参数的字典。 # 构建Prompt system_prompt 你是一个控制电脑桌面的AI助手。你需要根据用户的目标和当前屏幕的描述决定下一步做什么。 你可以执行的操作包括 - CLICK [x] [y]: 在屏幕坐标(x, y)处单击左键。 - DOUBLE_CLICK [x] [y]: 双击。 - RIGHT_CLICK [x] [y]: 右键单击。 - TYPE [text]: 输入一段文本当前焦点需在输入框。 - PRESS_KEY [key_name]: 按下单个键如‘enter’, ‘tab’, ‘esc’。 - SCROLL [amount]: 向上滚动(正数)或向下滚动(负数)。 - WAIT [seconds]: 等待N秒。 - FINISH: 任务完成停止。 请严格按上述格式输出只输出一个动作指令。坐标x和y是整数。确保你的操作是达成目标所必需且合理的。 当前屏幕信息如下 user_prompt f用户目标{task_goal}\n user_prompt f当前屏幕描述{screen_analysis[description]}\n if screen_analysis.get(text_elements): user_prompt 识别到的文字及大致位置 str([f{e[text]}{e[position]} for e in screen_analysis[text_elements][:5]]) \n if history: user_prompt f操作历史最近3步{history[-3:]}\n user_prompt 请输出下一个动作指令 try: response self.client.chat.completions.create( modelself.model, messages[ {role: system, content: system_prompt}, {role: user, content: user_prompt} ], temperature0.1, # 低随机性确保指令稳定 max_tokens100 ) action_text response.choices[0].message.content.strip() return self._parse_action(action_text, screen_analysis) except Exception as e: print(f调用LLM失败{e}) return {action: WAIT, params: {seconds: 5}} def _parse_action(self, action_text: str, screen_analysis: Dict) - Dict: 解析LLM返回的文本动作指令 parts action_text.split() if not parts: return {action: WAIT, params: {seconds: 2}} action_type parts[0].upper() if action_type not in self.available_actions: print(f无法识别的动作{action_type} 改为等待) return {action: WAIT, params: {seconds: 2}} params {} if action_type in [CLICK, DOUBLE_CLICK, RIGHT_CLICK]: if len(parts) 3: try: params[x] int(parts[1]) params[y] int(parts[2]) except ValueError: # 如果LLM没给坐标尝试从识别的文本中匹配 target_text .join(parts[1:]) coords self._find_text_coordinates(target_text, screen_analysis.get(text_elements, [])) if coords: params[x], params[y] coords else: # 仍然找不到点击屏幕中心 params[x], params[y] screen_analysis[screen_size].width // 2, screen_analysis[screen_size].height // 2 elif action_type TYPE: params[text] .join(parts[1:]) elif action_type PRESS_KEY: params[key] parts[1].lower() elif action_type SCROLL: params[amount] int(parts[1]) elif action_type WAIT: params[seconds] float(parts[1]) if len(parts) 1 else 2.0 elif action_type FINISH: pass return {action: action_type, params: params} def _find_text_coordinates(self, target_text: str, text_elements: List[Dict]) - tuple: 在识别的文本元素中模糊查找目标文本返回其坐标 if not text_elements: return None for elem in text_elements: if target_text.lower() in elem[text].lower(): return elem[position] # 如果没找到完全匹配尝试找包含关系 for elem in text_elements: if any(word in elem[text].lower() for word in target_text.lower().split()): return elem[position] return None3. 行动执行模块 (executor.py)这个模块负责将计划转化为实际动作。import pyautogui import time import pyperclip # 用于处理可能包含中文的文本输入 class ActionExecutor: def __init__(self): # 安全设置在屏幕左上角快速移动鼠标到(0,0)可以终止脚本 pyautogui.FAILSAFE True # 每次动作后暂停0.5秒避免操作过快 pyautogui.PAUSE 0.5 def execute(self, plan: Dict): action plan.get(action) params plan.get(params, {}) if action CLICK: x, y params.get(x, 0), params.get(y, 0) print(f执行点击({x}, {y})) pyautogui.click(x, y) elif action DOUBLE_CLICK: x, y params.get(x, 0), params.get(y, 0) pyautogui.doubleClick(x, y) elif action RIGHT_CLICK: x, y params.get(x, 0), params.get(y, 0) pyautogui.rightClick(x, y) elif action TYPE: text params.get(text, ) print(f输入文本{text}) # pyautogui.write对中文支持不好使用pyperclip复制粘贴 original_clipboard pyperclip.paste() pyperclip.copy(text) pyautogui.hotkey(ctrl, v) # 或 command, v for Mac time.sleep(0.2) pyperclip.copy(original_clipboard) # 恢复剪贴板可选 elif action PRESS_KEY: key params.get(key) pyautogui.press(key) elif action SCROLL: amount params.get(amount, 0) pyautogui.scroll(amount) elif action WAIT: seconds params.get(seconds, 1) print(f等待 {seconds} 秒...) time.sleep(seconds) elif action FINISH: print(任务完成指令收到。) return False # 通知主循环停止 else: print(f未知动作{action} 跳过) return True # 继续循环4. 主控循环 (main.py)将以上模块串联起来。from perception import PerceptionEngine from planner import LLMPlanner from executor import ActionExecutor import time class CopawAgent: def __init__(self, llm_api_key, llm_modelgpt-4-turbo-preview): self.perception PerceptionEngine(use_ocrTrue) self.planner LLMPlanner(api_keyllm_api_key, modelllm_model) self.executor ActionExecutor() self.history [] # 记录动作历史 self.max_steps 50 # 防止无限循环 def run_task(self, task_goal: str): print(f开始执行任务{task_goal}) step 0 while step self.max_steps: step 1 print(f\n--- 步骤 {step} ---) # 1. 感知 print(捕获并分析屏幕...) screenshot self.perception.capture_screen() screen_analysis self.perception.analyze_screen(screenshot) # 2. 思考 print(请求LLM生成下一步计划...) plan self.planner.generate_plan(screen_analysis, task_goal, self.history) print(fLLM计划{plan}) # 3. 行动 should_continue self.executor.execute(plan) self.history.append(str(plan)) if not should_continue or plan.get(action) FINISH: print(任务结束。) break # 操作后稍作等待让界面反应 time.sleep(1) if step self.max_steps: print(达到最大步骤限制任务强制终止。) if __name__ __main__: # 请替换为你自己的API Key API_KEY your-openai-api-key-here agent CopawAgent(API_KEY) # 示例任务打开记事本并输入Hello World # 注意这个任务需要你提前手动把记事本打开并放在前台因为我们的智能体还没有“打开程序”的能力。 # 更复杂的任务需要扩展动作集如启动程序、切换窗口等。 task 在记事本中输入‘你好AI智能体’并保存 agent.run_task(task)4. 实战演练以“自动登录网站”为例让我们用一个更具体的例子来测试这个框架自动化登录一个已知的网站例如一个测试用的登录页面。任务目标打开浏览器假设已打开并导航到登录页在用户名框输入“test_user”在密码框输入“test_pass”然后点击登录按钮。准备工作确保你的浏览器已经打开并停留在目标登录页面。调整main.py中的任务描述。运行脚本前将鼠标移到安全位置如角落因为pyautogui会开始控制鼠标。修改main.py中的任务task “在当前的网页登录界面中找到用户名输入框输入‘test_user’然后找到密码输入框输入‘test_pass’最后找到‘登录’或‘Sign In’按钮并点击。” agent.run_task(task)预期执行流程理想情况步骤1智能体截屏OCR识别出屏幕上有“用户名”、“密码”、“登录”等文字。LLM根据目标决定点击“用户名”附近的坐标。执行器执行点击。步骤2智能体再次截屏发现光标在输入框闪烁可能通过检测高亮或光标图像但我们的简单OCR可能无法感知LLM会依赖历史“我刚点击了用户名框”来推断当前焦点。LLM生成TYPE test_user指令。执行器输入文本。步骤3LLM根据目标生成PRESS_KEY tab指令切换到密码框或者直接生成CLICK [密码坐标]。执行器执行。步骤4LLM生成TYPE test_pass指令。执行器输入密码注意实际中密码框可能屏蔽OCR但LLM可以基于上下文推断。步骤5LLM生成CLICK [登录按钮坐标]指令。执行器点击任务完成。实操心得与注意事项坐标精度问题OCR返回的文本坐标是边界框的中心点不一定正好是可点击区域。实际应用中可能需要加入一个偏移量或者结合UI自动化框架获取更精确的控件位置。等待与稳定性网络、软件响应速度会导致操作后界面状态变化有延迟。必须在动作之间加入合理的WAIT或者更智能地让感知模块检测到某个预期元素如“登录成功”的提示出现后再进行下一步。我们的循环中固定的1秒等待可能不够或过多。错误处理与重试LLM可能会生成不合理指令如点击空白处。系统需要具备一定的容错和重试机制比如当点击后屏幕状态未发生预期变化时重新分析并尝试替代方案。隐私与安全切勿将此智能体用于处理真实密码、敏感个人信息或金融操作。所有操作应在测试环境进行。截屏内容若发送至云端LLM需谨慎评估风险。5. 常见问题排查与性能优化指南在实际运行中你肯定会遇到各种问题。下面是一些常见坑点及其解决方案。问题现象可能原因排查与解决思路LLM返回的指令格式错误或无法解析Prompt设计不够清晰LLM未遵循指令格式或LLM能力不足。1.强化System Prompt在Prompt中更严格地规定输出格式使用示例Few-shot Learning。2.后处理纠错在_parse_action函数中加入更强大的纠错逻辑比如正则表达式匹配。3.更换或微调模型尝试更强的模型如GPT-4或对开源模型进行指令微调。OCR识别率低特别是对复杂UI或特殊字体OCR引擎在特定场景下效果不佳屏幕分辨率/缩放比例影响。1.更换OCR引擎尝试EasyOCR、PaddleOCR的不同模型或使用商业API。2.图像预处理对截图进行灰度化、二值化、降噪、锐化等处理提升OCR输入质量。3.启用UI自动化优先使用pywinauto或uiautomation获取控件文本这比视觉OCR稳定得多。点击位置不准总是点偏坐标计算有误屏幕缩放如Windows 125%导致坐标映射错误。1.校准坐标系统确保所有坐标都基于相同的基准通常是原始屏幕分辨率。pyautogui.size()获取的是物理分辨率。2.使用相对坐标或控件句柄放弃绝对坐标使用UI自动化库直接通过控件句柄进行操作。3.加入随机偏移在目标坐标附近加入微小随机数模拟人手操作避免被检测为机器人。执行速度慢无法满足实时性要求截屏、OCR、LLM调用均为耗时操作循环等待时间过长。1.优化感知频率不是每一步都需要全屏高清OCR。可以缓存界面状态只在预期发生变化时进行深度分析。2.并行与异步将截屏、OCR识别、LLM调用设计为异步流水线。3.本地轻量模型使用更小的本地视觉模型和LLM牺牲少量精度换取速度。4.减少截图区域只截取屏幕中可能发生变化的区域而非全屏。任务陷入死循环或逻辑混乱LLM对任务状态理解出现偏差历史上下文窗口不足。1.丰富状态描述在给LLM的Prompt中不仅提供当前屏幕描述还提供更结构化的任务进度摘要。2.设置步骤限制和超时就像我们代码中的max_steps必须要有强制退出机制。3.引入验证点在关键步骤后设计检查点例如检测“登录成功”字样只有验证通过才继续否则触发修正或报警。在特定应用如游戏、虚拟机中无法操作底层输入模拟被拦截或应用运行在特殊图形层。1.更换输入库尝试使用PyDirectInput替代pyautogui。2.以管理员身份运行某些应用需要提升权限。3.在虚拟机内部运行Agent让Agent直接运行在目标应用所在的环境内。性能优化高级技巧状态缓存与差分更新不要每次都全量分析屏幕。可以缓存上一次识别出的UI元素树本次只分析发生变化的部分极大减少LLM需要处理的信息量。技能Skill库将常见的原子操作序列如“登录”、“填写表单”、“下载文件”封装成预定义的“技能”。LLM不再规划每一个低级点击而是调用高级技能并传入参数。这能大幅提高可靠性和效率。混合规划结合基于规则的自动化对于已知的、稳定的界面部分和基于LLM的规划对于未知的、动态的部分。例如对于自家公司的ERP系统登录流程可以完全用脚本写好对于偶尔需要访问的外部网站再用LLM来应对。6. 项目扩展方向与生态展望一个基础的aihoc-copaw-agent只是起点。围绕这个核心思想可以衍生出许多强大的扩展和应用构建起一个完整的智能体生态。1. 多模态感知增强当前的感知主要依赖OCR和简单的CV。可以集成更强大的多模态大模型如GPT-4V直接让LLM“看”截图理解更复杂的图标、图表、布局和视觉上下文。这样不仅能识别“按钮”还能理解“这个红色的感叹号图标意味着错误”或者“这个进度条已经完成了70%”。2. 记忆与学习能力让智能体具备记忆能力记住不同应用的操作模式、自己的成功和失败经验。可以通过向量数据库存储历史交互屏幕片段、动作、结果当下次遇到类似界面时优先从记忆中检索成功的操作序列而不是每次都从头推理实现越用越聪明。3. 分层任务分解面对“帮我季度报税”这样的复杂高层级任务智能体需要能自动将其分解为“打开税务局网站”、“登录”、“找到报表下载入口”、“填写收入数据”等一系列子任务。这需要更强大的任务规划LLM或者引入分层任务网络HTN等经典AI规划技术。4. 人机协作与示教学习最自然的扩展是允许“人机协作”。用户可以通过语音或文字实时给智能体下达指令、纠正其错误“不对点旁边那个蓝色的按钮”。智能体记录这些纠正并用于优化后续的行为。更进一步可以支持“示教学习”用户手动操作一遍流程智能体录制屏幕和操作序列自动归纳出可复用的脚本或技能。5. 云端智能体服务将核心的感知-规划能力封装成云服务用户只需通过浏览器插件或轻量级客户端上传目标即可在云端完成自动化任务。这可以降低用户本地计算资源的需求并方便集中更新模型和能力。从我个人的实验来看基于LLM的GUI自动化是一条充满潜力的道路但它目前仍处于“有趣但尚未完全可靠”的阶段。最大的挑战在于稳定性和成本。LLM的“幻觉”会导致它偶尔做出令人啼笑皆非的操作而频繁调用GPT-4 API的成本对于复杂任务来说也不容忽视。因此现阶段的落地更适合作为人类专家的辅助工具处理那些规则明确、但步骤繁琐的半自动化场景或者作为快速原型工具为传统RPA生成初始脚本。随着多模态模型能力的提升和本地小模型的进化这条路会越走越宽。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2573189.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!