Claude 可以通过计算机使用工具与计算机环境进行交互,该工具提供截图功能和鼠标/键盘控制,实现自主桌面交互。
计算机使用是一项测试功能,使 Claude 能够与桌面环境进行交互。该工具提供:
虽然计算机使用可以与其他工具(如 bash 和文本编辑器)配合使用以实现更全面的自动化工作流,但计算机使用特指计算机使用工具查看和控制桌面环境的能力。
计算机使用适用于以下 Claude 模型:
| 模型 | 工具版本 | Beta 标志 |
|---|---|---|
| Claude Opus 4.6、Claude Opus 4.5 | computer_20251124 | computer-use-2025-11-24 |
| 所有其他支持的模型 | computer_20250124 | computer-use-2025-01-24 |
Claude Opus 4.6 和 Claude Opus 4.5 引入了 computer_20251124 工具版本,具有新功能,包括用于详细检查屏幕区域的缩放操作。所有其他模型(Sonnet 4.5、Haiku 4.5、Sonnet 4、Opus 4、Opus 4.1 和 Sonnet 3.7)使用 computer_20250124 工具版本。
较旧的工具版本不保证与较新的模型向后兼容。请始终使用与您的模型版本对应的工具版本。
计算机使用是一项测试功能,具有与标准 API 功能不同的独特风险。在与互联网交互时,这些风险会加剧。
为了最大限度地降低风险,请考虑采取以下预防措施:
在某些情况下,即使与用户的指令冲突,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-opus-4-6", # or another compatible model
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"]
)
print(response)beta 头部仅在使用计算机使用工具时才需要。
上面的示例展示了三个工具一起使用的情况,由于包含了计算机使用工具,因此需要 beta 头部。
向 Claude 提供计算机使用工具和用户提示
Claude 决定使用计算机使用工具
stop_reason 为 tool_use,表示 Claude 的意图。提取工具输入,在计算机上执行工具,并返回结果
tool_result 内容块的新 user 消息继续对话。Claude 持续调用计算机使用工具直到完成任务
tool_use stop_reason 响应,您应该返回步骤 3。我们将步骤 3 和 4 在没有用户输入的情况下的重复称为"代理循环"——即 Claude 以工具使用请求响应,而您的应用程序以评估该请求的结果响应 Claude。
计算机使用需要一个沙盒化的计算环境,Claude 可以在其中安全地与应用程序和网络进行交互。该环境包括:
虚拟显示器:虚拟 X11 显示服务器(使用 Xvfb),用于渲染 Claude 将通过截图看到并通过鼠标/键盘操作控制的桌面界面。
桌面环境:运行在 Linux 上的轻量级 UI,包含窗口管理器(Mutter)和面板(Tint2),为 Claude 提供一致的图形界面进行交互。
应用程序:预装的 Linux 应用程序,如 Firefox、LibreOffice、文本编辑器和文件管理器,Claude 可以使用它们来完成任务。
工具实现:集成代码,将 Claude 的抽象工具请求(如"移动鼠标"或"截图")转换为虚拟环境中的实际操作。
代理循环:处理 Claude 与环境之间通信的程序,将 Claude 的操作发送到环境并将结果(截图、命令输出)返回给 Claude。
当您使用计算机使用时,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, # Add iteration limit to prevent infinite loops
):
"""
A simple agent loop for Claude computer use interactions.
This function handles the back-and-forth between:
1. Sending user messages to Claude
2. Claude requesting to use tools
3. Your app executing those tools
4. Sending tool results back to Claude
"""
# Set up tools and API parameters
client = Anthropic(api_key=api_key)
beta_flag = "computer-use-2025-01-24" if "20250124" in tool_version else "computer-use-2024-10-22"
# Configure tools - you should already have these initialized elsewhere
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"}
]
# Main agent loop (with iteration limit to prevent runaway API costs)
iterations = 0
while True and iterations < max_iterations:
iterations += 1
# Set up optional thinking parameter (for Claude Sonnet 3.7)
thinking = None
if thinking_budget:
thinking = {"type": "enabled", "budget_tokens": thinking_budget}
# Call the Claude API
response = client.beta.messages.create(
model=model,
max_tokens=max_tokens,
messages=messages,
tools=tools,
betas=[beta_flag],
thinking=thinking
)
# Add Claude's response to the conversation history
response_content = response.content
messages.append({"role": "assistant", "content": response_content})
# Check if Claude used any tools
tool_results = []
for block in response_content:
if block.type == "tool_use":
# In a real app, you would execute the tool here
# For example: result = run_tool(block.name, block.input)
result = {"result": "Tool executed successfully"}
# Format the result for Claude
tool_results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": result
})
# If no tools were used, Claude is done - return the final messages
if not tool_results:
return messages
# Add tool results to messages for the next iteration with Claude
messages.append({"role": "user", "content": tool_results})循环会持续进行,直到 Claude 在不请求任何工具的情况下响应(任务完成)或达到最大迭代限制。此保护措施可防止可能导致意外 API 费用的潜在无限循环。
我们建议在阅读本文档的其余部分之前先试用参考实现。
以下是一些获得最佳质量输出的技巧:
After each step, take a screenshot and carefully evaluate if you have achieved the right outcome. Explicitly show your thinking: "I have evaluated step X..." If not correct, try again. Only when you confirm a step was executed correctly should you move on to the next one.<robot_credentials>)提供用户名和密码。在需要登录的应用程序中使用计算机使用会增加因提示注入而导致不良结果的风险。请在向模型提供登录凭据之前查看我们的缓解提示注入指南。如果您反复遇到一组明确的问题,或者事先知道 Claude 需要完成的任务,请使用系统提示为 Claude 提供关于如何成功完成任务的明确提示或指令。
当通过 Claude API 请求 Anthropic 定义的工具之一时,会生成特定于计算机使用的系统提示。它类似于工具使用系统提示,但以以下内容开头:
You have access to a set of functions you can use to answer the user's question. This includes access to a sandboxed computing environment. You do NOT currently have the ability to inspect files or interact with external resources, except by invoking the below functions.
与常规工具使用一样,用户提供的 system_prompt 字段仍然会被尊重并用于构建组合系统提示。
计算机使用工具支持以下操作:
基本操作(所有版本)
[x, y] 处点击增强操作(computer_20250124)
适用于 Claude 4 模型和 Claude Sonnet 3.7:
增强操作(computer_20251124)
适用于 Claude Opus 4.6 和 Claude Opus 4.5:
computer_20250124 的所有操作enable_zoom: true。接受带有坐标 [x1, y1, x2, y2] 的 region 参数,定义要检查区域的左上角和右下角。| 参数 | 必需 | 描述 |
|---|---|---|
type | 是 | 工具版本(computer_20251124、computer_20250124 或 computer_20241022) |
name | 是 | 必须为 "computer" |
display_width_px | 是 | 显示宽度(像素) |
display_height_px | 是 | 显示高度(像素) |
display_number | 否 | X11 环境的显示编号 |
enable_zoom | 否 | 启用缩放操作(仅限 computer_20251124)。设置为 true 以允许 Claude 缩放到特定屏幕区域。默认值:false |
重要:计算机使用工具必须由您的应用程序显式执行——Claude 无法直接执行它。您负责根据 Claude 的请求实现截图捕获、鼠标移动、键盘输入和其他操作。
Claude Sonnet 3.7 引入了新的"思考"能力,允许您在模型处理复杂任务时查看其推理过程。此功能帮助您了解 Claude 如何处理问题,对于调试或教育目的特别有价值。
要启用思考功能,请在 API 请求中添加 thinking 参数:
"thinking": {
"type": "enabled",
"budget_tokens": 1024
}budget_tokens 参数指定 Claude 可以用于思考的 token 数量。这将从您的总 max_tokens 预算中扣除。
启用思考功能后,Claude 将在响应中返回其推理过程,这可以帮助您:
以下是思考输出可能的示例:
[Thinking]
I need to save a picture of a cat to the desktop. Let me break this down into steps:
1. First, I'll take a screenshot to see what's on the desktop
2. Then I'll look for a web browser to search for cat images
3. After finding a suitable image, I'll need to save it to the desktop
Let me start by taking a screenshot to see what's available...计算机使用工具可以与其他工具结合使用,以创建更强大的自动化工作流。这在您需要以下操作时特别有用:
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-opus-4-6",
"max_tokens": 2000,
"tools": [
{
"type": "computer_20250124",
"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"
},
{
"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 使用计算机所需的所有组件。但是,您可以根据自己的需求构建自己的计算机使用环境。您需要:
tool_use 结果的代理循环计算机使用工具作为无模式工具实现。使用此工具时,您不需要像其他工具那样提供输入模式;该模式内置于 Claude 的模型中,无法修改。
设置您的计算环境
创建虚拟显示器或连接到 Claude 将与之交互的现有显示器。这通常涉及设置 Xvfb(X 虚拟帧缓冲区)或类似技术。
实现操作处理程序
创建函数来处理 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"])
# ... handle other actions处理 Claude 的工具调用
从 Claude 的响应中提取并执行工具调用:
for content in response.content:
if content.type == "tool_use":
action = content.input["action"]
result = handle_computer_action(action, content.input)
# Return result to Claude
tool_result = {
"type": "tool_result",
"tool_use_id": content.id,
"content": result
}实现代理循环
创建一个循环,持续运行直到 Claude 完成任务:
while True:
response = client.beta.messages.create(...)
# Check if Claude used any tools
tool_results = process_tool_calls(response)
if not tool_results:
# No more tool use, task complete
break
# Continue conversation with tool results
messages.append({"role": "user", "content": tool_results})在实现计算机使用工具时,可能会出现各种错误。以下是处理方法:
API 将图像限制为最长边最大 1568 像素,总像素约 1.15 百万像素(详见图像调整大小)。例如,1512x982 的屏幕会被下采样到大约 1330x864。Claude 分析这个较小的图像并在该空间中返回坐标,但您的工具在原始屏幕空间中执行点击。
除非您处理坐标转换,否则这可能导致 Claude 的点击坐标偏离目标。
要解决此问题,请自行调整截图大小并将 Claude 的坐标按比例放大:
import math
def get_scale_factor(width, height):
"""Calculate scale factor to meet API constraints."""
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)
# When capturing screenshot
scale = get_scale_factor(screen_width, screen_height)
scaled_width = int(screen_width * scale)
scaled_height = int(screen_height * scale)
# Resize image to scaled dimensions before sending to Claude
screenshot = capture_and_resize(scaled_width, scaled_height)
# When handling Claude's coordinates, scale them back up
def execute_click(x, y):
screen_x = x / scale
screen_y = y / scale
perform_click(screen_x, screen_y)计算机使用功能处于 beta 阶段。虽然 Claude 的能力处于前沿水平,但开发者应了解其局限性:
left_mouse_down、left_mouse_up)和新的修饰键支持,改善了电子表格交互的鼠标点击。通过使用这些细粒度控制并将修饰键与点击结合使用,单元格选择可以更加可靠。请始终仔细审查和验证 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:
| Model | Input tokens per tool definition |
|---|---|
| Claude 4.x models | 735 tokens |
| Claude Sonnet 3.7 (deprecated) | 735 tokens |
Additional token consumption:
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.
Was this page helpful?