# Computer use API：用你的代码让模型使用浏览器

> Computer use API 让你的代码可以把一块屏幕交给模型。模型看着截图，要求点击、按键或滚动；你的程序去执行，再把新的截图送回去，这个循环一直重复到任务完成。Anthropic 和 OpenAI 都提供它，也都公开了可以运行的示例。

Mindket 编辑部 · 发布于 2026-11-06 · 更新于 2026-11-06 · https://mindket.com/cn/learn/ai-browser-agents/computer-use-api

## 要点

- 在容器或用完即弃的浏览器里运行 computer use 示例，不要在你已登录的会话里运行。
- 把截图缩放到厂商推荐的尺寸，点击坐标自己映射回去，不要交给自动缩放。
- 第一次运行之前，先给循环加上步数上限和时间上限，因为厂商的骨架代码把这两样留给了你。
- 打开保存下来的页面或文件，和你的请求对一遍，因为最终答案不是证据。

## 用大白话讲这个循环

模型自己碰不到机器，碰的是你的程序，所以本课是写给开发者的。截图是当前屏幕的一张图片，动作是一条结构化的请求，比如在某个 x、y 位置点击一下。

OpenAI 的指南把它数成三步：发送任务，执行返回的动作，再返回一张截图。然后带着新的屏幕重新开始。Anthropic 的示例把同一个循环叫作采样循环，也就是一个不断调用模型的函数，直到某次回复不再要求任何东西。

OpenAI 的指南给出两种直接使用 API 的方式。用代码执行时，模型写出控制浏览器的代码，比如用 Playwright 或 PyAutoGUI，由你的应用去运行。用 computer 工具时，模型返回结构化的鼠标和键盘动作，由你的应用翻译成输入。对于 GPT-6 Astra，OpenAI 推荐代码执行，并说 computer 工具仍然作为备选方案受到支持。本课讲 computer 工具的循环，因为它最直观地展示了截图循环，Anthropic 的工具也是同样的形状。

| 步骤 | OpenAI（computer 工具，Responses API） | Anthropic（Messages API） |
| --- | --- | --- |
| 打开这个工具 | tools=[{"type": "computer"}] | 示例用 tool_collection.to_params() 生成工具列表，最新的工具集不需要 beta 请求头。 |
| 模型提出要求 | 一个 computer_call 项，它的 actions 数组可以包含多个动作 | 回复里的一个 tool_use 块 |
| 你来回答 | 一个 computer_call_output，带 call_id 和一张 computer_screenshot 图片 | 一个 tool_result 块，带 tool_use_id 和一张 base64 编码的 PNG 图片 |
| 对话继续 | 下一次请求里带上 previous_response_id | 你把回复和工具结果追加到 messages 列表里 |
| 循环结束 | 响应里没有 computer_call | 回复里没有 tool_use 块，所以示例没有结果可发 |

## 模型能要求什么

每个动作都是一条需要你的代码翻译成真实输入的请求。下表把 OpenAI 的集成方案和 Anthropic 示例代码里的动作名并排列了出来。

Anthropic 的列表随每个带日期的工具版本不断增加。最新的 computer_toolset_20260801，为每个动作声明一个工具，不再是一个带 action 字段的 computer 工具。一个模型支持工具集，或者支持它训练时用的那些带日期的早期版本，所以工具版本要和模型对上。

| 你想做的事 | OpenAI 的 computer 工具 | Anthropic 的 computer 工具 |
| --- | --- | --- |
| 点击 | click，带一个 button 字段 | left_click、right_click、middle_click |
| 双击 | double_click | double_click |
| 拖动 | drag | left_click_drag |
| 移动指针 | move | mouse_move |
| 滚动 | scroll | scroll |
| 输入文字 | type | type |
| 按键 | keypress | key、hold_key |
| 等待 | wait | wait |
| 看屏幕 | screenshot | screenshot |
| 只在一边的列表里 | 没有列出额外的动作 | triple_click、left_mouse_down、left_mouse_up、cursor_position，以及 computer_20251124 里的 zoom |

