名称: 计算机使用代理 描述: “构建AI代理,像人类一样与计算机交互 - 查看屏幕、移动光标、点击按钮和输入文本。涵盖Anthropic的计算机使用、OpenAI的Operator/CUA和开源替代方案。重点关注沙盒化、安全性和基于视觉的控制的独特挑战。适用场景:计算机使用、桌面自动化代理、屏幕控制AI、基于视觉的代理、GUI自动化。” 来源: vibeship-spawner-skills (Apache 2.0)
计算机使用代理
模式
感知-推理-动作循环
计算机使用代理的基本架构:观察屏幕、推理下一步动作、执行动作、重复。这个循环通过一个迭代管道将视觉模型与动作执行集成。
关键组件:
- 感知:截图捕获当前屏幕状态
- 推理:视觉语言模型分析和规划
- 动作:执行鼠标/键盘操作
- 反馈:观察结果,继续或纠正
关键洞察:视觉代理在“思考”阶段(1-5秒)完全静止,形成一个可检测的暂停模式。
适用场景: [‘从零开始构建任何计算机使用代理’, ‘将视觉模型与桌面控制集成’, ‘理解代理行为模式’]
from anthropic import Anthropic
from PIL import Image
import base64
import pyautogui
import time
class ComputerUseAgent:
"""
感知-推理-动作循环实现。
基于Anthropic计算机使用模式。
"""
def __init__(self, client: Anthropic, model: str = "claude-sonnet-4-20250514"):
self.client = client
self.model = model
self.max_steps = 50 # 防止失控循环
self.action_delay = 0.5 # 动作之间的秒数
def capture_screenshot(self) -> str:
"""捕获屏幕并返回base64编码的图像。"""
screenshot = pyautogui.screenshot()
# 为令牌效率调整大小(1280x800是良好平衡)
screenshot = screenshot.resize((1280, 800), Image.LANCZOS)
import io
buffer = io.BytesIO()
screenshot.save(buffer, format="PNG")
return base64.b64encode(buffer.getvalue()).decode()
def execute_action(self, action: dict) -> dict:
"""在计算机上执行鼠标/键盘动作。"""
action_type = action.get("type")
if action_type == "click":
x, y = action["x"], action["y"]
button = action.get("button", "left")
pyautogui.click(x, y, button=button)
return {"success": True, "action": f"clicked at ({x}, {y})"}
elif action_type == "type":
text = action["text"]
pyautogui.typewrite(text, interval=0.02)
return {"success": True, "action": f"typed {len(text)} chars"}
elif action_type == "key":
key = action["key"]
pyautogui.press(key)
return {"success": True, "action": f"pressed {key}"}
elif action_type == "scroll":
direction = action.get("direction", "down")
amount = action.get("amount", 3)
scroll = -amount if direction == "down" else amount
pyautogui.scroll(scroll)
return {"success": True, "action": f"scrolled {dir
沙盒化环境模式
计算机使用代理必须在隔离的沙盒环境中运行。永远不要给代理直接访问你的主系统——安全风险太高。使用带有虚拟桌面的Docker容器。
关键隔离要求:
- 网络:仅限于必要的端点
- 文件系统:只读或限于临时目录
- 凭证:无权访问主机凭证
- 系统调用:过滤危险系统调用
- 资源:限制CPU、内存、时间
目标是“爆炸半径最小化”——如果代理出错,损害被限制在沙盒内。
适用场景: [‘部署任何计算机使用代理’, ‘安全测试代理行为’, ‘运行不受信任的自动化任务’]
# Dockerfile for sandboxed computer use environment
# Based on Anthropic's reference implementation pattern
FROM ubuntu:22.04
# Install desktop environment
RUN apt-get update && apt-get install -y \
xvfb \
x11vnc \
fluxbox \
xterm \
firefox \
python3 \
python3-pip \
supervisor
# Security: Create non-root user
RUN useradd -m -s /bin/bash agent && \
mkdir -p /home/agent/.vnc
# Install Python dependencies
COPY requirements.txt /tmp/
RUN pip3 install -r /tmp/requirements.txt
# Security: Drop capabilities
RUN apt-get install -y --no-install-recommends libcap2-bin && \
setcap -r /usr/bin/python3 || true
# Copy agent code
COPY --chown=agent:agent . /app
WORKDIR /app
# Supervisor config for virtual display + VNC
COPY supervisord.conf /etc/supervisor/conf.d/
# Expose VNC port only (not desktop directly)
EXPOSE 5900
# Run as non-root
USER agent
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
---
# docker-compose.yml with security constraints
version: '3.8'
services:
computer-use-agent:
build: .
ports:
- "5900:5900" # VNC for observation
- "8080:8080" # API for control
# Security constraints
security_opt:
- no-new-privileges:true
- seccomp:seccomp-profile.json
# Resource limits
deploy:
resources:
limits:
cpus: '2'
memory: 4G
reservations:
cpus: '0.5'
memory: 1G
# Network isolation
networks:
- agent-network
# No access to host filesystem
volumes:
- agent-tmp:/tmp
# Read-only root filesystem
read_only: true
tmpfs:
- /run
- /var/run
# Environment
environment:
- DISPLAY=:99
- NO_PROXY=localhost
networks:
agent-network:
driver: bridge
internal: true # No internet by default
volumes:
agent-tmp:
---
# Python wrapper with additional runtime sandboxing
import subprocess
import os
from dataclasses im
Anthropic 计算机使用实现
使用Claude计算机使用能力的官方实现模式。Claude 3.5 Sonnet是第一个提供计算机使用的前沿模型。Claude Opus 4.5现在是“世界上计算机使用的最佳模型”。
关键能力:
- 截图:捕获当前屏幕状态
- 鼠标:点击、移动、拖拽操作
- 键盘:输入文本、按键
- 终端:运行shell命令
- 文本编辑器:查看和编辑文件
工具版本:
- computer_20251124 (Opus 4.5): 添加了详细检查的缩放动作
- computer_20250124 (所有其他模型): 标准能力
关键限制:“一些UI元素(如下拉菜单和滚动条)可能对Claude操作有难度”——Anthropic文档
适用场景: [‘构建生产环境计算机使用代理’, ‘需要最高质量的视觉理解’, ‘完整的桌面控制(不仅仅是浏览器)’]
from anthropic import Anthropic
from anthropic.types.beta import (
BetaToolComputerUse20241022,
BetaToolBash20241022,
BetaToolTextEditor20241022,
)
import subprocess
import base64
from PIL import Image
import io
class AnthropicComputerUse:
"""
官方Anthropic计算机使用实现。
要求:
- 带有虚拟显示的Docker容器
- VNC用于查看代理动作
- 适当的工具实现
"""
def __init__(self):
self.client = Anthropic()
self.model = "claude-sonnet-4-20250514" # 计算机使用最佳模型
self.screen_size = (1280, 800)
def get_tools(self) -> list:
"""定义计算机使用工具。"""
return [
BetaToolComputerUse20241022(
type="computer_20241022",
name="computer",
display_width_px=self.screen_size[0],
display_height_px=self.screen_size[1],
),
BetaToolBash20241022(
type="bash_20241022",
name="bash",
),
BetaToolTextEditor20241022(
type="text_editor_20241022",
name="str_replace_editor",
),
]
def execute_tool(self, name: str, input: dict) -> dict:
"""执行一个工具并返回结果。"""
if name == "computer":
return self._handle_computer_action(input)
elif name == "bash":
return self._handle_bash(input)
elif name == "str_replace_editor":
return self._handle_editor(input)
else:
return {"error": f"Unknown tool: {name}"}
def _handle_computer_action(self, input: dict) -> dict:
"""处理计算机控制动作。"""
action = input.get("action")
if action == "screenshot":
# Capture via xdotool/scrot
subprocess.run(["scrot", "/tmp/screenshot.png"])
with open("/tmp/screenshot.png", "rb") as f:
⚠️ 尖锐问题
| 问题 | 严重性 | 解决方案 |
|---|---|---|
| 问题 | 严重 | ## 深度防御 - 没有单一解决方案有效 |
| 问题 | 中等 | ## 添加类人动作变化 |
| 问题 | 高 | ## 可能时使用键盘替代方案 |
| 问题 | 中等 | ## 接受权衡 |
| 问题 | 高 | ## 实现上下文管理 |
| 问题 | 高 | ## 监控和限制成本 |
| 问题 | 严重 | ## 始终使用沙盒化 |