ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

视觉AI Agent:基于视觉模型实现网页自动化的新范式

视觉AI Agent:基于视觉模型实现网页自动化的新范式 最近很多开发者都在尝试用 AI Agent 来自动化操作网页比如自动填写表单、点击按钮、爬取数据。一个常见的思路是让 Agent 调用浏览器 API如 Puppeteer、Selenium来模拟点击。听起来很直接对吧但实际做过的朋友会发现这条路坑太多了——网页结构一变脚本就失效动态加载的内容抓不到复杂的交互逻辑难以用代码穷举。更关键的是我们真的需要让 Agent 去“理解”一个按钮的id或xpath吗这本质上还是在用代码的思维去解决一个“视觉”和“意图”的问题。人类操作网页时看的是屏幕上的文字、图标和布局而不是背后的 DOM 树。AI Agent 的未来很可能不是靠 API 接管网页而是靠视觉模型“看懂”屏幕像人一样操作。这篇文章我们就来深入探讨这个判断背后的技术逻辑并提供一个基于视觉模型的 AI Agent 实操方案。你将了解到为什么传统基于 DOM/API 的网页自动化方案在 AI 时代显得笨拙且脆弱。视觉模型如何成为连接 AI 意图与图形界面的“眼睛”和“手”。如何从零搭建一个能“看懂”屏幕并执行任务的视觉 AI Agent。一个完整的、可运行的代码示例实现自动登录并操作一个模拟网页应用。这种方案的优势、当前局限以及作为 AI Engineer 的进阶思考。如果你正在研究 AI Agent 的落地场景或者对如何让 AI 更自然地与图形化系统交互感兴趣这篇文章会给你一个全新的、更接近本质的视角。1. 传统网页自动化为什么 API 路径越走越窄在深入视觉方案之前我们必须先理解当前主流方案的痛点。很多团队在构建网页自动化 Agent 时第一反应是寻找或封装一套稳定的浏览器操作 API让 LLM大语言模型去调用。这个思路的典型架构如下用户自然语言指令 - LLM 理解意图 - LLM 调用预定义的浏览器 API如 click(id), type(text), navigate(url) - 驱动浏览器执行这个流程听起来合理但实践中会遇到几个核心难题1.1 网页结构的脆弱性API 操作严重依赖网页的 DOM 结构。一个按钮的定位可能依赖于idsubmit-btn或xpath//button[text()登录]。然而现代前端应用频繁更新id可能动态生成文本可能国际化组件库升级可能导致选择器失效。你的 Agent 脚本需要持续维护否则就会“瞎掉”。1.2 意图到代码的“翻译损耗”LLM 需要将用户的自然语言指令如“帮我把购物车里的第三件商品移入收藏夹”精确翻译成一系列底层 API 调用。这要求 LLM 不仅理解任务还要精确知晓网页的所有可操作元素及其定位方式。任何偏差都会导致操作失败。这相当于要求一个将军不仅制定战略还要记住战场上每一颗螺丝钉的位置。1.3 对动态内容的无力大量内容通过 JavaScript 异步加载初始 HTML 中并不存在。基于静态 DOM 解析的 API 调用需要复杂的等待和轮询逻辑。处理弹窗、验证码、骨架屏等动态交互更是噩梦。1.4 开发与维护成本高昂你需要为每个目标网页编写或生成大量的“适配代码”——选择器、等待条件、异常处理。当网站改版时整个 Agent 可能崩溃需要人工重新分析和调整。这些痛点共同指向一个结论让 AI Agent 通过代码接口去操作一个为人类视觉设计的图形界面是一种错位的抽象。我们是在强迫 AI 用机器的语言去理解人类的界面。有没有更直接的路径有那就是让 AI 像人一样——用眼睛看用手操作。2. 视觉模型AI Agent 的“眼睛”与“手”视觉模型Visual Language Models, VLMs的出现为这个问题提供了全新的解法。这类模型能够同时理解图像和文本。在网页自动化场景中我们可以截取屏幕获取当前网页的完整视觉快照。让 VLM “看”图说话向模型提供截图和任务指令如“点击登录按钮”。解析视觉指令模型分析图像识别出与指令相关的UI元素按钮、输入框等并输出具体的操作指令通常是屏幕坐标如click(x, y)或带描述的指令如type(username, myuser)。执行操作一个执行器根据模型输出的指令模拟鼠标点击、键盘输入等操作。这个流程完美绕过了对 DOM 结构的依赖。按钮无论怎么变只要它在屏幕上看起来像个“登录按钮”模型就能找到它。这与人操作网页的直觉完全一致。核心优势对比维度传统 API 驱动方案视觉模型驱动方案依赖对象网页 DOM 结构、元素属性id, class屏幕像素、视觉特征健壮性低随网页改版易失效高只要UI视觉逻辑不变就有效开发成本高需为每个页面编写适配代码低一套模型可泛化到不同页面理解能力需要将意图翻译为精确的代码指令直接理解“做什么”输出“点哪里”适用场景结构稳定、API 完善的内部系统任意图形界面网页、桌面应用、移动端处理动态内容困难需额外逻辑自然所见即所得当然视觉方案并非银弹。它依赖模型的视觉识别精度、对指令的理解能力以及坐标定位的准确性。但它的方向是正确的——让 AI 在人类的信息层视觉-语言与我们交互而不是强迫它降维到机器的代码层。3. 环境准备构建视觉 AI Agent 的技术栈要实现上述构想我们需要一套完整的技术栈。以下是我们将使用的核心组件及其作用视觉语言模型 (VLM)模型的“大脑”和“眼睛”。负责理解截图和用户指令并输出操作决策。我们将使用Qwen-VL系列的 API因为它对中文场景支持好且具备较强的视觉问答和 grounding指代定位能力。你也可以替换为 GPT-4V、Gemini Vision 或其他 VLMs。浏览器自动化工具用于控制浏览器、截图和执行模拟操作。我们选择Playwright因为它跨浏览器支持好、API 现代且截图质量高。坐标执行器将 VLM 输出的坐标或描述性指令转化为真实的鼠标键盘事件。Playwright 本身就能完成这个工作。任务编排与上下文管理一个控制循环负责串联“截图 - 询问模型 - 执行 - 观察结果 - 下一步”的流程。我们将用 Python 脚本来实现。环境与依赖安装确保你的 Python 版本在 3.8 以上。我们创建一个新的虚拟环境并安装必要包。# 创建并激活虚拟环境可选但推荐 python -m venv venv # Windows: venv\Scripts\activate # Linux/Mac: source venv/bin/activate # 安装核心依赖 pip install playwright pip install openai # 用于调用兼容OpenAI API格式的VLMs如Qwen-VL pip install pillow # 用于可能的图像处理 pip install python-dotenv # 管理API密钥 # 安装Playwright的浏览器内核 playwright install chromium获取 VLM API 密钥本文以阿里云通义千问的 Qwen-VL-Plus 模型为例。你需要前往阿里云灵积平台 (DashScope) 注册并创建 API-KEY。将 API Key 保存在环境变量中确保安全。创建一个.env文件在项目根目录DASHSCOPE_API_KEYyour_api_key_here4. 核心流程拆解视觉 Agent 如何工作一个完整的视觉 AI Agent 工作流可以分解为以下几个核心步骤我们将围绕一个“自动登录演示网站并执行简单操作”的任务来展开。步骤 1启动浏览器并导航到目标页面使用 Playwright 启动一个浏览器实例并打开我们想要操作的网页。这里我们使用一个专门用于测试自动化操作的演示网站https://the-internet.herokuapp.com/login。步骤 2截取当前屏幕对当前浏览器页面进行全屏截图保存为图像文件如 PNG 格式。这张图包含了所有可视的 UI 元素是 VLM 的输入。步骤 3构建视觉问答提示词调用 VLM这是最关键的一步。我们将截图经过 Base64 编码或提供 URL和用户的任务指令一起发送给 VLM。提示词需要精心设计以引导模型输出我们期望的、结构化的操作指令。例如对于登录任务提示词可能是“你是一个网页操作助手。请仔细查看提供的网页截图。用户的目标是登录这个网站。请分析截图并严格按以下格式输出下一步操作ACTION: 动作类型 | TARGET: 目标描述或坐标 | VALUE: 可选输入的值。动作类型包括CLICK,TYPE,NAVIGATE,PRESS_KEY,WAIT。目标描述应清晰如‘用户名输入框’、‘密码输入框’、‘登录按钮’。如果你认为任务已完成输出ACTION: COMPLETE | MESSAGE: 完成信息。”步骤 4解析 VLM 的响应并执行VLM 会返回一个文本响应。我们需要解析这个响应提取出动作类型、目标信息和值。然后将这个“意图”转化为 Playwright 的可执行命令。如果动作是CLICK我们需要将“目标描述”转化为屏幕坐标。一种简单方式是让 VLM 在响应中直接输出坐标(x, y)。更鲁棒的方式是如果描述不够精确我们可以进行多轮交互或者结合其他定位方法后文会讲。如果动作是TYPE我们则需要在目标位置模拟键盘输入。步骤 5观察结果并循环执行一个操作后网页状态会发生变化。我们需要回到步骤 2截取新的屏幕再次询问 VLM “接下来该做什么”直到任务完成或达到最大步数限制。这个循环模拟了人类“观察-思考-行动-再观察”的交互过程。5. 完整示例实现一个视觉驱动的登录 Agent下面我们将实现一个具体的视觉 AI Agent它能够自动完成https://the-internet.herokuapp.com/login的登录操作。这个网站有标准的用户名、密码输入框和登录按钮。项目结构visual_web_agent/ ├── .env # 存储API密钥 ├── requirements.txt # 项目依赖 ├── visual_agent.py # 主程序 └── screenshots/ # 存放截图运行时生成5.1 主程序代码实现 (visual_agent.py)import os import base64 import time from pathlib import Path from dotenv import load_dotenv from openai import OpenAI from playwright.sync_api import sync_playwright # 加载环境变量 load_dotenv() class VisualWebAgent: def __init__(self, model_typeqwen-vl-plus): 初始化视觉网页Agent。 model_type: 使用的VLM模型默认为通义千问VL-Plus。 self.model_type model_type # 初始化OpenAI客户端指向DashScope端点 self.client OpenAI( api_keyos.getenv(DASHSCOPE_API_KEY), base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1 ) # 初始化Playwright self.playwright sync_playwright().start() # 使用Chromium浏览器可设置为 headlessFalse 以便观察 self.browser self.playwright.chromium.launch(headlessFalse, slow_mo500) # slow_mo 让动作变慢方便观察 self.context self.browser.new_context(viewport{width: 1280, height: 800}) self.page self.context.new_page() self.screenshot_dir Path(screenshots) self.screenshot_dir.mkdir(exist_okTrue) self.max_steps 10 # 防止无限循环 self.current_step 0 def take_screenshot(self, step_name): 截取当前页面并保存返回图片的base64编码和本地路径。 screenshot_path self.screenshot_dir / fstep_{self.current_step:02d}_{step_name}.png self.page.screenshot(pathstr(screenshot_path), full_pageTrue) print(f[Step {self.current_step}] 截图已保存: {screenshot_path}) # 将图片转换为base64 with open(screenshot_path, rb) as image_file: base64_image base64.b64encode(image_file.read()).decode(utf-8) return base64_image, str(screenshot_path) def ask_vision_model(self, image_base64, user_instruction): 调用视觉模型询问下一步操作。 prompt f 你是一个专业的网页操作自动化助手。请仔细分析下面的网页截图。 用户的目标是{user_instruction}。 请根据当前屏幕状态决定下一步操作。你只能输出以下格式中的一种 1. 如果需要点击某个元素 ACTION: CLICK | TARGET: 描述元素例如‘登录按钮’ | COORD: (x, y) 2. 如果需要输入文本 ACTION: TYPE | TARGET: 描述输入框例如‘用户名输入框’ | VALUE: 要输入的文本 | COORD: (x, y) 3. 如果任务看起来已经完成 ACTION: COMPLETE | MESSAGE: 任务完成信息 4. 如果无法确定或需要更多信息 ACTION: UNCLEAR | MESSAGE: 不清楚的原因 注意COORD坐标(x, y)是你认为的目标元素在截图上的大致中心坐标。截图尺寸为1280x800。请确保你的描述和坐标尽可能准确。 现在请只输出上述格式的一行文本不要有任何其他解释。 try: response self.client.chat.completions.create( modelself.model_type, messages[ { role: user, content: [ {type: text, text: prompt}, { type: image_url, image_url: { url: fdata:image/png;base64,{image_base64} } } ] } ], max_tokens300, temperature0.1 # 低温度使输出更确定 ) model_response response.choices[0].message.content.strip() print(f[VLM 响应] {model_response}) return model_response except Exception as e: print(f调用视觉模型失败: {e}) return ACTION: UNCLEAR | MESSAGE: 模型调用失败 def parse_and_execute(self, response): 解析模型响应并执行对应操作。 if not response: return False, 无响应 # 简单的解析逻辑 parts response.split(|) action_dict {} for part in parts: if : in part: key, value part.split(:, 1) action_dict[key.strip()] value.strip() action action_dict.get(ACTION, ) if action CLICK: coord_str action_dict.get(COORD, ).strip(()) try: x, y map(int, coord_str.split(,)) # 在页面上对应坐标执行点击 self.page.mouse.click(x, y) print(f执行点击: ({x}, {y}) - 目标: {action_dict.get(TARGET, 未知)}) time.sleep(1) # 等待页面反应 return False, 点击执行完毕 # 任务未完成继续 except Exception as e: print(f点击执行失败: {e}) return False, f点击失败: {e} elif action TYPE: target action_dict.get(TARGET, ) value action_dict.get(VALUE, ) coord_str action_dict.get(COORD, ).strip(()) try: x, y map(int, coord_str.split(,)) # 先点击输入框聚焦 self.page.mouse.click(x, y) # 清空可能存在的文本模拟CtrlADelete self.page.keyboard.press(ControlA) self.page.keyboard.press(Delete) # 输入文本 self.page.keyboard.type(value) print(f在{target}中输入文本: {value}) time.sleep(0.5) return False, 输入执行完毕 except Exception as e: print(f输入执行失败: {e}) return False, f输入失败: {e} elif action COMPLETE: message action_dict.get(MESSAGE, 任务完成) print(f任务完成: {message}) return True, message elif action UNCLEAR: message action_dict.get(MESSAGE, 模型无法确定下一步) print(f模型无法确定: {message}) return False, message else: print(f无法解析的响应: {response}) return False, 响应格式错误 def run(self, url, instruction): 运行Agent的主循环。 print(f开始任务: {instruction}) print(f导航至: {url}) self.page.goto(url) time.sleep(2) # 等待页面加载 task_completed False last_action_result 开始 while not task_completed and self.current_step self.max_steps: self.current_step 1 print(f\n--- 第 {self.current_step} 步 ---) print(f上一步结果: {last_action_result}) # 1. 截图 screenshot_base64, _ self.take_screenshot(fbefore_action) # 2. 询问模型 vlm_response self.ask_vision_model(screenshot_base64, instruction) # 3. 解析并执行 task_completed, last_action_result self.parse_and_execute(vlm_response) if task_completed: break if self.current_step self.max_steps: print(达到最大步数限制任务可能未完成。) return task_completed def close(self): 清理资源。 self.context.close() self.browser.close() self.playwright.stop() if __name__ __main__: # 使用一个公开的测试登录页面 target_url https://the-internet.herokuapp.com/login user_goal 登录这个网站用户名为tomsmith密码为SuperSecretPassword! agent VisualWebAgent() try: success agent.run(target_url, user_goal) if success: print(\n✅ 任务成功完成) else: print(\n❌ 任务未能在限制步数内完成。) finally: agent.close()5.2 代码关键逻辑解析初始化 (__init__): 设置了与 DashScope API 的连接使用 OpenAI SDK 兼容模式并启动了 Playwright 浏览器。headlessFalse让你能看到自动化过程slow_mo500让每个动作慢半秒方便调试。截图与编码 (take_screenshot): 每次循环都会截取全屏并转换为 Base64 格式这是大多数 VLM API 接受的图像输入格式之一。提示词工程 (ask_vision_model): 这是引导模型正确输出的核心。我们使用了严格的输出格式指令并要求模型同时提供元素描述和坐标。在实际复杂场景中你可能需要更精细的提示词或多轮对话来精确定位。解析与执行 (parse_and_execute): 一个简单的解析器根据模型返回的ACTION类型调用 Playwright 的鼠标键盘 API 执行操作。对于TYPE动作我们模拟了点击输入框、全选、删除再输入的过程更符合实际。主循环 (run): 实现了“截图-询问-执行”的核心循环并设置了最大步数以防止死循环。6. 运行结果与效果验证如何运行将上述代码保存为visual_agent.py。在项目根目录创建.env文件填入你的DASHSCOPE_API_KEY。在终端执行python visual_agent.py预期输出与过程观察程序启动后你会看到一个浏览器窗口打开并导航到测试登录页面。控制台会输出类似以下信息开始任务: 登录这个网站用户名为tomsmith密码为SuperSecretPassword! 导航至: https://the-internet.herokuapp.com/login --- 第 1 步 --- 上一步结果: 开始 [Step 1] 截图已保存: screenshots/step_01_before_action.png [VLM 响应] ACTION: TYPE | TARGET: 用户名输入框 | VALUE: tomsmith | COORD: (400, 300) 在用户名输入框中输入文本: tomsmith ... --- 第 2 步 --- 上一步结果: 输入执行完毕 [Step 2] 截图已保存: screenshots/step_02_before_action.png [VLM 响应] ACTION: TYPE | TARGET: 密码输入框 | VALUE: SuperSecretPassword! | COORD: (400, 350) 在密码输入框中输入文本: SuperSecretPassword! ... --- 第 3 步 --- 上一步结果: 输入执行完毕 [Step 3] 截图已保存: screenshots/step_03_before_action.png [VLM 响应] ACTION: CLICK | TARGET: 登录按钮 | COORD: (400, 400) 执行点击: (400, 400) - 目标: 登录按钮 ... --- 第 4 步 --- 上一步结果: 点击执行完毕 [Step 4] 截图已保存: screenshots/step_04_before_action.png [VLM 响应] ACTION: COMPLETE | MESSAGE: 已成功登录页面显示“You logged into a secure area!” 任务完成: 已成功登录页面显示“You logged into a secure area!” ✅ 任务成功完成同时你将在浏览器中亲眼看到鼠标自动移动到输入框、输入文本、点击按钮的全过程。登录成功后页面会跳转到欢迎页面。如何验证成功视觉验证浏览器最终停留在显示 “You logged into a secure area!” 的成功页面。程序验证Agent 最终收到了模型返回的ACTION: COMPLETE指令并退出循环。日志验证控制台输出显示了完整的决策和执行链条。截图回溯screenshots/文件夹下的图片记录了每一步操作前的屏幕状态可用于复盘和调试。如果失败首先检查API 密钥是否设置正确是否有余额或权限。网络连接能否访问目标网址和 DashScope API。坐标精度模型预测的坐标可能不准。可以查看截图核对坐标位置。对于复杂页面可能需要更先进的定位策略见下文最佳实践。7. 常见问题与排查思路在实际运行中你可能会遇到以下问题。这里提供排查思路问题现象可能原因排查方式解决方案调用 VLM API 失败返回 403 或 401API 密钥无效、未开通服务或权限不足。检查.env文件在 DashScope 控制台验证 API Key 状态和模型权限。更换有效的 API Key确保已开通对应模型如 qwen-vl-plus的调用权限。模型返回ACTION: UNCLEAR提示词不够清晰截图内容模糊或任务本身有歧义。查看模型返回的MESSAGE字段检查对应步骤的截图是否清晰包含了所需操作元素。优化提示词更精确描述任务。确保截图质量避免弹窗遮挡。对于复杂任务拆分为更原子化的子指令。点击或输入位置不准模型预测的坐标 (x, y) 有偏差。屏幕分辨率、浏览器缩放可能导致坐标错位。1. 打开截图用画图工具查看模型给出的坐标点在哪里。2. 检查 Playwright 视口设置是否与截图尺寸一致。1.提示词优化在提示词中强调坐标准确性或要求模型返回元素描述而非坐标由本地代码二次计算如结合 OCR。2.使用相对坐标让模型返回元素相对于截图宽高的百分比位置再换算为绝对坐标。3.混合定位视觉定位为主辅以简单的 DOM 属性过滤如page.locator(button:has-text(Login))提高精度。任务陷入死循环模型无法识别任务完成状态或执行后页面状态变化不符合预期。查看循环中的截图序列分析模型在完成后的步骤中看到了什么又做出了什么决策。1.完善完成条件在提示词中更详细地定义“完成”的视觉特征如出现特定的成功文字、URL 变化。2.设置步数限制就像我们代码中的max_steps。3.引入超时和异常状态检测。处理弹窗、验证码这些是动态、非标准的交互元素。视觉模型可能能识别它们但标准操作流程会被打断。1.特定处理在提示词中增加对常见弹窗如 Cookie 同意的识别和处理逻辑。2.人工干预点设计 Agent 在遇到无法处理的元素时暂停并请求人工指令。3.集成专项工具对于验证码可接入专门的识别服务。API 返回 “context length” 或 “thinking_budget” 错误输入图片提示词过长或请求参数不符合 API 要求。检查输入图片的分辨率是否过大提示词是否过于冗长。查看对应 VLM API 的文档确认max_tokens,thinking_budget等参数的正确格式和范围。1.压缩图片在不影响识别的前提下降低截图分辨率或质量。2.精简提示词。3.严格按照 API 文档设置参数。8. 最佳实践与工程化建议将视觉 AI Agent 从 demo 推向生产需要考虑更多工程细节。8.1 提升定位精度超越简单坐标单纯依赖模型预测的绝对坐标非常脆弱。更稳健的方案是视觉定位 微调让模型返回元素的描述性定位如“标题栏下方的蓝色提交按钮”然后结合本地轻量级计算机视觉库如opencv模板匹配或 OCR 工具在截图内进行精确查找。混合定位策略优先使用视觉当视觉置信度低时回退到 Playwright 的语义选择器如page.get_by_role(button, nameLogin)。这需要模型能输出元素的角色、名称等属性。8.2 设计鲁棒的提示词提示词是 Agent 的“思维框架”。好的提示词应明确角色和格式开宗明义定义 Agent 的角色和输出格式。提供上下文在后续轮次中可以将之前的操作历史截图或描述作为上下文输入帮助模型理解当前状态是操作的结果。定义清晰的动作集CLICK,TYPE,SCROLL,HOVER,WAIT_FOR_ELEMENT等。描述完成状态用视觉特征明确定义任务何时算完成。8.3 状态管理与错误恢复维护会话历史保存每一步的截图、模型请求与响应、执行结果。这对于调试和模型微调至关重要。实现检查点定期保存浏览器上下文状态如 Cookies、LocalStorage以便在失败时快速回滚到某一步重试。超时与重试机制对网络请求、模型调用、页面加载设置超时并实现指数退避重试。定义失败处理策略当连续多次UNCLEAR或操作失败时是终止任务、回退上一步还是切换到备用策略如请求人工帮助。8.4 性能与成本优化缓存与降级对于固定不变的页面区域可以缓存模型的识别结果避免重复调用昂贵的 VLM API。图像预处理截图前可以滚动页面将操作区域置于视口中心截图后可以裁剪掉无关区域如浏览器边框、固定导航栏减少输入 token提升模型专注度并降低成本。模型选型根据任务复杂度选择性价比合适的模型。简单任务可能用qwen-vl-max就够复杂任务才需要qwen-vl-plus。8.5 安全与伦理边界权限控制Agent 应运行在最小权限原则下不能访问敏感数据或执行危险操作如删除、转账。人工监督对于关键业务流程设计“人在环路”机制重要步骤需人工确认。遵守 robots.txt确保你的自动化操作符合目标网站的规范。透明性如果 Agent 代表用户操作应确保用户知情并同意。9. 总结视觉模型是 AI Agent 的必然路径吗回到我们最初的观点AI Agent 不会靠 API 接管网页视觉模型才是正解。通过本文的探讨和实践我们可以更清晰地看到抽象层级匹配视觉模型让 AI 在人机交互的原始层面像素和意图进行理解与决策这比强行将视觉界面翻译成代码 API 更自然、更健壮。泛化能力一套基于视觉的 Agent 框架经过适当训练或提示可以泛化到不同的网站、甚至不同的桌面应用而无需为每个目标重写适配代码。这极大地提升了 Agent 的适用范围和开发效率。技术演进方向多模态大模型VLMs的能力正在快速进步对 UI 的理解、元素定位、步骤规划越来越精准。与之配套的自动化执行工具如 Playwright也日益成熟。两者结合正催生新一代的“数字员工”。当然纯粹的视觉方案目前仍有挑战精度依赖模型能力、API 调用成本较高、处理极端动态交互如游戏仍困难。因此未来的成熟方案很可能是“视觉为主API/语义为辅”的混合模式。视觉负责理解和粗粒度定位在必要时辅以精确的 DOM 查询来确保操作的可靠性。对于 AI Engineer 而言这意味着我们的技能栈需要更新不仅要懂 LLM 和传统自动化还要深入理解视觉模型的能力边界、提示词工程、以及如何将视觉感知与物理/虚拟执行器安全、高效地连接起来。下一步你可以扩展任务复杂度尝试让 Agent 完成多步骤任务如“在电商网站搜索商品按价格排序将第二便宜的商品加入购物车”。集成多模态模型尝试使用 GPT-4V、Gemini Vision 或开源的 VLMs如 LLaVA比较它们在网页理解任务上的效果和成本。探索混合定位实现一个定位模块综合视觉模型输出、OCR 文字识别和 Playwright 语义定位器提升鲁棒性。构建可复用的 Agent 框架将截图、问答、解析、执行、状态管理模块化使其能够轻松配置新任务。视觉模型为 AI Agent 打开了一扇新的大门让它能够以更接近人类的方式与数字世界互动。虽然这条路还在早期但它的潜力和方向已经非常明确。现在是时候动手搭建你的第一个视觉 AI Agent亲自感受这场交互革命了。
返回列表