← 返回博客

Claude 计算机使用工具:AI 桌面自动化完整开发者指南

· Save Team
claudeaicomputer-useautomationapideveloperanthropic

如果你能告诉 AI “打开 Firefox,导航到一个网站,填写表单,然后保存结果”——它真的能做到呢?不是通过脆弱的 Selenium 脚本,不是通过自定义 API 集成,而是像人类一样看着屏幕,使用鼠标和键盘。

这正是 Claude 的计算机使用工具所做的事情。

什么是计算机使用?

计算机使用是一个测试版 API 功能,让 Claude 可以通过以下方式与桌面环境交互:

  • 截图捕获 — Claude 可以看到屏幕上的内容
  • 鼠标控制 — 点击、拖拽、滚动
  • 键盘输入 — 输入文本、按下快捷键
  • 桌面自动化 — 与任何应用程序交互

关键词是任何。与传统自动化(用于浏览器的 Selenium、用于 macOS 的 AppleScript)不同,Claude 不需要特殊 API 或元素选择器。它查看屏幕上的像素并决定点击什么。就像你一样。

工作原理(Agent 循环)

计算机使用遵循简单的循环:

  1. 你给 Claude 发送任务 — “把一张猫的图片保存到桌面”
  2. Claude 请求工具操作 — “截一张屏”
  3. 你的应用程序执行 — 捕获屏幕,返回图像
  4. Claude 分析并请求下一个操作 — “点击坐标 (500, 300)”
  5. 重复直到任务完成

这个循环被称为 agent 循环。Claude 不断请求操作(截图、点击、输入、滚动),你的应用程序不断执行它们,直到 Claude 判断任务完成。

以下是开始使用的最简 API 调用:

import anthropic

client = anthropic.Anthropic()

response = client.beta.messages.create(
    model="claude-opus-4-6",
    max_tokens=1024,
    tools=[
        {
            "type": "computer_20251124",
            "name": "computer",
            "display_width_px": 1024,
            "display_height_px": 768,
            "display_number": 1,
        },
        {"type": "text_editor_20250728", "name": "str_replace_based_edit_tool"},
        {"type": "bash_20250124", "name": "bash"},
    ],
    messages=[{
        "role": "user",
        "content": "Save a picture of a cat to my desktop."
    }],
    betas=["computer-use-2025-11-24"],
)

测试版头部 "computer-use-2025-11-24" 是必需的。三个工具(计算机、文本编辑器、bash)协同工作,让 Claude 完全控制环境。

可用操作

计算机使用工具支持丰富的交互操作:

