当前位置: 首页 > article >正文

基于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生成初始脚本。随着多模态模型能力的提升和本地小模型的进化这条路会越走越宽。

相关文章:

基于LLM的GUI自动化智能体:从原理到实践

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目,叫“aihoc-copaw-agent”。光看这个名字,可能有点摸不着头脑,但如果你对AI智能体、自动化工作流或者RPA(机器人流程自动化)感兴趣,那这个项目绝…...

语雀Lake文档智能解析引擎:解锁知识资产跨平台流动新范式

语雀Lake文档智能解析引擎:解锁知识资产跨平台流动新范式 【免费下载链接】YuqueExportToMarkdown 将语雀导出的lake文件转为markdown 项目地址: https://gitcode.com/gh_mirrors/yu/YuqueExportToMarkdown 在数字化协作的浪潮中,企业知识资产的流…...

保姆级教程:在Windows上用RWKV-Runner零代码启动本地大模型(CPU/GPU通用)

保姆级教程:在Windows上用RWKV-Runner零代码启动本地大模型(CPU/GPU通用) 对于许多对AI技术感兴趣的朋友来说,想要体验大语言模型的魅力,却常常被复杂的安装配置过程劝退。今天,我们就来彻底解决这个问题—…...

别再手动画样本点了!用GEE+随机森林,5步搞定北京2023年土地利用分类

5步云端自动化:基于GEE与随机森林的北京土地利用高效分类指南 当遥感初学者面对土地利用分类任务时,最头疼的莫过于在传统软件中手动勾绘数百个样本点。我曾见过一位研究生在ArcGIS前坐了整整三天,只为标注足够数量的训练样本——这种低效方式…...

别再混淆了!5分钟讲清辐射度、光度与色度学对游戏画面到底有啥用

别再混淆了!5分钟讲清辐射度、光度与色度学对游戏画面到底有啥用 当你在Unity中调整点光源的Intensity参数时,是否思考过这个数字背后的物理学含义?为什么HDR渲染要使用nit(尼特)作为亮度单位?PBR材质中的a…...

别再复制粘贴了!用Rime小狼毫打造你的专属拼音输入方案(附完整配置包)

告别机械复制:用Rime打造高效拼音输入工作流 在对外汉语教学或学术写作中,频繁输入带声调的拼音是许多专业人士的日常痛点。当一位语言教师需要准备50页教材时,传统复制粘贴或特殊符号插入的方式会消耗大量时间。Rime输入法的开源特性让我们能…...

保姆级教程:在Windows上用VSCode+DevEco Device Tool远程编译鸿蒙Hi3861源码(附Python环境避坑指南)

跨平台鸿蒙开发实战:WindowsVSCode远程操控Ubuntu编译Hi3861全指南 当Windows遇上Linux,当本地编辑器邂逅远程服务器,鸿蒙开发便有了全新的打开方式。作为一名长期在嵌入式领域摸爬滚打的开发者,我深刻理解环境配置这个"拦路…...

PyMacroRecord 1.4.0:自动化办公的终极解放者,三步告别重复劳动

PyMacroRecord 1.4.0:自动化办公的终极解放者,三步告别重复劳动 【免费下载链接】PyMacroRecord Free and Open Source Macro Recorder with a modern GUI using Python 项目地址: https://gitcode.com/gh_mirrors/py/PyMacroRecord 你是否厌倦了…...

三步构建你的微信自动化助手:WechatBot零基础部署实战

三步构建你的微信自动化助手:WechatBot零基础部署实战 【免费下载链接】WechatBot 项目地址: https://gitcode.com/gh_mirrors/wechatb/WechatBot 你是否曾被海量的微信消息淹没?客户咨询重复问题、团队通知需要反复发送、重要信息在聊天记录中难…...

从Type-C插拔到电量显示:深入解析ADSP.HT.5.5充电框架中事件如何跨模块传递

Type-C充电事件的全链路解析:从物理插拔到电量显示的模块化协作 当我们将Type-C充电器插入设备时,这个看似简单的动作背后隐藏着一场精密的电子交响乐。现代充电系统已经演变成一个由多个专业模块组成的复杂网络,每个模块各司其职又紧密协作。…...

Rspack

根据你提供的 package.json 中的 scripts 信息,这是一个使用 Rspack(字节跳动推出的基于 Rust 的高性能构建工具)而非传统的 Webpack/Vite 的 Vue 3 项目。要在 VS Code 中运行这个项目,请按照以下步骤操作:1. 准备工作…...

计算机组成原理实验避坑指南:Logisim搭建加减法器时,90%的人会忽略的补码与溢出问题

计算机组成原理实验避坑指南:Logisim搭建加减法器时,90%的人会忽略的补码与溢出问题 在数字电路设计中,加减法器是最基础的运算单元之一,也是计算机组成原理课程中不可或缺的实验环节。许多学习者在使用Logisim搭建加减法器时&…...

别再死记硬背分词规则了!用Python手撸一个HMM分词器(附完整代码与PKU语料)

从零构建HMM中文分词器:用Python实现统计语言模型的实战指南 中文分词是自然语言处理的基础环节,而隐马尔可夫模型(HMM)作为经典的统计学习方法,在分词任务中展现出独特优势。本文将带您从零开始,不依赖任何第三方库,完整实现一个基于HMM的中文分词器。 1. HMM分词的核…...

VideoCanvas技术解析:基于扩散变换器的视频时空补全

1. VideoCanvas技术解析:基于上下文条件的任意时空视频补全视频生成技术正在经历一场由扩散变换器(Diffusion Transformers, DiTs)驱动的革命。传统方法如HunyuanVideo和CogVideoX虽然能生成高质量视频,但在精确控制方面存在明显局…...

Python时间序列预测工具全解析:从Prophet到GluonTS

