18.3 Computer Use Demo:桌面控制能力
项目定位:Anthropic 官方的 Computer Use 参考实现,展示 Claude 如何通过视觉理解和工具调用控制桌面环境。这是 Claude 独有的能力,其他 LLM 暂不支持。
1. 项目概述
1.1 什么是 Computer Use?
Computer Use 是 Claude 的一项革命性能力,允许 AI 像人类一样操作计算机:
传统 LLM:
用户 → 文字输入 → AI 处理 → 文字输出
Computer Use:
用户 → 任务描述 → Claude 看屏幕 → 移动鼠标 → 点击/输入 → 完成任务1.2 支持的模型
| 模型 | 版本 | 能力等级 |
|---|---|---|
| Claude Opus 4.5 | claude-opus-4-5-20251101 | 最强 |
| Claude Sonnet 4.5 | claude-sonnet-4-5-20250929 | 推荐 |
| Claude Sonnet 4 | claude-sonnet-4-20250514 | 良好 |
| Claude Opus 4 | claude-opus-4-20250514 | 良好 |
| Claude Haiku 4.5 | claude-haiku-4-5-20251001 | 基础 |
1.3 核心组件
┌─────────────────────────────────────────────────────────────────┐
│ Computer Use Demo 架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ Docker Container │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Streamlit │ │ Agent │ │ Desktop │ │ │
│ │ │ Web UI │ │ Loop │ │ Environment│ │ │
│ │ │ (8501) │ │ (Python) │ │ (XVFB) │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ │ │ │ │ │
│ │ │ ┌──────▼──────┐ │ │ │
│ │ │ │ Claude API │ │ │ │
│ │ │ │ / Bedrock │ │ │ │
│ │ │ │ / Vertex AI │ │ │ │
│ │ │ └─────────────┘ │ │ │
│ │ │ │ │ │
│ │ └────────────────┬────────────────┘ │ │
│ │ │ │ │
│ │ ┌──────▼──────┐ │ │
│ │ │ VNC Server │ │ │
│ │ │ (5900) │ │ │
│ │ └─────────────┘ │ │
│ │ │ │ │
│ └──────────────────────────┼─────────────────────────────────┘ │
│ │ │
│ ┌──────▼──────┐ │
│ │ NoVNC │ │
│ │ (6080) │ │
│ └─────────────┘ │
│ │ │
└─────────────────────────────┼────────────────────────────────────┘
│
▼
浏览器访问桌面2. 快速开始
2.1 使用 Claude API
bash
# 设置 API Key
export ANTHROPIC_API_KEY=your_api_key
# 运行 Docker 容器
docker run \
-e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
-v $HOME/.anthropic:/home/computeruse/.anthropic \
-p 5900:5900 \
-p 8501:8501 \
-p 6080:6080 \
-p 8080:8080 \
-it ghcr.io/anthropics/anthropic-quickstarts:computer-use-demo-latest2.2 使用 AWS Bedrock
bash
# 设置 AWS 配置
export AWS_PROFILE=your_profile
# 运行容器
docker run \
-e API_PROVIDER=bedrock \
-e AWS_PROFILE=$AWS_PROFILE \
-e AWS_REGION=us-west-2 \
-v $HOME/.aws:/home/computeruse/.aws \
-v $HOME/.anthropic:/home/computeruse/.anthropic \
-p 5900:5900 \
-p 8501:8501 \
-p 6080:6080 \
-p 8080:8080 \
-it ghcr.io/anthropics/anthropic-quickstarts:computer-use-demo-latest2.3 使用 Google Vertex AI
bash
# 本地构建镜像
docker build . -t computer-use-demo
# 登录 Google Cloud
gcloud auth application-default login
# 设置变量
export VERTEX_REGION=us-central1
export VERTEX_PROJECT_ID=your_project_id
# 运行容器
docker run \
-e API_PROVIDER=vertex \
-e CLOUD_ML_REGION=$VERTEX_REGION \
-e ANTHROPIC_VERTEX_PROJECT_ID=$VERTEX_PROJECT_ID \
-v $HOME/.config/gcloud/application_default_credentials.json:/home/computeruse/.config/gcloud/application_default_credentials.json \
-p 5900:5900 \
-p 8501:8501 \
-p 6080:6080 \
-p 8080:8080 \
-it computer-use-demo2.4 访问界面
| 端口 | 用途 | URL |
|---|---|---|
| 8080 | 综合界面(推荐) | http://localhost:8080 |
| 8501 | Streamlit 聊天界面 | http://localhost:8501 |
| 6080 | NoVNC 桌面视图 | http://localhost:6080/vnc.html |
| 5900 | VNC 直连 | vnc://localhost:5900 |
3. 核心工具详解
3.1 Computer Tool
Claude 可以使用以下桌面操作工具:
python
# 工具定义(简化版)
computer_tool = {
"type": "computer_20251124", # 最新版本
"name": "computer",
"display_width_px": 1024,
"display_height_px": 768,
"display_number": 1,
}3.2 支持的操作
| 操作类型 | 动作 | 参数 |
|---|---|---|
| 鼠标 | mouse_move | x, y 坐标 |
left_click | 无 | |
right_click | 无 | |
double_click | 无 | |
left_click_drag | start_x, start_y, end_x, end_y | |
| 键盘 | type | 文本内容 |
key | 按键名(如 "Return", "ctrl+c") | |
| 屏幕 | screenshot | 无 |
cursor_position | 无 |
3.3 Agent 循环流程
┌─────────────────────────────────────────────────────────────────┐
│ Agent Loop 流程 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ │
│ │ 用户输入任务 │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 截取屏幕 │ ──▶ │ 发送给Claude│ │
│ └─────────────┘ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ Claude 分析 │ │
│ │ • 理解屏幕 │ │
│ │ • 规划动作 │ │
│ └──────┬──────┘ │
│ │ │
│ ┌───────────────────┼───────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 工具调用 │ │ 文本回复 │ │ 任务完成 │ │
│ │ (mouse/key) │ │ │ │ │ │
│ └──────┬──────┘ └─────────────┘ └─────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 执行动作 │ │
│ └──────┬──────┘ │
│ │ │
│ └──────────────────────────────────────────────────────┐│
│ ││
│ ┌─────────────┐ ││
│ │ 截取新屏幕 │ ◀─────────────────────────────────────────────┘│
│ └──────┬──────┘ │
│ │ │
│ └──────▶ 继续循环直到任务完成 │
│ │
└─────────────────────────────────────────────────────────────────┘4. 代码实现分析
4.1 项目结构
computer-use-demo/
├── computer_use_demo/ # 主 Python 模块
│ ├── __init__.py
│ ├── loop.py # Agent 循环核心逻辑
│ ├── streamlit.py # Streamlit UI
│ └── tools/
│ ├── base.py # 工具基类
│ ├── computer.py # 桌面控制工具
│ └── bash.py # Bash 命令工具
├── image/ # 图像处理工具
├── tests/ # 测试用例
├── Dockerfile # 容器定义
├── pyproject.toml # 项目配置
├── setup.sh # 开发环境设置
└── README.md4.2 Agent Loop 核心代码
python
# computer_use_demo/loop.py(简化版)
import anthropic
from .tools.computer import ComputerTool
from .tools.bash import BashTool
class ComputerUseAgent:
def __init__(self, model: str = "claude-sonnet-4-5-20250929"):
self.client = anthropic.Anthropic()
self.model = model
self.tools = [
ComputerTool(),
BashTool(),
]
async def run(self, task: str):
messages = [{"role": "user", "content": task}]
while True:
# 截取当前屏幕
screenshot = await self.take_screenshot()
# 调用 Claude API
response = self.client.messages.create(
model=self.model,
max_tokens=4096,
system=self.system_prompt,
messages=messages,
tools=[t.to_params() for t in self.tools],
)
# 处理响应
if response.stop_reason == "tool_use":
# 执行工具调用
for block in response.content:
if block.type == "tool_use":
result = await self.execute_tool(
block.name,
block.input
)
messages.append({
"role": "assistant",
"content": response.content
})
messages.append({
"role": "user",
"content": [{
"type": "tool_result",
"tool_use_id": block.id,
"content": result
}]
})
else:
# 任务完成或需要用户输入
return response.content4.3 屏幕截图与坐标缩放
高分辨率屏幕需要缩放以适配 API:
python
# computer_use_demo/tools/computer.py
class ComputerTool:
# 推荐分辨率(模型性能最佳)
RECOMMENDED_WIDTH = 1024
RECOMMENDED_HEIGHT = 768
def __init__(self, display_width: int = 1920, display_height: int = 1080):
self.display_width = display_width
self.display_height = display_height
# 计算缩放比例
self.scale_x = display_width / self.RECOMMENDED_WIDTH
self.scale_y = display_height / self.RECOMMENDED_HEIGHT
def scale_coordinates(self, x: int, y: int) -> tuple[int, int]:
"""将模型输出的坐标转换为实际屏幕坐标"""
return (
int(x * self.scale_x),
int(y * self.scale_y)
)
async def screenshot(self) -> str:
"""截取屏幕并缩放到推荐分辨率"""
import subprocess
import base64
from PIL import Image
import io
# 截取原始屏幕
result = subprocess.run(
["scrot", "-o", "/tmp/screenshot.png"],
capture_output=True
)
# 缩放到推荐分辨率
img = Image.open("/tmp/screenshot.png")
img = img.resize(
(self.RECOMMENDED_WIDTH, self.RECOMMENDED_HEIGHT),
Image.LANCZOS
)
# 转换为 base64
buffer = io.BytesIO()
img.save(buffer, format="PNG")
return base64.b64encode(buffer.getvalue()).decode()5. 安全注意事项
5.1 风险评估
⚠️ Computer Use 是 Beta 功能,存在独特风险
| 风险类型 | 描述 | 缓解措施 |
|---|---|---|
| 数据泄露 | Claude 可能看到屏幕上的敏感信息 | 使用隔离环境,避免敏感数据 |
| 恶意操作 | 网页可能通过视觉欺骗指导 Claude | 域名白名单,限制访问 |
| 意外后果 | 自动操作可能造成不可逆改变 | 人工确认关键操作 |
| 提示注入 | 网页内容可能覆盖用户指令 | 谨慎对待网页任务 |
5.2 安全最佳实践
┌─────────────────────────────────────────────────────────────────┐
│ 安全防护层次 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 第一层:环境隔离 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • 使用专用虚拟机或 Docker 容器 │ │
│ │ • 最小权限原则:不给予管理员权限 │ │
│ │ • 不保存密码或敏感凭证 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 第二层:网络限制 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • 域名白名单:只允许访问特定网站 │ │
│ │ • 网络隔离:限制对内网资源的访问 │ │
│ │ • 禁止下载执行未知程序 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 第三层:人工审批 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ • 关键操作需人工确认: │ │
│ │ - 财务交易 │ │
│ │ - 接受服务条款 │ │
│ │ - 发送电子邮件 │ │
│ │ - 删除文件 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘6. 配置与优化
6.1 屏幕分辨率
推荐使用 XGA 分辨率(1024x768)以获得最佳模型性能:
bash
docker run \
-e WIDTH=1024 \
-e HEIGHT=768 \
# ... 其他参数6.2 持久化配置
挂载 ~/.anthropic/ 目录可以保存:
- API 密钥
- 自定义系统提示
- 会话历史
bash
-v $HOME/.anthropic:/home/computeruse/.anthropic6.3 模型选择
| 模型 | 速度 | 成本 | 准确性 | 推荐场景 |
|---|---|---|---|---|
| Claude Opus 4.5 | 慢 | 高 | 最高 | 复杂任务 |
| Claude Sonnet 4.5 | 中 | 中 | 高 | 通用推荐 |
| Claude Haiku 4.5 | 快 | 低 | 中 | 简单任务 |
7. 使用示例
7.1 基础任务
用户:打开 Firefox,搜索 "Anthropic Claude"
Claude 执行步骤:
1. 截取屏幕,识别桌面环境
2. 找到 Firefox 图标并点击
3. 等待浏览器打开
4. 在地址栏输入搜索内容
5. 按回车执行搜索
6. 报告结果7.2 复杂任务
用户:创建一个包含今日日期的文本文件
Claude 执行步骤:
1. 打开终端
2. 执行命令:echo "Today is $(date)" > today.txt
3. 验证文件创建成功
4. 使用 cat 显示内容
5. 报告完成8. 与其他方案对比
8.1 vs RPA 工具(UiPath、Automation Anywhere)
| 特性 | Computer Use | 传统 RPA |
|---|---|---|
| 编程方式 | 自然语言 | 可视化流程/代码 |
| 适应性 | 高(视觉理解) | 低(依赖选择器) |
| 学习成本 | 低 | 中高 |
| 稳定性 | 中(Beta) | 高 |
| 企业支持 | 基础 | 完善 |
8.2 vs Selenium/Playwright
| 特性 | Computer Use | Selenium |
|---|---|---|
| 定位方式 | 视觉识别 | DOM 选择器 |
| 跨应用 | 支持 | 仅浏览器 |
| 维护成本 | 低 | 中(选择器变化) |
| 速度 | 中 | 快 |
| 错误恢复 | 智能 | 需编程 |
9. 总结
Computer Use Demo 展示了 Claude 独有的桌面控制能力:
| 方面 | 评价 |
|---|---|
| 创新性 | ⭐⭐⭐⭐⭐ 业界首创的视觉驱动桌面控制 |
| 实用性 | ⭐⭐⭐ Beta 阶段,适合探索和原型 |
| 安全性 | ⭐⭐ 需要谨慎使用,遵循最佳实践 |
| 部署难度 | ⭐⭐⭐ Docker 容器化,易于启动 |
适用场景:
- 自动化重复性桌面任务
- 跨应用工作流(非纯 Web)
- 无障碍辅助技术
- 软件测试自动化探索
限制与注意:
- Beta 功能,API 可能变化
- 需要在隔离环境中运行
- 复杂任务可能需要多次尝试
- 不适合处理敏感信息
下一节,我们将学习 Browser Use Demo,了解更专注于浏览器自动化的实现方式。