计算机使用代理Skill computer-use-agents

这个技能是关于构建AI代理来与计算机交互,像人类一样查看屏幕、移动光标、点击按钮和输入文本。它涵盖计算机使用代理的开发,包括Anthropic的计算机使用、OpenAI的Operator/CUA和开源替代方案。重点在于沙盒化、安全性和基于视觉的控制的独特挑战。关键词包括:AI智能体、计算机使用代理、桌面自动化、视觉控制、沙盒化、安全代理。

AI智能体 0 次安装 0 次浏览 更新于 3/21/2026

名称: 计算机使用代理 描述: “构建AI代理,像人类一样与计算机交互 - 查看屏幕、移动光标、点击按钮和输入文本。涵盖Anthropic的计算机使用、OpenAI的Operator/CUA和开源替代方案。重点关注沙盒化、安全性和基于视觉的控制的独特挑战。适用场景:计算机使用、桌面自动化代理、屏幕控制AI、基于视觉的代理、GUI自动化。” 来源: vibeship-spawner-skills (Apache 2.0)

计算机使用代理

模式

感知-推理-动作循环

计算机使用代理的基本架构:观察屏幕、推理下一步动作、执行动作、重复。这个循环通过一个迭代管道将视觉模型与动作执行集成。

关键组件:

  1. 感知:截图捕获当前屏幕状态
  2. 推理:视觉语言模型分析和规划
  3. 动作:执行鼠标/键盘操作
  4. 反馈:观察结果,继续或纠正

关键洞察:视觉代理在“思考”阶段(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容器。

关键隔离要求:

  1. 网络:仅限于必要的端点
  2. 文件系统:只读或限于临时目录
  3. 凭证:无权访问主机凭证
  4. 系统调用:过滤危险系统调用
  5. 资源:限制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:
            

⚠️ 尖锐问题

问题 严重性 解决方案
问题 严重 ## 深度防御 - 没有单一解决方案有效
问题 中等 ## 添加类人动作变化
问题 ## 可能时使用键盘替代方案
问题 中等 ## 接受权衡
问题 ## 实现上下文管理
问题 ## 监控和限制成本
问题 严重 ## 始终使用沙盒化