大量企业核心系统至今仍运行在缺乏 API 的桌面客户端上——ERP、老旧 CRM、内部财务工具,它们是自动化最难啃的骨头。AWS 近期发布的公开预览功能让这件事有了新解法:Amazon WorkSpaces 现在可以作为 AI Agent 的托管虚拟桌面,Agent 通过 IAM 认证登录,再用计算机视觉识别界面、模拟键盘鼠标输入来完成操作,绕开了"没有 API 就没法自动化"的死结。
Agent 怎么"看见"并"操作"桌面
整个链路并不复杂,但每一步都有工程细节:
认证层——Agent 不再需要人类账号密码,而是通过 IAM 角色获取 WorkSpaces 访问权限。这意味着权限管理、审计日志都可以走 AWS 原生的 IAM 体系,和现有合规流程对接。
视觉感知层——Agent 连接到 WorkSpaces 后,拿到的是桌面像素流。它用计算机视觉模型(典型如 GPT-4V、Claude Vision 等)识别窗口、按钮、菜单、表格内容,把像素翻译成结构化理解。
动作执行层——识别出"点击 Submit 按钮"后,Agent 通过输入模拟(键盘敲击、鼠标移动与点击)把意图投射到桌面坐标上,完成实际操作。
整条链路的核心假设是:桌面应用的 UI 本身就是最通用的"API"——只要人能看懂、能操作,Agent 也能。
45 倍 Token 消耗:视觉路径的真实代价
AWS 引用了 Reflex 基准测试的数据:视觉 Agent 相比 API Agent,Token 消耗高出 45 倍。这个数字值得拆开看:
- API 调用一次返回的是结构化 JSON,几十到几百 Token 就够了。
- 视觉 Agent 每一步操作都需要先"看屏幕"——一张截图编码进多模态模型,轻松消耗数千 Token;再叠加多轮对话推理,单次任务的总消耗迅速膨胀。
- 如果任务涉及 10 步界面操作,每步都要截图→识别→决策→执行→再截图验证,Token 累积是线性的。
这意味着视觉路径不是 API 的廉价替代,而是昂贵但通用的兜底方案。 在有 API 的场景下,永远应该优先走 API;视觉路径的价值在于覆盖那些"别无他法"的遗留系统。
实际搭建:从 IAM 到 Agent 代码
下面给出一个最小可运行的搭建流程,展示如何让 Agent 通过 IAM 认证连接 WorkSpaces 并用视觉方式操作桌面。部分配置(如 WorkSpaces 目录 ID)需替换为你自己的环境。
1. 创建 IAM 角色,授权 Agent 访问 WorkSpaces
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "WorkSpacesAccess",
"Effect": "Allow",
"Action": [
"workspaces:StartWorkspaces",
"workspaces:StopWorkspaces",
"workspaces:DescribeWorkspaces",
"workspaces:DescribeConnectionStatus"
],
"Resource": "*"
},
{
"Sid": "StreamAccess",
"Effect": "Allow",
"Action": [
"workspaces-streaming:Connect"
],
"Resource": "arn:aws:workspaces:${REGION}:${ACCOUNT_ID}:workspace/${WORKSPACE_ID}"
}
]
}
将 ${REGION}、${ACCOUNT_ID}、${WORKSPACE_ID} 替换为实际值。通过 IAM 条件键还可以进一步限制 Agent 只能访问指定 Workspace,避免越权。
2. 用 CLI 启动目标 Workspace 并检查连接状态
# 启动 Workspace
aws workspaces start-workspaces \
--region us-east-1 \
--start-workspace-requests '[{"WorkspaceId":"ws-xxxxxxxxx"}]'
# 等待几秒后检查连接状态
aws workspaces describe-connection-status \
--region us-east-1 \
--workspace-ids '["ws-xxxxxxxxx"]'
3. Python Agent 示例:截图→视觉识别→输入模拟
以下代码展示一个极简的视觉 Agent 循环。它从 WorkSpaces 桌面截图,调用多模态模型识别界面元素,再通过 PyAutoGUI 模拟操作。这段代码需要在 WorkSpaces 客户端所在的主机上运行(或通过远程桌面流获取截图)。
import base64
import pyautogui
import time
from openai import OpenAI
client = OpenAI() # 确保已设置 OPENAI_API_KEY
def capture_screenshot(path="/tmp/workspace_screen.png"):
"""截取当前桌面屏幕"""
screenshot = pyautogui.screenshot()
screenshot.save(path)
return path
def vision_decide(screenshot_path, task_prompt):
"""将截图发送给视觉模型,获取下一步操作指令"""
with open(screenshot_path, "rb") as f:
img_b64 = base64.b64encode(f.read()).decode()
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "system",
"content": "你是一个桌面操作Agent。根据截图和任务,输出下一步操作,"
"格式为 JSON: {\"action\":\"click/input/wait\","
"\"x\":坐标,\"y\":坐标,\"text\":输入内容,\"reason\":理由}"
},
{
"role": "user",
"content": [
{"type": "text", "text": task_prompt},
{"type": "image_url",
"image_url": {"url": f"data:image/png;base64,{img_b64}"}}
]
}
],
max_tokens=300,
)
return response.choices[0].message.content
def execute_action(action_json):
"""根据模型返回的 JSON 执行桌面操作"""
import json
act = json.loads(action_json)
if act["action"] == "click":
pyautogui.click(act["x"], act["y"])
elif act["action"] == "input":
pyautogui.click(act["x"], act["y"])
time.sleep(0.3)
pyautogui.write(act["text"], interval=0.05)
elif act["action"] == "wait":
time.sleep(2)
print(f"[执行] {act['action']} → {act.get('reason','')}")
# --- 主循环:在老旧 ERP 中提交一笔订单 ---
task = "在当前ERP界面中,找到'新建订单'按钮并点击,然后在客户名称字段输入'Acme Corp',最后点击Submit"
for step in range(8): # 最多8步,防止无限循环
path = capture_screenshot()
decision = vision_decide(path, task)
execute_action(decision)
time.sleep(1.5) # 等待界面响应
# 简单终止条件:模型说任务完成
if "完成" in decision or "done" in decision.lower():
print("任务已完成")
break
运行前需安装依赖:pip install openai pyautogui Pillow。这段代码是骨架——生产环境中需要加入错误重试、坐标校验、截图对比确认等容错逻辑。
什么时候该用,什么时候不该用
适合走视觉路径的场景:
- 目标系统确实没有 API,且短期内不会开发(供应商已停维、内部无开发资源)。
- 操作频率低(每天几十次而非几万次),45 倍 Token 成本在可接受范围内。
- 需要跨多个异构桌面系统串联流程,统一用视觉方式反而降低集成复杂度。
不该用的场景:
- 目标系统有 API——哪怕 API 不完美,也比视觉路径便宜且稳定得多。
- 高频批量操作——Token 成本和延迟都会成为瓶颈。
- 对操作精度要求极高——视觉识别有误判风险,模拟点击坐标偏差几像素就可能点错按钮。
落地前的检查清单:
- 确认目标系统是否真的没有 API 或 CLI 接口,避免走弯路。
- 估算单次任务的步骤数和截图频率,乘以 45 倍系数测算 Token 成本。
- 为 Agent 配置最小权限 IAM 角色,限制可访问的 Workspace 范围。
- 设计容错机制:操作后截图验证结果,失败时回退或重试。
- 在 WorkSpaces 中设置自动休眠策略,避免 Agent 离开后桌面持续计费。
AWS 这条路本质上是在承认一个现实:企业 IT 环境里,老旧桌面软件不会很快消失。视觉 Agent 不是最优解,但它是目前能让这些系统进入自动化流水线的最短路径。关键在于别把它当万能方案——能用 API 的地方,永远走 API;只有走不通时,再打开这扇视觉的窗。