传统 agent 靠调 API 干活--你得先给它开好工具接口。Computer Use 走的是另一条路:模型截屏「看」当前画面,输出鼠标坐标和键盘指令,直接点按钮、填表单、切窗口,像人一样操作图形界面。理论上,任何你能用的网页和桌面软件,agent 都能用。
这条路线 2025 年 10 月由 Anthropic 的 Computer Use 能力推开,大半年过去已不是一家独苗(详见同站 Computer Use 时代热点)。但「能用」和「敢用」之间隔着一条鸿沟:能操作电脑等于能闯祸。这篇 SOP 给你一个可复制的搭建流程:沙箱准备 -> 接 Computer Use API -> 主循环 -> 安全护栏 -> 调优,五步。代码基于 Anthropic 官方文档与 trycua/cua 官方仓库核实,截至 2026-08-11,API 以官方为准。与同批的 Computer Use Agent 横评(选哪个方案)、cua 开源项目解析(沙箱原理深入)互补:那两篇解决「选什么、为什么」,这篇解决「怎么动手搭」。
一、Computer Use 不是工具调用
先把一个常见混淆理清。同站的 工具调用 SOP 讲的是 function calling / tool use--模型产出结构化 JSON(调哪个函数、传什么参数),你的代码执行后回填结果。那条路线的前提是:软件为你开了接口。
Computer Use 不需要接口。模型直接「看」屏幕截图,理解界面状态,然后输出动作:鼠标移到坐标 (x, y)、左键点击、输入文本、按快捷键。执行后截一张新图,模型再看、再决策,循环往复。这叫 GUI 操控(GUI grounding),不是 API 调用。
两者的核心差异:
| 维度 | 工具调用(function calling) | Computer Use(GUI 操控) |
|---|---|---|
| 前提 | 软件有 API/工具接口 | 不需要接口,看屏幕就能用 |
| 输入 | 结构化 JSON 参数 | 屏幕截图(图像) |
| 输出 | 函数名 + 参数 | 鼠标坐标 + 键盘指令 |
| 延迟 | 低(一次 API 往返) | 高(截图 + 视觉推理 + 执行) |
| 成本 | 低 | 高(每步都要传截图) |
| 适用 | 你能控制的系统 | 没接口的老旧系统/任意网页 |
一句话:工具调用是「软件为你开路」,Computer Use 是「没路我自己蹚」。后者更通用,但更慢更贵更难控。选哪条路取决于目标系统有没有接口。
二、SOP 五步流程
Step 1:环境与沙箱准备
第一原则:永远不要让 computer-use agent 直接操作你的生产机器。能操作电脑 = 能闯祸。用沙箱隔离。
trycua/cua 提供开箱即用的沙箱,支持 Linux/macOS/Windows,本地 QEMU 或云端均可:
pip install cua # 需 Python 3.11+from cua import Sandbox, Image
# 创建一次性 Linux 沙箱(用完即弃,与宿主机隔离)
async with Sandbox.ephemeral(Image.linux()) as sb: # 也可 .macos() .windows()
await sb.shell.run("echo hello") # 跑命令
shot = await sb.screenshot() # 截图
await sb.mouse.click(100, 200) # 点击坐标
await sb.keyboard.type("Hello!") # 输入文本也可以用 Docker 起一个带 VNC 的 Linux 桌面容器,或用 cua 的 Lume 组件跑 macOS 虚拟机(基于 Apple Virtualization.Framework)。核心要求:沙箱有图形桌面、能截图、能模拟鼠标键盘,且与你的真实环境物理隔离。
Step 2:接 Computer Use API
Anthropic 的 computer use 走 beta 通道。工具定义、beta 标记、模型选择三件套:
import anthropic
client = anthropic.Anthropic() # ANTHROPIC_API_KEY 走环境变量
# 工具定义:告诉模型「你有一台 1024x768 的电脑可操控」
tools = [{
"type": "computer_20250124", # 工具类型(版本化的)
"name": "computer",
"display_width_px": 1024, # 屏幕宽(建议 <=1024,大了贵且慢)
"display_height_px": 768,
}]
BETAS = ["computer-use-2025-01-24"] # beta 标记几个关键字段:type 必须是版本化的工具类型(computer_20250124 或更新版本);display_width_px / display_height_px 定义模型的坐标空间,模型输出的坐标基于这个尺寸;官方建议分辨率不超过 XGA(1024x768)或 WXGA(1280x800),越高每步截图的 token 成本越大。模型通过 client.beta.messages.create() 调用,带上 betas 参数。需选用支持 computer use 的模型版本,以官方文档为准。
Step 3:主循环(截图-决策-执行)
这是整个 agent 的心脏。模型截屏 -> 看图决策 -> 输出动作 -> 你执行 -> 截新屏 -> 再看再决策,循环直到任务完成或触发护栏。
模型输出的动作(tool_use block 的 input 字段)包含 action 和配套参数。computer_20250124 支持的 action:screenshot(截图)、mouse_move(移动到坐标)、left_click / right_click / double_click / triple_click(点击)、left_click_drag(拖拽,需起止坐标)、type(输入文本)、key(按键组合如 ctrl+c)、scroll(滚动)、wait(等待)、cursor_position(查光标位置)。
循环逻辑:调 API -> 检查 stop_reason,若不是 "tool_use" 说明模型认为任务完成 -> 否则遍历 tool_use block 执行动作 -> 把结果回填为 tool_result -> 再调 API。完整代码见第三节。
Step 4:安全护栏(白名单 + 人工确认)
能操作电脑的 agent 必须加护栏,这是红线不是建议。三道防线:
第一道:操作白名单。 只允许 agent 执行预定义的安全动作集合。比如限定只能在一个特定网页上操作、只能填表不能提交、只能读不能写。在执行层(你的代码)拦截,不依赖模型自觉。
第二道:敏感操作人工确认。 定义一组敏感关键词(delete、rm、drop、支付、转账、提交订单),当模型输出的动作参数命中关键词时,暂停循环弹窗让人确认。agent 不应该在你不知情的情况下删文件、花钱、提交表单。
第三道:沙箱隔离。 agent 只在沙箱里活动,沙箱与生产环境物理隔离。就算 agent 失控,最坏也只是搞坏一个一次性沙箱,不会碰到你的真实系统。别碰生产环境,别碰真实账号,别碰真金白银。
Step 5:调优
跑通之后优化三件事:
截图成本。 每步都要传一张截图给模型,是 token 消费大户。优化手段:控制分辨率(1024x768 够用)、截屏后压缩、只保留最近 N 张截图(老截图截掉减少上下文)。社区参考量级:一次完整任务可能跑 10-50 步,每步截图加推理约消耗数千到上万 token,单次任务成本在几美分到几美元量级(以实际 API 计费为准)。
坐标精度。 模型有时会把按钮坐标算偏几个像素。优化手段:给 system prompt 写清屏幕分辨率和缩放比、让模型先 screenshot 再操作而非盲点、对关键点击加容错(点偏了再截屏重试)。
死循环检测。 模型可能陷入「点 A -> 截图 -> 发现没变 -> 再点 A」的死循环。优化手段:记录最近 N 步的动作序列,检测到重复模式就强制中断或换策略。
三、最小可跑示例
下面这段 Python 把五步串起来:cua 沙箱 + Anthropic Computer Use API + 安全护栏 + 主循环。已通过 ast.parse 语法验证。
import anthropic
from cua import Sandbox, Image
client = anthropic.Anthropic() # ANTHROPIC_API_KEY 走环境变量
tools = [{
"type": "computer_20250124",
"name": "computer",
"display_width_px": 1024,
"display_height_px": 768,
}]
BETAS = ["computer-use-2025-01-24"]
MAX_STEPS = 15
SENSITIVE = ["delete", "rm ", "drop", "支付", "转账", "提交订单"]
def is_sensitive(inp: dict) -> bool:
text = str(inp).lower()
return any(k in text for k in SENSITIVE)
async def execute_action(sb, inp: dict) -> str:
"""把模型输出的动作映射到 cua sandbox 执行,返回结果文本"""
action = inp.get("action", "")
if action == "screenshot":
await sb.screenshot()
return "screenshot taken"
coord = inp.get("coordinate")
if action == "mouse_move" and coord:
return f"moved to {coord}"
if action in ("left_click", "right_click", "double_click") and coord:
await sb.mouse.click(coord[0], coord[1])
return f"{action} at {coord}"
if action == "type":
await sb.keyboard.type(inp.get("text", ""))
return f"typed: {inp.get('text', '')[:80]}"
if action == "key":
return f"key pressed: {inp.get('text', '')}"
return f"action {action} executed"
async def run_agent(task: str):
async with Sandbox.ephemeral(Image.linux()) as sb:
messages = [{"role": "user", "content": task}]
for step in range(MAX_STEPS):
resp = client.beta.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=4096,
tools=tools,
messages=messages,
betas=BETAS,
)
# stop_reason 不是 tool_use = 模型认为任务完成
if resp.stop_reason != "tool_use":
print(f"第 {step} 步:任务完成")
return resp.content
messages.append({"role": "assistant", "content": resp.content})
for block in resp.content:
if block.type != "tool_use":
continue
# 安全护栏:敏感操作需人工确认
if is_sensitive(block.input):
ok = input(f"敏感操作 {block.input.get('action')},确认?(y/n): ")
if ok.lower() != "y":
result = "用户拒绝执行"
else:
result = await execute_action(sb, block.input)
else:
result = await execute_action(sb, block.input)
# 回填工具结果,tool_use_id 必须与 block.id 对应
messages.append({
"role": "user",
"content": [{"type": "tool_result",
"tool_use_id": block.id,
"content": result}],
})
print(f"达到最大步数 {MAX_STEPS},强制停止")几个要点:resp.stop_reason != "tool_use" 是任务完成的信号(模型不再请求工具,转为输出最终文本);block.input 是模型输出的动作参数(dict,含 action、coordinate、text 等);tool_result 回填时 tool_use_id 必须与 block.id 对应,否则 API 报错。截图实际应返回 base64 图像数据给模型(此处简化为文本,完整实现需把 sb.screenshot() 的返回转 base64,作为 image block 填入 tool_result 的 content 字段)。
四、五个踩坑
坑 1:截图太大,token 账单爆炸
每步都要传一张截图,高分辨率截图一张就几千 token。跑 30 步任务,光截图就烧掉数万 token。社区有人反馈早期测试「十分钟烧掉十美元」。修法:分辨率压到 1024x768、截图后压缩质量、只保留最近 3-5 张截图截掉历史。设 MAX_STEPS 封顶,别让 agent 无限跑。
坑 2:坐标精度漂移,点错按钮
模型把按钮坐标算偏几像素,点到了隔壁的删除按钮而不是编辑按钮。这是所有 CUA 的通病。修法:让模型操作前先 screenshot 看清画面;system prompt 里写清屏幕分辨率;关键操作后截图验证结果(比如点击后检查 URL 是否变化、页面是否出现预期文本)。
坑 3:死循环,agent 反复点同一个地方 模型陷入「点击 -> 截图发现没变 -> 再点」的循环,token 和时间双双浪费。修法:记录最近 N 步的动作序列,检测到连续重复动作就强制中断;给 system prompt 写「如果同一操作连续两次没有效果,换一种方法或向用户报告」。
坑 4:敏感操作无确认,agent 直接闯祸 agent 自作主张删了文件、提交了订单、点了「确认支付」。能操作电脑 = 能闯祸,没有人工确认的 CUA 就是定时炸弹。修法:执行层加敏感关键词检测,命中就暂停等人工确认。别指望 system prompt 里的「请不要删除文件」能拦住模型--那是建议不是约束,必须在代码层强制。
坑 5:沙箱没隔离好,agent 逃逸到宿主机
沙箱配置不当,agent 通过共享目录、网络接口或剪贴板访问到宿主机的真实文件系统。修法:沙箱不挂载宿主机的敏感目录、网络默认隔离或走代理、用完即弃的 ephemeral 沙箱(cua 的 Sandbox.ephemeral() 即此设计)。别在沙箱里放任何真实凭证。
五、常见问题
Q1:Computer Use 和 RPA(按键精灵)有什么区别? RPA 录制鼠标轨迹和键盘输入然后回放,是脚本,屏幕布局一变就失效。Computer Use 基于视觉模型,像人一样看屏幕理解界面状态再决策,不需要预设坐标,按钮挪了位置也能找到。RPA 精确但脆弱,Computer Use 灵活但慢且贵。
Q2:能不能不用沙箱直接在我电脑上跑? 技术上能,但强烈不建议。agent 能操作电脑就能闯祸--误删文件、乱发邮件、点到不该点的按钮。沙箱的成本(多一个虚拟机/容器)远低于一次误操作的代价。最低限度也要用 Docker 容器隔离,别让 agent 直接碰宿主机。
Q3:除了 Anthropic 还有哪些 Computer Use 方案? OpenAI Operator(云端浏览器)、Google Project Mariner、智谱 AutoGLM(手机端)、微软 Copilot Studio Computer Use(Windows 桌面)、字节 UI-TARS(开源)等。各家定位和成熟度不同,详见同批 Computer Use Agent 横评。
Q4:一次任务大概要花多少钱?
取决于步数和截图分辨率。社区参考量级:一个 10-30 步的任务,每步截图加推理约数千 token,总成本在几美分到几美元量级。复杂任务可能更多。建议开发阶段用低分辨率 + MAX_STEPS 封顶控制成本,生产环境监控每任务实际 token 消耗。具体以 API 计费为准。
Q5:Computer Use 能完全替代工具调用吗? 不能,两者互补。有 API 接口的系统用工具调用更快更便宜更可靠;没有接口的老旧系统或任意网页才用 Computer Use。一个成熟的 agent 通常两者都用:能调 API 的调 API,调不了的才去操作图形界面。详见同站 工具调用 SOP。
参考来源
- Anthropic Computer Use 官方文档(computer_20250124 工具类型、beta 标记、action 列表):https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/computer-use-tool
- Anthropic computer-use-demo 官方仓库(loop.py 主循环、tools 定义):https://github.com/anthropics/anthropic-quickstarts/tree/main/computer-use-demo
- trycua/cua 官方仓库(Sandbox API、Image、Lume 虚拟化):https://github.com/trycua/cua
- cua.ai 官方文档(sandbox SDK、driver、bench):https://cua.ai/docs
- 本站《Computer Use 时代热点》:https://aiwebcool.com/zh/computer-use-agent-era-hotspot
- 本站《Computer Use Agent 横评》:https://aiwebcool.com/zh/ai-computer-use-agents-comparison-review
- 本站《cua 开源项目解析》:https://aiwebcool.com/zh/cua-computer-use-resource
- 本站《AI Agent 工具调用 SOP》:https://aiwebcool.com/zh/ai-agent-tool-calling-sop