## 运行 OpenAI 的订房示例

OpenAI 的示例应用仓库里有一个虚构的酒店订房实验室，还有一个简短的 SDK 示例，通过 OpenAI 的 ComputerToolset 辅助工具在上面运行 Responses 循环。由一个 Playwright 驱动去截图，并执行鼠标和键盘动作。仓库里另外两个完整的应用走的是指南里的另一条路，本课不运行它们：OpenAI 说，它围绕会写代码来操作软件的模型来搭这个循环。你需要 Node.js 22.20.0，以及一个能用所配置模型的 OpenAI API 密钥。每次运行都会真实调用 API，消耗你的额度。

脚本会为这个实验室启动一个本地服务器，驱动一个新的无头 Chromium 上下文（没有可见窗口的浏览器），拦截对其他网站的请求，运行结束时把两者都关掉。OpenAI 说，它不会控制你的桌面，也不会打开你自己的浏览器会话。加上 --prompt 可以试另一个订房请求，加上 --model 可以换一个支持 computer use 的模型。

````bash
git clone https://github.com/openai/openai-cua-sample-app.git
cd openai-cua-sample-app
corepack enable
pnpm install --frozen-lockfile
cp .env.example .env
export OPENAI_API_KEY="your_api_key_here"
pnpm --dir javascript-app/examples exec playwright install chromium-headless-shell
pnpm --dir javascript-app/examples start
````

1. 克隆仓库，启用 Corepack，安装依赖，再设置你的 API 密钥，对应代码块的前六行。
2. 安装示例用的浏览器，再启动示例，对应最后两行。
3. 读脚本打印出来的答案。
4. 打开保存下来的最终页面 data/sdk-booking.png，把你看到的订房和你请求的订房对一遍。

> 这些命令是 OpenAI 的，2026 年 11 月 6 日抄自示例应用的 README：先是它的 First Run 命令，再是它的 Node.js 示例命令，去掉了重复的 pnpm install 那一行。这里没有运行过任何命令。

## 或者在 Docker 里运行 Anthropic 的示例

Anthropic 的 computer use 示例在一个 Docker 容器里运行一个 Linux 桌面，旁边放着一个聊天界面。容器运行起来之后，打开 http://localhost:8080，就能同时看到聊天和桌面。示例的 README 还列出了只看聊天的 http://localhost:8501，和只看桌面的 http://localhost:6080/vnc.html。

