多模态 Agent 与 Computer-Use(毕业项目) 本节摘要:2026 年的前沿产品是一个能读截图、点按钮、浏览网页 UI、填表单、端到端完成工作流的多模态 agent。SeeClick 与 CogAgent(2024)证明了 GUI 定位原语;Ferret-UI 加了移动端;ChartAgent 引入了图表的视觉工具使用;VisualWebArena 与 AgentVista(2026)是前沿追赶的基准——连 Gemini 3 Pro 与 Claude Opus 4.7 在 AgentVista 的硬任务上也只有约 30%。这个毕业项目把第 12 章的每条线拉到一起:感知(高分辨率 VLM)、推理(带工具使用的 LLM)、定位(坐标输出)、长程记忆与评估。
本节摘要:2026 年的前沿产品是一个能读截图、点按钮、浏览网页 UI、填表单、端到端完成工作流的多模态 agent。SeeClick 与 CogAgent(2024)证明了 GUI 定位原语;Ferret-UI 加了移动端;ChartAgent 引入了图表的视觉工具使用;VisualWebArena 与 AgentVista(2026)是前沿追赶的基准——连 Gemini 3 Pro 与 Claude Opus 4.7 在 AgentVista 的硬任务上也只有约 30%。这个毕业项目把第 12 章的每条线拉到一起:感知(高分辨率 VLM)、推理(带工具使用的 LLM)、定位(坐标输出)、长程记忆与评估。
阅读完本节,你应当能够:
一个订票网站工作流:「给我找张 4 月 15 日去东京的机票,过道座,800 美元以下,订下来。」
一个多模态 agent 需要:
每步都是一次多模态 VLM 调用,VLM 输出必须是可解析的 JSON。错误跨步累积,所以恢复很重要。
GUI 定位是:给定一张截图与一条自然语言指令,输出要点击的 (x, y) 坐标(或其他动作)。
输出格式通常是 JSON:
{"action": "click", "x": 384, "y": 220, "element_desc": "Search button"}
element_desc 帮助恢复:若坐标在截图间漂移,语义提示让系统重新定位。
典型动作 schema 有 6~10 种动作类型:
click:(x, y)type:(text, x?, y?)scroll:(direction, amount)drag:(x0, y0, x1, y1)select:(option_index)hover:(x, y)navigate:(url)wait:(ms)done:(success, explanation)agent 每步发一个动作,浏览器包装器执行并返回新状态。
两种输入模式:
生产 agent 在可能时用混合。浏览器自动化(Selenium + 无障碍)总有树;桌面应用有时有。
一个 20 步工作流产 20 张截图,VLM 上下文很快填满。三种压缩策略:
Claude 的 computer-use API 用日志模式,更简单更可靠。
ChartAgent(arXiv:2510.04514)引入图表理解的视觉工具使用:裁剪、放大、OCR、调外部检测。agent 能输出「裁剪到区域 (100, 200, 300, 400) 然后调 OCR」作为工具调用,工具返回文本,VLM 继续推理。
这个模式可推广:set-of-mark 提示、区域标注、外部检测工具都契合同一个「输出工具调用、收结构化响应」的 schema。
agent 性能瓶颈:
研究方向:记忆架构、显式重规划、多模态验证(截图匹配验证动作成功)。
毕业项目任务:搭一个 computer-use agent,它:
课程提供易扩展成真实浏览器的脚手架代码。
code/main.py 是毕业项目脚手架:
ACTION_SCHEMA = { "click": {"x": int, "y": int, "element_desc": str}, "type": {"text": str, "x": int, "y": int}, "scroll": {"direction": "up|down", "amount": int}, "drag": {"x0": int, "y0": int, "x1": int, "y1": int}, "select": {"option_index": int}, "hover": {"x": int, "y": int}, "navigate":{"url": str}, "wait": {"ms": int}, "screenshot_region": {"box": [int, int, int, int]}, # 裁剪+放大工具 "done": {"success": bool, "explanation": str}, }
def agent_loop(goal, browser, vlm, max_steps=30): history_log = [] # 文本日志, 不回看老截图 for step in range(max_steps): screenshot = browser.screenshot() action = vlm.plan(goal, screenshot, history_log) # 发 JSON 动作 if action["action"] == "done": return action["success"] result = browser.execute(action) # 应用动作 if result.failed: action = vlm.recover(goal, screenshot, result.error) # 错误恢复 browser.execute(action) history_log.append(summarize(action, result)) # 摘要链压缩 return False
def compress_history(screenshots, actions, keep=4): # 保留最近 keep 张截图, 其余压成文本摘要 live = screenshots[-keep:] summary = llm.summarize(actions[:-keep]) # 老步骤变文本 return {"live_screenshots": live, "summary": summary}
💡 毕业项目的精髓:把第 12 章所有概念缝合成一个循环——高分辨率 VLM(感知)+ LLM 工具使用(推理)+ JSON 坐标输出(定位)+ 摘要链(长程记忆)+ 错误恢复。这正是 Claude computer-use、Manus、OpenAI Operator 等产品的工程骨架。
工程取舍:通用计算机使用用 Claude 4.7 computer-use;开源与 GUI 定位用 Qwen2.5-VL/SeeClick;移动用 Ferret-UI;要工具使用集成用 ChartAgent 模式;长程任务用日志记忆 + 摘要链。
本节产出 outputs/skill-multimodal-agent-designer.md。给定一个 computer-use 产品(领域、动作集、评估目标),它设计完整 agent 循环、记忆策略、定位模式与预期基准分。
扩 schema:给动作 schema 加一个 screenshot_region 工具(裁剪 + 放大),哪些任务受益?
读 AgentVista:读 AgentVista(arXiv:2602.23166),描述最难的任务类别,以及前沿模型为何仍失败。
记忆压缩:设计一个摘要链,实时保留 ≤4 张截图,任意数量记日志。
错误恢复:搭一个错误恢复钩子:动作失败时(按钮找不到),agent 下一步做什么?
对比:在 10 个网页任务上对比纯截图 Claude 4.7 与混合截图 + 无障碍树 Qwen2.5-VL,各自在哪些任务上胜?
element_desc 助恢复。恭喜你完成了第 13 章「多模态 AI」的全部 25 节。从最底层的 patch token 一路走到能操控计算机的多模态 agent,你已经具备了理解 2026 年任何一个多模态模型与产品的全部概念地基。下一章(第 14 章)将把这套多模态能力组装进更宏大的 agent 工程体系——工具使用、规划、记忆、多 agent 协作,让模型不仅能看能说,还能在真实世界里自主完成长程任务。