用 OpenAI Computer Use 写自动化脚本:从 prompt 到能在 Mac 上点鼠标的 5 步教程

OpenAI 把 Computer Use 能力塞进 openai-agents-pythonopenai-cookbook 后,社区已经不再满足于「让它点一下按钮录个 GIF」。本月 HN 上 24,000 stars 的 trycua/cua、OpenAI 自家的 openai-cookbook(74,784 stars,2026-07-21 还在持续更新)、以及 browser-use(105,859 stars,2026-07-20 pushed)的真实使用场景都在做一件事:把视觉模型套进一个可控、可重试、可调度的工程循环里。本文用 5 步带你把这个循环写出来。

一、为什么不能用裸 prompt

直觉上「给模型一张截图 + 一句『点击登录』」就够了。实际上不是。Computer Use 的可靠性瓶颈从来不在模型本身,而在外层循环的设计——没有裁剪的全屏截图、没有截断的动作列表、没有重试策略的循环,会让一个能用 30 次的任务在第 4 次截图后崩溃。

下面这张图展示了一个最小可工作循环:

mermaid diagram

关键点:截图必须裁剪、动作必须节流、稳定后再截下一帧。否则模型拿到滚动中的页面,坐标立刻漂移。

二、5 步搭建工程循环

Step 1: 环境与依赖

实测可用版本(2026-07-21 GitHub API 实时验证):

  • `openai ≥ 1.50`(支持 `responses` API + `computer_use_preview` 工具)
  • `playwright ≥ 1.45` 或 `browser-use ≥ 0.7`(任选其一驱动浏览器)
  • `pillow ≥ 10.0`(截图裁剪)
  • macOS 14+ 或 Ubuntu 22.04(Windows 需要 `pywinauto`,本文不展开)

pip install -U openai playwright pillow
playwright install chromium

Step 2: Prompt 设计

模型看到的 prompt 不是「请登录」——是结构化的:

You are controlling a Mac desktop. The current screen is attached as
{image}. Return a JSON action list. Allowed actions:

  • {"action": "click", "x": 120, "y": 340}
  • {"action": "type", "text": "user@example.com"}
  • {"action": "scroll", "dx": 0, "dy": -300}
  • {"action": "key", "key": "Return"}
  • {"action": "done", "reason": "logged in"}

Never invent coordinates outside the visible area. Always crop your mental viewport to the {viewport_w}x{viewport_h} size.

viewport_w/viewport_h 必须在 prompt 里写死,否则模型会给 iPhone 尺寸的坐标。

Step 3: 循环控制

核心循环(用 openai-agents-python 28,065 stars 项目支持的 Runner 模式简化):

for step in range(MAX_STEPS):
    img = capture_and_crop(window_box)  # 裁剪到目标窗口
    actions = ask_model(img, history)
    for act in actions:
        run_on_mac(act)                # PyAutoGUI 或 AppleScript
    if any(a.get("action") == "done" for a in actions):
        break
    time.sleep(0.8)                    # 等页面稳定

Step 4: 截图裁剪

不做裁剪的循环,每次送进模型的图片是 4K 全屏,token 成本直接翻 3 倍。代码片段:

from PIL import Image
img = Image.open(full_screen)
crop = img.crop(window_box)            # window_box 是 (x, y, x+w, y+h)
crop.save("state.png", optimize=True)

裁剪后模型看到的画面就是「目标窗口内部」,坐标预测误差显著下降。

Step 5: 重试与降级

模型不是 oracle。trycua/cuaContainer 抽象里专门处理三类失败:

| 失败模式 | 处理 |
|---------|------|
| 模型返回坐标越界 | 重新截图,prompt 强化 viewport 边界 |
| 动作执行后页面没变化 | 等 1.5s 二次截图,让模型自纠 |
| done 但实际未完成 | 设 verify=True,用后置断言(如 URL 匹配)二次确认 |

下面是 macOS 上整个 pipeline 的时序:

mermaid diagram

三、关键点

  • 裁剪截图比调 prompt 性价比高:viewport 写死 + 裁剪到目标窗口,坐标误差立刻降一档。
  • 节流比加速更重要:800ms 等待比任何「fast path」都稳,滚动和 SPA 路由尤其需要。
  • 重试逻辑必须有上限:超过 15 步仍未 `done` 应该熔断,否则一次失败任务会烧掉几美元 token。
  • Mac 上用 PyAutoGUI,Linux 用 `xdotool`,Windows 用 `pywinauto` —— 别试图抽象一层统一接口,3 平台输入栈差异巨大。

四、行业影响

browser-use、stagehand、cua 三个项目本月都在刷新高 star 上限,说明「视觉模型 + 系统控制」已经从科研样机阶段进入工程工具阶段。下一波迭代大概率集中在更小尺寸的专用 CUA 模型(Holo1.5 已经迈出第一步)和沙箱安全(AI ClickFix 那种 prompt injection 攻击是真实威胁)。

五、结语

Computer Use 真正的难点不在 prompt,而在把它放进一个能「稳定、可观测、可恢复」的工程循环里。先把 5 步循环跑通,再考虑多步任务编排——这是 2026 年写桌面自动化的正确打开方式。

参考资料

官方文档

开源项目

行业报道

社区讨论

对比基准


本文由 AI 生成。内容基于公开资料整理,可能存在事实偏差,引用链接请以原始来源为准。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注