加载中

计算机使用:在没有 API 的情况下自动化桌面软件

第 7 课9 分钟

大多数公司至少有一款完全没有 API 的应用。前面课程中介绍的工具无法触及它,因为根本没有可供调用的东西。

Meridian 是一家虚构的工程咨询公司,拥有一款这样的应用。那是一个名为 PlotDesk 的老旧绘图管理软件,同样是虚构的。每周五,都有一个人整天点击相同的屏幕,以导出 PDF 图纸集。PlotDesk 没有 API,也没有命令行,只有窗口和按钮。

计算机使用(Computer use)让 Claude 能够像人一样,通过查看截图并决定点击什么、输入什么文本,来操作这些窗口和按钮,从而操作 PlotDesk。

Meridian 希望 Claude 为项目 MEG-2026-0142 导出今天的 PDF 图纸集。

查看每个操作由谁执行

通过 API,Claude 永远不会直接连接到桌面。Claude 产生的只是一个包含工具调用的响应。您的程序——也就是调用 Messages API 的那个 Python 程序——负责在桌面上执行每个操作并回传结果。

循环是这样的:Claude 请求一张截图。您的程序拍摄一张并将其作为图像发回。Claude 查看后发送下一步操作,比如在给定坐标处点击,或输入某些文本。您的程序执行该操作,循环继续,直到任务完成。这就是您已经熟悉的工具循环,只不过其中一些结果是截图而已。

Meridian 的整个导出过程用了七个操作。

Claude 的操作发生了什么
screenshotClaude 找到 PlotDesk 窗口
left_click点击项目编号字段
typeMEG-2026-0142
left_click点击"打开"
screenshotPlotDesk 显示该项目:Pump Station Replacement,22 张图纸
left_click点击"导出 PDF"
screenshot状态栏显示"Exported MEG-2026-0142_plots.pdf"

在专用容器中运行桌面

Claude 会根据屏幕上出现的任何内容采取行动。网页或图像中的文本可能会覆盖您的指令,导致 Claude 出错。为了限制一次错误操作可能造成的损害,请为桌面提供一个只包含任务所需内容的专用容器或虚拟机。 可以这样设置:

  • 每个会话都使用一个专用容器。
  • 该容器不包含任何凭证,也没有从主机挂载的目录。
  • 该容器只能访问任务所需的网络主机。

您的程序和您的 API 密钥都保留在容器之外。

编写操作方法,让 SDK 运行循环

Python 和 TypeScript SDK 都提供了一个名为 computer toolset(计算机工具集)的类。您需要对其进行子类化,并为任务所需的每个操作编写一个方法。该类会为您构建工具集的 tools 条目,目前处于测试版(beta)。在 Python 中,需要 SDK 1.12.0 或更高版本。

Meridian 实现了该工具集中的三个操作:screenshot、left_click 和 type。任何您未实现的操作都会作为已禁用状态发送给 API。

每个方法都只有一行代码,将工作交给 backend 处理。这是您自己编写的、用于控制桌面的封装器,比如使用 VNC 客户端或 xdotool。这个使用 Python 和 TypeScript 编写的最简 VNC 示例是一个不错的起点,但并非用于生产环境。

在 tools 中传入您的类的一个实例,连同提示一起。Tool Runner(一个 SDK 辅助工具)会为您运行该循环,直到 Claude 返回一个不含工具调用的回复为止。

截至 2026 年 10 月,该工具集已在 Claude API 以及 Google Cloud 上的 Claude Models(由 Google 托管)上提供。Amazon Bedrock、Microsoft Foundry 以及 AWS 上的 Claude Platform 所使用的仍是早期的测试版工具版本。这些版本需要使用不同的 tools 条目和 beta 标头(一种用于开启测试版功能的请求标头)。

让人工审批点击和输入操作

创建实例时,传入一个名为 confirm 的函数。SDK 会在每次操作执行之前调用它。如果它返回 True,该操作就会执行。其他任何返回值都会拒绝该操作,并且 Claude 会被告知该操作被人工拒绝了。

confirm 能看到操作及其输入,但看不到屏幕。而正在监看桌面的人,可以看到 Claude 想要点击的位置上显示的内容。因此 Meridian 自动批准截图操作,并将每一次点击和每一次 type 操作都发送给其操作员——即正在监看桌面的那个人——进行审批。

下面是 Meridian 的程序。其中有三个名称来自 Meridian 自己的代码,而不是 SDK:backend、ask_operator 和 TASK。ask_operator 会向操作员展示该操作并返回他们的答复,TASK 则保存了提示内容。

加载中

判断何时适合使用计算机使用

每张截图都会保留在对话中,所以每一步的成本都比前一步更高。因此,当软件拥有 MCP 服务器(一种将自身功能以工具形式提供给 Claude 的服务)、API 或命令行时,请优先使用那些方式。计算机使用适用于像 PlotDesk 这样完全不具备这些能力的软件。

如果任务仅限于网页内操作,那么浏览器使用工具(browser use tool)是更贴合的选择。它直接读取并操作网页本身,不需要完整的桌面环境。

关键要点

  • Claude 提出操作请求,由您的程序来执行。
  • 桌面在每个会话专属的容器中运行。
  • 您只需实现任务所需的操作。
  • Meridian 的 confirm 函数会将每一次点击和每一次 type 操作都发送给人工审批。
  • 存在直接接口时就使用直接接口,不存在时再使用计算机使用。