基本操作

  • screenshot — 捕获当前显示
  • left_click — 点击 [x, y] 坐标
  • type — 输入文本字符串
  • key — 按下键或组合键(如 ctrl+salt+tab
  • mouse_move — 移动光标

增强操作(Claude 4.x 模型)

  • scroll — 向任意方向滚动并控制滚动量
  • left_click_drag — 在坐标之间点击并拖拽
  • right_clickmiddle_click — 其他鼠标按钮
  • double_clicktriple_click — 多次点击
  • hold_key — 按住某个键一段时间
  • wait — 在操作之间暂停

最新新增:缩放

在 Claude Opus 4.6、Sonnet 4.6 和 Opus 4.5 上可用:

  • zoom — 以全分辨率检查特定屏幕区域

这在 Claude 需要阅读小文字或识别细微 UI 细节时特别有用。

计算环境

Claude 不直接连接到你的电脑。你需要提供一个沙盒环境 — 通常是运行以下内容的 Docker 容器:

  • 虚拟显示 — Xvfb(X 虚拟帧缓冲)渲染桌面
  • 桌面环境 — 轻量级窗口管理器如 Mutter
  • 应用程序 — Firefox、LibreOffice、文件管理器等
  • 工具实现 — 将 Claude 的请求转换为实际鼠标/键盘操作的代码

Anthropic 提供了一个参考实现,所有这些都在 Docker 中预配置好了。这是最快的入门方式。

构建 Agent 循环

以下是处理来回交互的简化 agent 循环:

async def agent_loop(task: str, max_iterations: int = 10):
    client = anthropic.Anthropic()
    messages = [{"role": "user", "content": task}]

    tools = [
        {
            "type": "computer_20251124",
            "name": "computer",
            "display_width_px": 1024,
            "display_height_px": 768,
        },
        {"type": "text_editor_20250728", "name": "str_replace_based_edit_tool"},
        {"type": "bash_20250124", "name": "bash"},
    ]

    for _ in range(max_iterations):
        response = client.beta.messages.create(
            model="claude-opus-4-6",
            max_tokens=4096,
            messages=messages,
            tools=tools,
            betas=["computer-use-2025-11-24"],
        )

        messages.append({"role": "assistant", "content": response.content})

        # Extract tool calls
        tool_results = []
        for block in response.content:
            if block.type == "tool_use":
                result = execute_tool(block.name, block.input)
                tool_results.append({
                    "type": "tool_result",
                    "tool_use_id": block.id,
                    "content": result,
                })

        if not tool_results:
            return messages  # Task complete

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

execute_tool 函数是你将实际截屏、鼠标点击和键盘输入连接到计算环境的地方。

坐标缩放:容易踩的坑

API 将图像限制为最长边最大 1568px。如果你的显示器更大(比如 1512x982),截图会被缩小采样——但 Claude 返回的坐标是基于较小的图像的。

你必须将坐标缩放回去:

import math

def get_scale_factor(width, height):
    long_edge = max(width, height)
    total_pixels = width * height
    long_edge_scale = 1568 / long_edge
    total_pixels_scale = math.sqrt(1_150_000 / total_pixels)
    return min(1.0, long_edge_scale, total_pixels_scale)

scale = get_scale_factor(1512, 982)

# When Claude says "click at (450, 300)", scale it up:
def execute_click(x, y):
    screen_x = x / scale
    screen_y = y / scale
    perform_click(screen_x, screen_y)

跳过这一步意味着 Claude 的点击会偏离目标。这是最常见的实现 bug。

更好结果的提示技巧

使用清晰、结构化的提示词时,计算机使用效果最佳:

  1. 要具体。 “打开 Firefox,进入 example.com,点击登录按钮”比”登录到网站”效果更好。

  2. 让 Claude 验证。 在提示词中添加:“每一步后,截图并评估是否达到了正确的结果。只有确认后才继续。”

  3. 使用键盘快捷键。 下拉菜单和滚动条可能难以点击。提示 Claude 改用 TabEnter 和方向键。

  4. 提供示例。 对于可重复的任务,在提示词中包含示例截图和预期的工具调用。

  5. 使用 XML 标签处理凭据。 如果 Claude 需要登录,在 <robot_credentials> 标签中传递凭据。但要小心——当 Claude 与不受信任的内容交互时,提示注入风险更高。

安全:认真对待

计算机使用有独特的安全风险:

  • 通过屏幕内容进行提示注入。 Claude 读取屏幕上的所有内容。恶意网页可能显示覆盖你提示词的指令。
  • 自主操作。 Claude 可能会点击链接、接受对话框或导航到你预期以外的地方。
  • 凭据暴露。 如果 Claude 能在屏幕上看到密码或令牌,它们就会成为对话的一部分。

Anthropic 内置了标记截图中潜在提示注入的分类器。但最好的防御是隔离:

  • 专用虚拟机或 Docker 容器中以最小权限运行
  • 不要在没有监督的情况下给予敏感账户的访问权限
  • 将互联网访问限制在允许的域名列表内
  • 对不可逆操作(购买、账户创建等)需要人工确认

可以构建什么

计算机使用最适合速度不是关键但自动化有价值的任务:

  • 自动化测试 — 测试任何桌面应用程序,不仅仅是 Web 应用
  • 数据收集 — 导航网站并提取信息
  • 遗留系统集成 — 自动化没有 API 的应用程序中的工作流
  • 表单填写 — 跨多个站点填写 Web 表单
  • 研究工作流 — 从网络搜索、阅读和汇编信息
  • QA 和监控 — 验证 UI 是否正确渲染

对于研究和数据收集工作流,像 Save 这样的工具很好地补充了计算机使用——一旦 Claude 导航到页面,将其转换为干净的 Markdown 就能给你结构化的、AI 就绪的内容,而不是原始截图。

当前限制

请注意这些测试版限制:

  • 延迟。 每个操作都需要一次 API 调用、截图捕获和响应。比人类点击要慢。
  • 视觉准确性。 Claude 可能误读小文字或误识别 UI 元素。新的缩放操作有帮助,但并不完美。
  • 滚动。 在最新版本中有了显著改进,但复杂的滚动交互仍然可能不可靠。
  • 电子表格。 单元格选择很棘手。尽可能使用键盘导航。
  • 不在社交平台上创建账户。 Claude 故意不会在社交媒体上创建账户或冒充人类。

定价

计算机使用遵循标准工具使用定价:

  • 系统提示开销: 466-499 个令牌
  • 工具定义: 每个工具 735 个令牌(对于 Claude 4.x)
  • 截图: 作为视觉令牌计费(根据分辨率而异)
  • agent 循环中的每次 API 调用都是单独的计费请求

对于典型的 10 步任务,预计使用 15,000-50,000 个令牌,具体取决于截图大小和响应复杂性。

入门

  1. 尝试参考实现。 克隆 anthropic-quickstarts,运行 Docker 容器,进行实验。
  2. 从简单任务开始。 “打开文本编辑器,输入 Hello World,保存文件。” 在尝试复杂工作流之前先让 agent 循环运行起来。
  3. 添加防护措施。 设置迭代限制,验证坐标,记录每个操作,对任何不可逆操作添加人工确认。
  4. 优化提示词。 指令越好,Claude 需要的迭代次数越少——令牌成本也越低。

计算机使用代表了 AI API 可能性的根本性转变。与其为每个应用程序构建自定义集成,不如给 Claude 人类使用的相同界面——屏幕、鼠标和键盘——让它自己解决剩下的问题。

自动化的未来不是更多 API,而是能使用我们已有界面的 AI。