跳转到主要内容
Claude 可以通过计算机使用工具与计算机环境交互,该工具提供屏幕截图功能以及鼠标/键盘控制,用于自主桌面交互。
计算机使用目前处于测试版阶段,需要一个测试版标头
  • "computer-use-2025-01-24"(Claude 4 模型和 Claude Sonnet 3.7(已弃用))

概述

计算机使用是一项测试版功能,使 Claude 能够与桌面环境交互。该工具提供:
  • 屏幕截图捕获:查看屏幕上当前显示的内容
  • 鼠标控制:点击、拖动和移动光标
  • 键盘输入:输入文本和使用键盘快捷键
  • 桌面自动化:与任何应用程序或界面交互
虽然计算机使用可以通过 bash 和文本编辑器等其他工具进行增强,以实现更全面的自动化工作流,但计算机使用特别指的是计算机使用工具查看和控制桌面环境的能力。

模型兼容性

计算机使用适用于以下 Claude 模型:
模型工具版本测试版标志
Claude 4 模型computer_20250124computer-use-2025-01-24
Claude Sonnet 3.7(已弃用computer_20250124computer-use-2025-01-24
Claude 4 模型使用针对新架构优化的更新工具版本。Claude Sonnet 3.7(已弃用)引入了额外功能,包括思考功能,以便更深入地了解模型的推理过程。
较旧的工具版本不保证与较新的模型向后兼容。始终使用与您的模型版本相对应的工具版本。

安全考虑

计算机使用是一项测试版功能,具有不同于标准 API 功能的独特风险。与互联网交互时,这些风险会增加。为了最小化风险,请考虑采取以下预防措施:
  1. 使用具有最小权限的专用虚拟机或容器,以防止直接系统攻击或意外事故。
  2. 避免让模型访问敏感数据,例如账户登录信息,以防止信息被盗。
  3. 将互联网访问限制在域名白名单中,以减少暴露于恶意内容的风险。
  4. 要求人工确认可能导致有意义的真实世界后果的决定,以及任何需要肯定同意的任务,例如接受 Cookie、执行财务交易或同意服务条款。
在某些情况下,Claude 会遵循内容中发现的命令,即使这与用户的指示相冲突。例如,网页上或图像中包含的 Claude 指示可能会覆盖指示或导致 Claude 犯错。我们建议采取预防措施将 Claude 与敏感数据和操作隔离,以避免与提示注入相关的风险。我们已经训练模型抵抗这些提示注入,并添加了额外的防御层。如果您使用我们的计算机使用工具,我们将自动在您的提示上运行分类器,以标记潜在的提示注入实例。当这些分类器在屏幕截图中识别出潜在的提示注入时,它们会自动引导模型在继续下一步操作之前要求用户确认。我们认识到这种额外的保护不会适合每个用例(例如,没有人工参与的用例),因此如果您想选择退出并关闭它,请联系我们我们仍然建议采取预防措施将 Claude 与敏感数据和操作隔离,以避免与提示注入相关的风险。最后,请在您自己的产品中启用计算机使用之前,向最终用户告知相关风险并获得他们的同意。

计算机使用参考实现

通过我们的计算机使用参考实现快速入门,该实现包括 Web 界面、Docker 容器、示例工具实现和代理循环。注意:该实现已更新,包括针对 Claude 4 模型和 Claude Sonnet 3.7 的新工具。请确保拉取最新版本的存储库以访问这些新功能。
请使用此表单提供有关模型响应质量、API 本身或文档质量的反馈 - 我们迫不及待地想听到您的意见!

快速开始

以下是如何开始使用计算机使用工具的方法:
import anthropic

client = anthropic.Anthropic()

response = client.beta.messages.create(
    model="claude-sonnet-4-5",  # 或其他兼容模型
    max_tokens=1024,
    tools=[
        {
          "type": "computer_20250124",
          "name": "computer",
          "display_width_px": 1024,
          "display_height_px": 768,
          "display_number": 1,
        },
        {
          "type": "text_editor_20250124",
          "name": "str_replace_editor"
        },
        {
          "type": "bash_20250124",
          "name": "bash"
        }
    ],
    messages=[{"role": "user", "content": "Save a picture of a cat to my desktop."}],
    betas=["computer-use-2025-01-24"]
)
print(response)
仅计算机使用工具需要测试版标头。上面的示例显示了三个工具一起使用,这需要测试版标头,因为它包括计算机使用工具。

计算机使用工具的工作原理

1. 为 Claude 提供计算机使用工具和用户提示

  • 将计算机使用工具(以及可选的其他工具)添加到您的 API 请求中。
  • 包含需要桌面交互的用户提示,例如”将猫的图片保存到我的桌面”。

2. Claude 决定使用计算机使用工具

  • Claude 评估计算机使用工具是否可以帮助解决用户的查询。
  • 如果是,Claude 构造一个格式正确的工具使用请求。
  • API 响应的 stop_reasontool_use,表示 Claude 的意图。

3. 提取工具输入,在计算机上评估工具,并返回结果

  • 在您的端,从 Claude 的请求中提取工具名称和输入。
  • 在容器或虚拟机上使用该工具。
  • 使用包含 tool_result 内容块的新 user 消息继续对话。

4. Claude 继续调用计算机使用工具,直到完成任务

  • Claude 分析工具结果,以确定是否需要更多工具使用或任务已完成。
  • 如果 Claude 决定需要另一个工具,它会以另一个 tool_use stop_reason 响应,您应该返回第 3 步。
  • 否则,它会向用户提供文本响应。
我们将第 3 步和第 4 步在没有用户输入的情况下的重复称为”代理循环”——即 Claude 响应工具使用请求,您的应用程序用评估该请求的结果响应 Claude。

计算环境

计算机使用需要一个沙箱计算环境,Claude 可以在其中安全地与应用程序和网络交互。该环境包括:
  1. 虚拟显示:一个虚拟 X11 显示服务器(使用 Xvfb),它呈现 Claude 将通过屏幕截图看到的桌面界面,并通过鼠标/键盘操作进行控制。
  2. 桌面环境:在 Linux 上运行的轻量级 UI,带有窗口管理器(Mutter)和面板(Tint2),为 Claude 提供一致的图形界面进行交互。
  3. 应用程序:预装的 Linux 应用程序,如 Firefox、LibreOffice、文本编辑器和文件管理器,Claude 可以使用它们来完成任务。
  4. 工具实现:集成代码,将 Claude 的抽象工具请求(如”移动鼠标”或”截图”)转换为虚拟环境中的实际操作。
  5. 代理循环:一个程序,处理 Claude 和环境之间的通信,将 Claude 的操作发送到环境,并将结果(屏幕截图、命令输出)返回给 Claude。
当您使用计算机使用工具时,Claude 不会直接连接到此环境。相反,您的应用程序:
  1. 接收 Claude 的工具使用请求
  2. 将它们转换为计算环境中的操作
  3. 捕获结果(屏幕截图、命令输出等)
  4. 将这些结果返回给 Claude
为了安全和隔离,参考实现在 Docker 容器内运行所有这些,并具有适当的端口映射以查看和与环境交互。

如何实现计算机使用工具

从我们的参考实现开始

我们构建了一个参考实现,包含快速开始计算机使用所需的一切:

理解多代理循环

计算机使用的核心是”代理循环”——一个循环,其中 Claude 请求工具操作,您的应用程序执行它们,并将结果返回给 Claude。这是一个简化的示例:
async def sampling_loop(
    *,
    model: str,
    messages: list[dict],
    api_key: str,
    max_tokens: int = 4096,
    tool_version: str,
    thinking_budget: int | None = None,
    max_iterations: int = 10,  # 添加迭代限制以防止无限循环
):
    """
    Claude 计算机使用交互的简单代理循环。

    此函数处理以下之间的来回:
    1. 向 Claude 发送用户消息
    2. Claude 请求使用工具
    3. 您的应用程序执行这些工具
    4. 将工具结果发送回 Claude
    """
    # 设置工具和 API 参数
    client = Anthropic(api_key=api_key)
    beta_flag = "computer-use-2025-01-24" if "20250124" in tool_version else "computer-use-2024-10-22"

    # 配置工具 - 您应该已经在其他地方初始化了这些
    tools = [
        {"type": f"computer_{tool_version}", "name": "computer", "display_width_px": 1024, "display_height_px": 768},
        {"type": f"text_editor_{tool_version}", "name": "str_replace_editor"},
        {"type": f"bash_{tool_version}", "name": "bash"}
    ]

    # 主代理循环(带有迭代限制以防止 API 成本失控)
    iterations = 0
    while True and iterations < max_iterations:
        iterations += 1
        # 设置可选的思考参数(针对 Claude Sonnet 3.7)
        thinking = None
        if thinking_budget:
            thinking = {"type": "enabled", "budget_tokens": thinking_budget}

        # 调用 Claude API
        response = client.beta.messages.create(
            model=model,
            max_tokens=max_tokens,
            messages=messages,
            tools=tools,
            betas=[beta_flag],
            thinking=thinking
        )

        # 将 Claude 的响应添加到对话历史记录
        response_content = response.content
        messages.append({"role": "assistant", "content": response_content})

        # 检查 Claude 是否使用了任何工具
        tool_results = []
        for block in response_content:
            if block.type == "tool_use":
                # 在真实应用中,您会在这里执行工具
                # 例如:result = run_tool(block.name, block.input)
                result = {"result": "Tool executed successfully"}

                # 为 Claude 格式化结果
                tool_results.append({
                    "type": "tool_result",
                    "tool_use_id": block.id,
                    "content": result
                })

        # 如果没有使用工具,Claude 已完成 - 返回最终消息
        if not tool_results:
            return messages

        # 将工具结果添加到消息中,以供下一次 Claude 迭代使用
        messages.append({"role": "user", "content": tool_results})
循环继续,直到 Claude 响应而不请求任何工具(任务完成)或达到最大迭代限制。此保障措施防止可能导致意外 API 成本的潜在无限循环。
使用计算机使用工具时,您必须为您的模型版本包含适当的测试版标志:
使用 computer_20250124 时,包含此测试版标志:
"betas": ["computer-use-2025-01-24"]
使用 computer_20250124 时,包含此测试版标志:
"betas": ["computer-use-2025-01-24"]
我们建议在阅读本文档的其余部分之前尝试参考实现。

通过提示优化模型性能

以下是获得最佳质量输出的一些提示:
  1. 指定简单、明确定义的任务,并为每个步骤提供明确的指示。
  2. Claude 有时会假设其操作的结果,而不明确检查它们。为了防止这种情况,您可以使用以下提示提示 Claude:在每个步骤之后,截图并仔细评估您是否达到了正确的结果。明确显示您的思考:"我已评估第 X 步..."如果不正确,请重试。只有当您确认步骤执行正确时,才应继续下一步。
  3. 某些 UI 元素(如下拉菜单和滚动条)可能很难让 Claude 使用鼠标移动来操纵。如果您遇到这种情况,请尝试提示模型使用键盘快捷键。
  4. 对于可重复的任务或 UI 交互,在您的提示中包含成功结果的示例屏幕截图和工具调用。
  5. 如果您需要模型登录,请在您的提示中使用 xml 标签(如 <robot_credentials>)为其提供用户名和密码。在需要登录的应用程序中使用计算机使用会增加由于提示注入而导致不良结果的风险。在向模型提供登录凭据之前,请查看我们的缓解提示注入指南
如果您反复遇到一组明确的问题,或者提前知道 Claude 需要完成的任务,请使用系统提示为 Claude 提供明确的提示或说明,说明如何成功完成任务。

系统提示

当通过 Claude API 请求 Anthropic 定义的工具之一时,会生成计算机使用特定的系统提示。它类似于工具使用系统提示,但以以下内容开头:
您可以访问一组函数来回答用户的问题。这包括访问沙箱计算环境。您目前无法检查文件或与外部资源交互,除非通过调用以下函数。
与常规工具使用一样,用户提供的 system_prompt 字段仍然受到尊重,并用于构造组合系统提示。

可用操作

计算机使用工具支持这些操作: 基本操作(所有版本)
  • screenshot - 捕获当前显示
  • left_click - 在坐标 [x, y] 处点击
  • type - 输入文本字符串
  • key - 按下键或键组合(例如”ctrl+s”)
  • mouse_move - 将光标移动到坐标
增强操作(computer_20250124 在 Claude 4 模型和 Claude Sonnet 3.7 中可用:
  • scroll - 向任何方向滚动,具有数量控制
  • left_click_drag - 在坐标之间点击并拖动
  • right_clickmiddle_click - 其他鼠标按钮
  • double_clicktriple_click - 多次点击
  • left_mouse_downleft_mouse_up - 细粒度点击控制
  • hold_key - 在执行其他操作时按住键
  • wait - 在操作之间暂停
// 截图
{
  "action": "screenshot"
}

// 在位置点击
{
  "action": "left_click",
  "coordinate": [500, 300]
}

// 输入文本
{
  "action": "type",
  "text": "Hello, world!"
}

// 向下滚动(Claude 4/3.7)
{
  "action": "scroll",
  "coordinate": [500, 400],
  "scroll_direction": "down",
  "scroll_amount": 3
}

工具参数

参数必需描述
type工具版本(computer_20250124computer_20241022
name必须是”computer”
display_width_px显示宽度(像素)
display_height_px显示高度(像素)
display_numberX11 环境的显示编号
将显示分辨率保持在 1280x800 (WXGA) 或以下以获得最佳性能。较高的分辨率可能会由于图像调整大小而导致准确性问题。
重要:计算机使用工具必须由您的应用程序明确执行 - Claude 无法直接执行它。您负责根据 Claude 的请求实现屏幕截图捕获、鼠标移动、键盘输入和其他操作。

在 Claude 4 模型和 Claude Sonnet 3.7 中启用思考功能

Claude Sonnet 3.7 引入了一项新的”思考”功能,允许您在模型处理复杂任务时查看其推理过程。此功能可以帮助您了解 Claude 如何处理问题,对于调试或教育目的特别有价值。 要启用思考,请将 thinking 参数添加到您的 API 请求中:
"thinking": {
  "type": "enabled",
  "budget_tokens": 1024
}
budget_tokens 参数指定 Claude 可以用于思考的令牌数。这从您的总体 max_tokens 预算中扣除。 启用思考后,Claude 将返回其推理过程作为响应的一部分,这可以帮助您:
  1. 了解模型的决策过程
  2. 识别潜在的问题或误解
  3. 从 Claude 的问题解决方法中学习
  4. 获得对复杂多步骤操作的更多可见性
以下是思考输出可能看起来的示例:
[思考]
我需要将猫的图片保存到桌面。让我将其分解为步骤:

1. 首先,我将截图以查看桌面上的内容
2. 然后我将寻找 Web 浏览器来搜索猫的图像
3. 找到合适的图像后,我需要将其保存到桌面

让我从截图开始,看看有什么可用的...

使用其他工具增强计算机使用

计算机使用工具可以与其他工具结合,以创建更强大的自动化工作流。这在您需要以下情况时特别有用:
curl https://api.anthropic.com/v1/messages \
  -H "content-type: application/json" \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "anthropic-beta: computer-use-2025-01-24" \
  -d '{
    "model": "claude-sonnet-4-5",
    "max_tokens": 2000,
    "tools": [
      {
        "type": "computer_20250124",
        "name": "computer",
        "display_width_px": 1024,
        "display_height_px": 768,
        "display_number": 1
      },
      {
        "type": "text_editor_20250124",
        "name": "str_replace_editor"
      },
      {
        "type": "bash_20250124",
        "name": "bash"
      },
      {
        "name": "get_weather",
        "description": "Get the current weather in a given location",
        "input_schema": {
          "type": "object",
          "properties": {
            "location": {
              "type": "string",
              "description": "The city and state, e.g. San Francisco, CA"
            },
            "unit": {
              "type": "string",
              "enum": ["celsius", "fahrenheit"],
              "description": "The unit of temperature, either 'celsius' or 'fahrenheit'"
            }
          },
          "required": ["location"]
        }
      }
    ],
    "messages": [
      {
        "role": "user",
        "content": "Find flights from San Francisco to a place with warmer weather."
      }
    ],
    "thinking": {
      "type": "enabled",
      "budget_tokens": 1024
    }
  }'

构建自定义计算机使用环境

参考实现旨在帮助您快速开始使用计算机使用。它包括与 Claude 进行计算机使用所需的所有组件。但是,您可以构建自己的计算机使用环境以满足您的需求。您需要:
  • 适合与 Claude 进行计算机使用的虚拟化或容器化环境
  • 至少一个 Anthropic 定义的计算机使用工具的实现
  • 与 Claude API 交互并使用您的工具实现执行 tool_use 结果的代理循环
  • 允许用户输入以启动代理循环的 API 或 UI

实现计算机使用工具

计算机使用工具实现为无模式工具。使用此工具时,您不需要像其他工具那样提供输入模式;模式内置于 Claude 的模型中,无法修改。
1

设置您的计算环境

创建一个虚拟显示或连接到 Claude 将与之交互的现有显示。这通常涉及设置 Xvfb(X 虚拟帧缓冲区)或类似技术。
2

实现操作处理程序

创建函数来处理 Claude 可能请求的每种操作类型:
def handle_computer_action(action_type, params):
    if action_type == "screenshot":
        return capture_screenshot()
    elif action_type == "left_click":
        x, y = params["coordinate"]
        return click_at(x, y)
    elif action_type == "type":
        return type_text(params["text"])
    # ... 处理其他操作
3

处理 Claude 的工具调用

从 Claude 的响应中提取并执行工具调用:
for content in response.content:
    if content.type == "tool_use":
        action = content.input["action"]
        result = handle_computer_action(action, content.input)
        
        # 将结果返回给 Claude
        tool_result = {
            "type": "tool_result",
            "tool_use_id": content.id,
            "content": result
        }
4

实现代理循环

创建一个循环,直到 Claude 完成任务:
while True:
    response = client.beta.messages.create(...)
    
    # 检查 Claude 是否使用了任何工具
    tool_results = process_tool_calls(response)
    
    if not tool_results:
        # 没有更多工具使用,任务完成
        break
        
    # 使用工具结果继续对话
    messages.append({"role": "user", "content": tool_results})

处理错误

实现计算机使用工具时,可能会发生各种错误。以下是处理它们的方法:
如果屏幕截图捕获失败,返回适当的错误消息:
{
  "role": "user",
  "content": [
    {
      "type": "tool_result",
      "tool_use_id": "toolu_01A09q90qw90lq917835lq9",
      "content": "Error: Failed to capture screenshot. Display may be locked or unavailable.",
      "is_error": true
    }
  ]
}
如果 Claude 提供的坐标超出显示范围:
{
  "role": "user",
  "content": [
    {
      "type": "tool_result",
      "tool_use_id": "toolu_01A09q90qw90lq917835lq9",
      "content": "Error: Coordinates (1200, 900) are outside display bounds (1024x768).",
      "is_error": true
    }
  ]
}
如果操作执行失败:
{
  "role": "user",
  "content": [
    {
      "type": "tool_result",
      "tool_use_id": "toolu_01A09q90qw90lq917835lq9",
      "content": "Error: Failed to perform click action. The application may be unresponsive.",
      "is_error": true
    }
  ]
}

遵循实现最佳实践

设置与您的用例匹配的显示尺寸,同时保持在建议的限制内:
  • 对于一般桌面任务:1024x768 或 1280x720
  • 对于 Web 应用程序:1280x800 或 1366x768
  • 避免超过 1920x1080 的分辨率以防止性能问题
向 Claude 返回屏幕截图时:
  • 将屏幕截图编码为 base64 PNG 或 JPEG
  • 考虑压缩大型屏幕截图以提高性能
  • 包含相关元数据,如时间戳或显示状态
某些应用程序需要时间来响应操作:
def click_and_wait(x, y, wait_time=0.5):
    click_at(x, y)
    time.sleep(wait_time)  # 允许 UI 更新
检查请求的操作是否安全且有效:
def validate_action(action_type, params):
    if action_type == "left_click":
        x, y = params.get("coordinate", (0, 0))
        if not (0 <= x < display_width and 0 <= y < display_height):
            return False, "Coordinates out of bounds"
    return True, None
保留所有操作的日志以进行故障排除:
import logging

def log_action(action_type, params, result):
    logging.info(f"Action: {action_type}, Params: {params}, Result: {result}")

了解计算机使用工具的限制

计算机使用功能处于测试版阶段。虽然 Claude 的功能是最先进的,但开发人员应该了解其限制:
  1. 延迟:当前人工智能交互的计算机使用延迟可能与常规人工指导的计算机操作相比太慢。我们建议关注速度不是关键的用例(例如,后台信息收集、自动化软件测试)在受信任的环境中。
  2. 计算机视觉准确性和可靠性:Claude 在输出特定坐标同时生成操作时可能会犯错或产生幻觉。Claude Sonnet 3.7 引入了思考功能,可以帮助您了解模型的推理并识别潜在问题。
  3. 工具选择准确性和可靠性:Claude 在生成操作时选择工具时可能会犯错或产生幻觉,或采取意外操作来解决问题。此外,与利基应用程序交互或同时与多个应用程序交互时,可靠性可能较低。我们建议用户在请求复杂任务时仔细提示模型。
  4. 滚动可靠性:Claude Sonnet 3.7 引入了具有方向控制的专用滚动操作,提高了可靠性。模型现在可以明确地向任何方向(上/下/左/右)滚动指定的数量。
  5. 电子表格交互:Claude Sonnet 3.7 中的电子表格交互鼠标点击已改进,添加了更精确的鼠标控制操作,如 left_mouse_downleft_mouse_up 和新的修饰键支持。通过使用这些细粒度控制和将修饰键与点击结合,单元格选择可以更可靠。
  6. 社交和通信平台上的账户创建和内容生成:虽然 Claude 会访问网站,但我们限制其在社交媒体网站和平台上创建账户或生成和共享内容或以其他方式进行人类冒充的能力。我们可能在未来更新此功能。
  7. 漏洞:越狱或提示注入等漏洞可能会在前沿 AI 系统中持续存在,包括测试版计算机使用 API。在某些情况下,Claude 会遵循内容中发现的命令,有时甚至与用户的指示相冲突。例如,网页上或图像中包含的 Claude 指示可能会覆盖指示或导致 Claude 犯错。我们建议: a. 将计算机使用限制在受信任的环境中,例如具有最小权限的虚拟机或容器 b. 避免在没有严格监督的情况下让计算机使用访问敏感账户或数据 c. 在您的应用程序中启用或请求计算机使用功能所需的权限之前,向最终用户告知相关风险并获得他们的同意
  8. 不适当或非法操作:根据 Anthropic 的服务条款,您不得使用计算机使用来违反任何法律或我们的可接受使用政策。
始终仔细审查和验证 Claude 的计算机使用操作和日志。不要将 Claude 用于需要完美精度或敏感用户信息的任务,除非有人工监督。

定价

Computer use follows the standard tool use pricing. When using the computer use tool: System prompt overhead: The computer use beta adds 466-499 tokens to the system prompt Computer use tool token usage:
ModelInput tokens per tool definition
Claude 4.x models735 tokens
Claude Sonnet 3.7 (deprecated)735 tokens
Additional token consumption:
  • Screenshot images (see Vision pricing)
  • Tool execution results returned to Claude
If you’re also using bash or text editor tools alongside computer use, those tools have their own token costs as documented in their respective pages.

后续步骤