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 與敏感數據和操作隔離,以避免與提示注入相關的風險。最後,請告知最終使用者相關風險,並在您自己的產品中啟用電腦使用之前獲得他們的同意。

電腦使用參考實現

通過我們的電腦使用參考實現快速入門,該實現包括網頁介面、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 API 互動並執行電腦使用工具
  • 一個網頁介面,用於與容器、代理迴圈和工具互動。

理解多代理迴圈

電腦使用的核心是「代理迴圈」- 一個循環,其中 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 元素(如下拉菜單和滾動條)可能難以使用滑鼠移動進行操作。如果您遇到這種情況,請嘗試提示模型使用鍵盤快捷鍵。
  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. 然後我將尋找網頁瀏覽器來搜索貓的圖像
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
  • 對於網頁應用程式: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.

後續步驟