跳转到内容

视觉驱动的 Operator Agent 模式

视觉驱动的 Operator Agent 模式

前置知识

本章涉及 Agent 核心循环与工具调用的通用原理,建议先阅读:

下文假设你已理解上述概念,直接聚焦视觉驱动的 Operator Agent 这一特殊模式。

什么是 Operator Agent

Operator Agent 是一类通过视觉感知与环境直接交互的 Agent。与传统的 API 调用型 Agent 不同,Operator Agent 不依赖结构化的接口,而是通过截屏 → 视觉模型理解 → 生成动作指令 → 执行 → 再截屏的迭代循环,像人类用户一样操作浏览器或计算机桌面。

这种模式的核心优势是通用性:任何人类能用鼠标键盘完成的操作,Operator Agent 都能完成,无需为每个应用编写专用集成代码。代价是成本高(每次迭代需要视觉模型调用)和可靠性低(视觉理解可能出错,动作执行可能偏离预期)。

架构概览

核心设计模式

1. Agent-Environment 分离

Operator Agent 遵循控制面与数据面分离的原则:

组件职责接口
OperatorAgent(控制面)决策:理解环境状态 → 生成动作序列act(env_state) → AgentActResult
Environment(数据面)执行:接收动作 → 操作实际环境 → 返回结果step(action) → EnvStepResult
get_state() → EnvState

这种分离使得:

  • 同一个 Agent 可以驱动不同类型的环境(浏览器、计算机桌面、甚至移动端)
  • 同一种环境可以被不同的 Agent 驱动(Anthropic、OpenAI、专用视觉模型)
  • 测试时可以独立 mock Agent 或 Environment

2. 环境状态抽象

环境状态被抽象为三个核心字段:

EnvState:
- screenshot: 当前屏幕截图(base64 编码)
- url: 当前页面 URL(浏览器环境)
- width / height: 屏幕分辨率

这个抽象足够简单——视觉模型只需要截屏就能理解整个环境状态,同时保留了 URL 等结构化信息用于辅助决策。

3. 动作指令体系

动作指令分为三类:

鼠标操作:点击(左/右/中/双/三击)、拖拽、移动、悬停、滚动 键盘操作:按键、长按、文本输入 环境操作:页面导航、截图、等待、返回上一页

每个动作指令是一个独立的数据类(如 ClickAction(x, y, button, modifier)),Agent 输出的是结构化指令而非自然语言描述。

4. 迭代循环的终止条件

Operator Agent 的循环有三个终止条件:

  1. 任务完成:Agent 不再输出动作(not agent_result.actions
  2. 达到迭代上限:默认 100 次,防止无限循环
  3. 用户中断:通过 WebSocket 发送新指令或取消信号

终止后进入总结阶段:Agent 使用专用 summarize_prompt 将所有交互历史压缩为一段自包含的回答。

5. 上下文压缩策略

Operator 会话生成大量消息(每次迭代 = 截屏 + 动作 + 结果),容易超出上下文窗口。压缩策略:

触发条件:消息数 > message_limit(基于 max_context / 2000 计算)
压缩方式:将连续的多条消息压缩为一条摘要
压缩比例:保留 1/5 不压缩,压缩前 4/5

这种策略保证最近的交互(最相关的部分)保持完整,而历史交互被压缩为摘要。

环境实现模式

BrowserEnvironment

浏览器环境通常基于 Playwright 或类似的浏览器自动化库实现:

  • start(): 启动浏览器实例,设置窗口尺寸
  • get_state(): 截取当前页面 + 获取当前 URL
  • step(action): 将动作映射为 Playwright 操作(如 ClickActionpage.click()
  • close(): 关闭浏览器实例

ComputerEnvironment

计算机环境通常基于 Docker 容器运行一个完整的桌面环境:

  • start(): 启动 Docker 容器,配置 VNC/X11 服务器,设置分辨率
  • get_state(): 通过 VNC 截屏
  • step(action): 将动作映射为 xdotool 命令(如 ClickActionxdotool mousemove x y click 1
  • close(): 停止并清理 Docker 容器

环境选择权衡

维度浏览器环境计算机环境
能力范围仅限 Web 应用完整桌面操作
部署复杂度低(只需浏览器)高(需要 Docker + 桌面环境)
延迟较低(直接 DOM 操作)较高(VNC 截屏 + xdotool)
安全性浏览器沙箱隔离需要 Docker 隔离
成本较低较高(容器资源开销)

模型选择策略

Operator Agent 必须使用视觉模型。常见的模型选择:

模型提供商适用模型特点
AnthropicClaude 3.5/3.7 Sonnet, Sonnet 4, Opus 4原生 computer use tool 支持
OpenAIGPT-4o通用视觉能力
开源UI-TARS 系列专用 GUI grounding 模型

关键要求是模型支持工具调用 + 视觉输入的组合能力。

潜在陷阱与对策

陷阱 1:无限循环

Agent 可能陷入重复操作循环(如反复点击同一个按钮)。

对策

  • 硬性迭代上限(默认 100)
  • 在达到上限时返回当前结果 + 警告消息
  • 建议用户拆分任务或换一种方法

陷阱 2:上下文爆炸

每次迭代产生大量 token(截屏 + 动作描述 + 结果)。

对策

  • 上下文压缩策略(保留最近交互,压缩历史)
  • 限制截屏分辨率(如 1024×768)
  • 使用 prompt caching 降低重复截屏的成本

陷阱 3:环境状态不一致

Agent 执行动作后,环境状态可能未按预期变化(如页面加载慢、动画未完成)。

对策

  • 在动作之间插入 WaitAction
  • 截屏作为动作后的反馈,Agent 可以自己判断是否需要等待
  • 对于浏览器环境,可以跟踪访问过的 URL 用于调试

陷阱 4:用户输入阻塞

某些操作需要用户输入(如填写表单中的个人信息、验证码)。

对策

  • RequestUserAction 机制:Agent 可以请求用户输入
  • 收到用户输入请求后暂停循环,不关闭环境
  • 用户输入后作为新的 user 消息加入对话

陷阱 5:成本失控

视觉模型调用成本高昂,一次完整的 Operator 任务可能需要数十次调用。

对策

  • 使用快速模型(如 Haiku)做简单决策
  • 对推理密集任务切换到 reasoning 模型
  • 提供成本估算给用户,设置预算上限

与其他 Agent 模式的对比

  • API 调用型:精确、低成本、但需要为每个应用编写集成代码
  • Operator Agent:通用、零集成成本、但成本高且可靠性低
  • 混合模式:优先尝试 API,失败时降级到 Operator——这是未来最实用的方向

参考来源