README 说得很直白：各个部分只是弱隔离。智能体循环就跑在 Claude 所控制的那个容器里，一次只能服务一个会话，会话之间需要重启或重置。它开头列了四条预防措施。第一，用权限最小的专用虚拟机或容器。第二，不要给敏感数据，比如账号登录信息。第三，把联网限制在一份域名白名单内。第四，让人来确认会产生实际后果的决定。[第 4 课](https://mindket.com/cn/learn/ai-browser-agents/browser-agent-safety)会讲这四条。

````bash
export ANTHROPIC_API_KEY=%your_api_key%
docker run \
    -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
    -v $HOME/.anthropic:/home/computeruse/.anthropic \
    -p 5900:5900 \
    -p 8501:8501 \
    -p 6080:6080 \
    -p 8080:8080 \
    -it ghcr.io/anthropics/anthropic-quickstarts:computer-use-demo-latest
````

> 这条命令来自 Anthropic computer-use-demo 的 README，2026 年 11 月 6 日抄下，这里没有运行过。用 -e 设置 WIDTH 和 HEIGHT，可以改变屏幕尺寸。

## OpenAI 的 computer 工具循环代码

这是 OpenAI 集成方案里 computer 工具的循环骨架。它假设你自己写好了 handle_computer_actions 和 capture_screenshot。OpenAI 说它演示的是这一来一回，而不是完整的运行环境，并要你加上权限检查、取消，以及步数和时间上限。

先看开头几行里的停止规则：响应里没有 computer_call，函数就返回。其余的都是一次往返。

````python
import base64

from openai import OpenAI

client = OpenAI()


def computer_use_loop(target, response):
    while True:
        computer_call = next(
            (item for item in response.output if item.type == "computer_call"),
            None,
        )
        if computer_call is None:
            return response

        handle_computer_actions(target, computer_call.actions)

        screenshot = capture_screenshot(target)
        screenshot_base64 = base64.b64encode(screenshot).decode("utf-8")

        response = client.responses.create(
            model="gpt-6.1-sol",
            tools=[{"type": "computer"}],
            previous_response_id=response.id,
            input=[
                {
                    "type": "computer_call_output",
                    "call_id": computer_call.call_id,
                    "output": {
                        "type": "computer_screenshot",
                        "image_url": f"data:image/png;base64,{screenshot_base64}",
                        "detail": "original",
                    },
                }
            ],
        )
````

> 抄自 OpenAI 的 computer use 集成方案，和原文一致。两个辅助函数留给你自己写，这里没有运行过这段代码。

## Anthropic 的循环代码

Anthropic 的示例把循环放在 sampling_loop 里。摘录保留了调用 API、助手消息和循环结尾的部分，# ... 表示省略的代码。回复里没有 tool_use 块时，tool_result_content 保持为空，函数就返回。

示例还会丢掉旧的截图。它的辅助函数把工具结果里除最近几张之外的图片都删掉，因为对话越往后，截图越不值钱，而每一张都要随每次请求再发一遍。

````python
async def sampling_loop(
    # ...
):
    while True:
        # ...
            raw_response = client.beta.messages.with_raw_response.create(
                max_tokens=max_tokens,
                messages=messages,
                model=model,
                system=[system],
                tools=tool_collection.to_params(),
                # The toolset group has no beta flag, so on Vertex/Bedrock the
                # list can be empty; omit the header rather than send it blank.
                betas=betas or omit,
                extra_body=extra_body,
            )
        # ...
        response = raw_response.parse()

        response_params = _response_to_params(response)
        messages.append(
            {
                "role": "assistant",
                "content": response_params,
            }
        )
        # ...
        if not tool_result_content:
            return messages

        messages.append({"content": tool_result_content, "role": "user"})
````

> 摘自 anthropics/anthropic-quickstarts 的 loop.py 里的 sampling_loop。这些行是文件原有的，# ... 表示省略的代码。这里没有运行过。

## 屏幕尺寸，以及该期待什么

Anthropic 不建议发送超过 XGA（1024x768）或 WXGA（1280x800）的截图，这是两种标准的屏幕尺寸。把缩放交给 API，准确率比你自己在工具里缩放低，速度也更慢。自己实现时，它推荐 XGA：较大的屏幕缩小到 1024x768，再把模型给出的坐标按比例映射回原来的尺寸；较小的屏幕则用黑边补到 1024x768。

另一个限制是准确率。Anthropic 在 2024 年 10 月开放 computer use 公测时，称这项功能还处于实验阶段，有时很笨拙，也容易出错。下面的数字出自那篇文章，其中两个来自 OSWorld，Anthropic 说它评估的是 AI 模型像人一样使用电脑的能力。它们说的是一个后来已被取代的模型，Claude 3.5 Sonnet。本课读到的来源里没有更新的基准，所以要用你自己的任务去测。

**屏幕尺寸和 2024 年 10 月的基准，按厂商的报告**

- **1024x768** 自己实现 computer use 时，Anthropic 推荐发送的屏幕尺寸（XGA） (来源：[anthropics/anthropic-quickstarts: computer use demo README](https://github.com/anthropics/anthropic-quickstarts/tree/main/computer-use-demo), 2026-11-06 查阅)
- **14.9%** Claude 3.5 Sonnet 在 OSWorld 仅截图类别里的得分，2024 年 10 月 (来源：[Anthropic: Computer use, Claude 3.5 Sonnet and Claude 3.5 Haiku](https://www.anthropic.com/news/3-5-models-and-computer-use), 2026-11-06 查阅)
- **22.0%** 同一个模型在 OSWorld 上获得更多步数去完成任务时的得分 (来源：[Anthropic: Computer use, Claude 3.5 Sonnet and Claude 3.5 Haiku](https://www.anthropic.com/news/3-5-models-and-computer-use), 2026-11-06 查阅)

## 在截图之外核对结果

OpenAI 的指南要你用步数、时间或成本上限来约束这次运行，支持取消，并且核对实际的结果，而不是只信模型的最终答案。示例应用的 README 用一句话说了同样的意思：最终答案不能证明任务成功了。

OpenAI 的集成方案把这个习惯写成了代码。一个桌面示例让模型在编辑器里输入一条笔记并保存，脚本随后自己去读保存下来的文件，对不上就报错，旁边的注释说保存是异步的，应该独立于截图去检查文件。

## 看看 Anthropic 的视频

Anthropic 在自己的 YouTube 频道上发了一个视频，讲怎样用 computer use 自动化运营。

[Claude | Computer use for automating operations](https://www.youtube.com/watch?v=ODaHJzOyVCQ)

Anthropic 在自己的 YouTube 频道上发布的 computer use 自动化运营视频。

## 常见错误

- 发送全分辨率截图，还指望自动缩放，Anthropic 说这样会降低准确率。
- 让循环跑起来却没有步数或时间上限。OpenAI 把它的骨架标成草图，这两样留给你自己加。
- 在你日常使用的桌面会话里运行示例。OpenAI 的 Python 应用会控制你真实的鼠标和键盘，它的 README 说要用专用的桌面会话。
- 给模型配上它没有为之训练的工具版本。Anthropic 的 README 让你去它的文档里查每个模型支持的版本。
- 轻信最后一条消息。要去打开 data/sdk-booking.png 或保存下来的文件。
- 把示例指向你已登录的网站。OpenAI 的示例用的是虚构的实验室，Anthropic 建议用容器。

## 自己试一试

- 运行 OpenAI 的订房示例，打开 data/sdk-booking.png，把订房和你的请求对一遍。
- 换一个 --prompt 再运行一次，再对一遍。
- 启动 Anthropic 的 Docker 示例，让它打开 Firefox，并在 http://localhost:6080/vnc.html 看桌面。
- 给 OpenAI 的循环骨架加一个计数器，在你选定的回合数之后停下，并打印一个任务用了多少回合。

## 下一课：让浏览器智能体保持安全

[浏览器智能体的安全](https://mindket.com/cn/learn/ai-browser-agents/browser-agent-safety)是第 4 课，讲提示词注入、两家厂商要你自己加的控制措施，以及让浏览器智能体不闯祸的习惯。

## 自测一下

1. 在 OpenAI 的 computer 工具循环里，执行完模型的动作之后，你送回什么？

   A. 一个重复任务的新请求
   B. 一个带 call_id 和截图的 computer_call_output
   C. 一个带图片的 tool_result 块

   答案：B。 OpenAI 的骨架代码返回的是带 call_id 和 computer_screenshot 的 computer_call_output，而 tool_result 块是 Anthropic 对同一步的叫法。

2. Anthropic 示例的循环怎么知道任务结束了？

   A. 截图变成空白
   B. 数到固定的回合数
   C. 页面标题变了
   D. 回复里没有 tool_use 块，所以没有结果可发

   答案：D。 在 loop.py 里，tool_result_content 为空时函数就返回，也就是回复没有要求任何工具的时候。

3. 你的屏幕比 XGA 大。Anthropic 建议怎么做？

   A. 把图片缩小到 XGA，再把模型给出的坐标映射回原来的尺寸
   B. 发送全分辨率，让 API 去缩放
   C. 把截图裁成左上角的一块

   答案：A。 README 说，依赖 API 来缩放会降低准确率、拖慢响应，建议自己在工具里缩放。

4. 示例运行结束，打印出一个很自信的最终答案。你在依赖它之前做什么？

   A. 相信它，因为模型看过屏幕
   B. 换一个更长的提示词再运行
   C. 打开保存下来的最终页面，和你的请求对一遍
   D. 把保存下来的截图删掉

   答案：C。 OpenAI 示例应用的 README 说，最终答案不能证明任务成功，所以要检查结果。

## 常见问题

### Computer use API 是什么？

两家厂商都把它做在模型 API 里，作为一个由你来声明的工具。模型提出动作，你的程序去执行，并报告屏幕现在的样子。OpenAI 的指南里还有第二条路，也就是上文讲的代码执行。

### OpenAI 和 Anthropic 的 computer use 工具有什么区别？

循环是一样的，名字不同。OpenAI 的 computer 工具返回一个带 actions 数组的 computer_call，期待你回一个带截图的 computer_call_output。Anthropic 返回一个 tool_use 块，期待你回一个带图片的 tool_result 块。

### 循环一定要我自己写吗？

不一定。OpenAI 的 SDK 把 Responses 循环包成了 ComputerToolset，Anthropic 的示例自带一个采样循环。要逐步掌控时才需要自己写，OpenAI 的指南里有写法。

### 在我自己的电脑上运行安全吗？

不做防护就不安全。Anthropic 的 README 建议用专用的虚拟机或容器，OpenAI 的示例应用 README 说它的代码以你的用户权限运行，也没有操作系统级的沙箱。

### Computer use 的准确率怎么样？

本课的来源里只有一个基准，来自 2024 年 10 月：Claude 3.5 Sonnet 在 OSWorld（一个电脑任务基准）上，哪怕给了更多步数，得分也低于 25%。Anthropic 当时称这项功能还在实验阶段，容易出错，并预期它会很快改进，所以要用你自己的任务去测。

### 运行一次 computer use 要花多少钱？

每次模型请求都按输入和输出的 token 计费，OpenAI 的指南说，截图算作图像输入。成本随每一步增长，所以要给循环设置步数上限。

## 资料来源

- [OpenAI：Computer use 指南](https://developers.openai.com/api/docs/guides/tools-computer-use) (2026-11-06 查阅)
- [OpenAI：Computer use 集成方案](https://developers.openai.com/api/docs/guides/tools-computer-use-integration) (2026-11-06 查阅)
- [openai/openai-cua-sample-app 的 README](https://github.com/openai/openai-cua-sample-app) (2026-11-06 查阅)
- [anthropics/anthropic-quickstarts：computer use 示例的 README](https://github.com/anthropics/anthropic-quickstarts/tree/main/computer-use-demo) (2026-11-06 查阅)
- [anthropic-quickstarts：computer-use-demo 的 loop.py](https://github.com/anthropics/anthropic-quickstarts/blob/main/computer-use-demo/computer_use_demo/loop.py) (2026-11-06 查阅)
- [anthropic-quickstarts：computer-use-demo 的 computer.py](https://github.com/anthropics/anthropic-quickstarts/blob/main/computer-use-demo/computer_use_demo/tools/computer.py) (2026-11-06 查阅)
- [Anthropic：Computer use、Claude 3.5 Sonnet 与 Claude 3.5 Haiku](https://www.anthropic.com/news/3-5-models-and-computer-use) (2026-11-06 查阅)
- [Anthropic 的 YouTube 频道：Computer use 自动化运营](https://www.youtube.com/watch?v=ODaHJzOyVCQ) (2026-11-06 查阅)

[浏览 MCP 服务器](https://mindket.com/cn/mcp-servers)