1. 时间序列预测的Python工具全景图在数据分析领域,时间序列预测一直是个既基础又复杂的课题。从销售预测到股票分析,从能源消耗到设备维护,几乎每个行业都离不开对时间维度数据的处理。Python作为数据科学的首选语言,其生态系统中…...

shiplog:为AI编程打造持久化知识图谱,告别AI助手“失忆”困境

1. 项目概述:为AI编程打造一个持久化的“航海日志”如果你和我一样,深度使用过 Claude Code、Cursor 这类 AI 编程助手,那你一定经历过这种“失忆”的挫败感:昨天和 Claude 花了两个小时,从三个方案里敲定了 JWT 中间件…...

基于LLM与LangChain构建AI任务管理系统的实践指南

1. 项目概述:一个AI驱动的“老板”模拟器最近在GitHub上闲逛,发现了一个挺有意思的项目,叫“Bossku-AI”。光看名字,你可能会有点摸不着头脑,这“Bossku”是啥?其实,这是一个结合了AI技术&#…...

告别SecureCRT和Xshell!用MobaXterm免费版搞定SSH、串口和文件传输(附串口Z-modem传文件教程)

全能终端工具MobaXterm:一站式解决SSH、串口与文件传输难题 如果你是一名经常需要同时处理远程服务器连接、嵌入式开发板调试和文件传输的工程师,想必对SecureCRT、Xshell、FileZilla这些工具的组合使用并不陌生。每次在不同软件间切换,不仅…...

从‘终身学习’到‘持续预训练’:大模型时代如何让LLM记住新知识?

从‘终身学习’到‘持续预训练’:大模型时代如何让LLM记住新知识? 当企业部署的大语言模型(如Llama、ChatGLM)需要持续吸收专有数据流时,一个核心矛盾浮出水面:如何在保持通用能力的同时,让模型…...

Scroll Reverser:彻底解决Mac多设备滚动方向冲突的终极方案

Scroll Reverser:彻底解决Mac多设备滚动方向冲突的终极方案 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 如果你经常在Mac上同时使用触控板和鼠标,一定…...

Joplin同步翻车实录:S3配置里的5个隐藏大坑与一键修复方案

Joplin与S3同步配置深度排障指南:从原理到实战的完整解决方案 如果你正在使用Joplin搭配S3对象存储作为同步方案,却频繁遭遇同步失败、数据冲突或性能问题,这篇文章将带你深入理解背后的技术细节。不同于基础配置教程,我们将聚焦那…...

快速掌握SPI总线测试原理和测试方法

1. SPI通信概述SPI(Serial Peripheral Interface,串行外设接口)是一种由摩托罗拉公司于20世纪80年代初提出的高速、全双工、同步串行通信总线。作为一种事实上的行业标准,SPI广泛应用于微控制器(MCU)与外部…...

告别混乱!用Hbuilder这几个跳转技巧,轻松管理大型Vue/Uni-app项目

大型Vue/Uni-app项目导航革命:Hbuilder高阶跳转技巧实战手册 在代码量超过10万行的Vue/Uni-app项目中,开发者平均每天要执行超过200次文件跳转操作。传统的手动文件搜索不仅耗时(每次平均浪费1.5分钟),还会打断编程思维…...

视频下载助手:3分钟掌握这款Chrome插件的强大视频解析功能

视频下载助手:3分钟掌握这款Chrome插件的强大视频解析功能 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否经常遇到喜欢的在…...

【自适应天线与相控阵技术】聚焦近场自适应调零的矩量法分析

目录 1. 引言与背景 1.1 自适应天线系统的功能 1.2 大孔径自适应阵列测试的困境 1.3 聚焦近场自适应置零技术 2. 聚焦近场测试原理:从色散分析到等效条件 2.1 远场平面波模型 2.2 近场球面波模型 2.3 近场色散乘子的严格推导 2.4 测试平面几何设计 3. 部分自适应阵列…...

实测在 Ubuntu 系统中通过 Taotoken 调用大模型的延迟与稳定性表现

实测在 Ubuntu 系统中通过 Taotoken 调用大模型的延迟与稳定性表现 1. 测试环境与配置 本次测试基于 Ubuntu 22.04 LTS 桌面环境,硬件配置为 16GB 内存与 6 核 CPU。通过 Python 3.10 的 openai 包对接 Taotoken 服务,基础配置如下: from …...

BG3 Mod Manager终极指南:简单管理博德之门3模组的完整教程

BG3 Mod Manager终极指南:简单管理博德之门3模组的完整教程 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. This is the only official source! 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager BG3 Mod Manager&#xff08…...

轻量级本地工作流引擎SuanPan:用YAML编排脚本,实现高效自动化

1. 项目概述:一个面向开发者的高效本地工作流引擎最近在和一些做数据处理、自动化脚本的朋友交流时,发现一个挺普遍的现象:大家手里都攒了不少好用的脚本,比如数据清洗的Python脚本、定时备份的Shell脚本,或者一些需要…...

提示词工程不是背技巧

在独立开发者、产品经理和AI从业者的日常里,最常见的崩溃场景不是模型不够聪明,而是“我明明复制了十几个顶级Prompt,为什么输出的结果还是模板化、跑偏、甚至完全不可用?”笔记里塞满了CoT、Few-Shot、ReAct,却一到真…...

别再手画ER图了!用Mermaid v10.2.3的erDiagram语法,5分钟搞定数据库设计草图

代码化数据库设计:用Mermaid erDiagram语法5分钟完成专业ER图 上周团队评审会上,当产品经理第3次修改订单系统的数据结构时,我注意到一个有趣的现象——会议室白板上已经叠了5层擦不干净的ER图痕迹。这种场景在需求频繁变动的敏捷开发中再常见…...