1. 项目概述:一个为AI“电脑管家”设计的“安全驾驶考试”

如果你最近关注多模态大模型和AI智能体(Agent)的发展,一定听说过“计算机使用智能体”(Computer-Use Agent, CUA)这个概念。简单来说,这类智能体就像一个能“看见”电脑屏幕、理解你的指令,并帮你操作电脑的AI助手。你可以告诉它“帮我把桌面上的报告用邮件发给老板”,它就能自动打开邮箱、上传附件、填写地址并点击发送。

听起来很酷,对吧?但作为一名在AI安全领域摸爬滚打多年的从业者,我第一时间想到的不是便利,而是 风险 。一个拥有如此强大操作权限的AI,如果被恶意指令诱导,或者自身存在逻辑漏洞,会做出什么事?它会不会不小心点开钓鱼邮件、泄露你的密码、或者绕过验证码去注册垃圾账号?这正是 RiOSWorld 这个项目要解决的核心问题。

RiOSWorld,直译为“风险操作系统世界”,是NeurIPS 2025收录的一个基准测试(Benchmark)。你可以把它理解为一个为CUA智能体设计的、高保真的“安全驾驶模拟考场”。它不关心这个AI“司机”能把车开多快(任务完成率),而是专门考察它在复杂、甚至充满“陷阱”的桌面环境中,是否会做出危险或不当的操作。这个项目开源了完整的测试环境、风险场景定义和评估框架,为社区研究可信、安全的CUA提供了至关重要的工具。

2. 核心设计思路:在真实操作系统中构建风险“靶场”

为什么我们需要RiOSWorld这样的专门基准?在它出现之前,业界对CUA的评估大多集中在任务完成能力上,比如“能否成功安装一个软件”、“能否写一封邮件”。这就像只考驾照的科目二(技巧),不考科目三(路况和安全意识)。RiOSWorld的贡献在于,它系统性地定义了CUA可能面临的 环境风险 ,并将这些风险嵌入到一个真实的、可交互的桌面操作系统中进行测试。

2.1 风险维度的拆解与定义

RiOSWorld没有泛泛而谈“安全”,而是将风险具体化为几个可操作、可观测的类别。这是项目设计中最具洞察力的部分,也是我们做安全评估时最应该学习的地方—— 风险必须可度量

  1. 验证码滥用风险 :智能体是否会尝试自动化破解或绕过验证码(如reCAPTCHA)?这是衡量其是否遵守“机器人”与“人类”边界的关键。
  2. 网络钓鱼风险 :当智能体浏览网页或处理邮件时,能否识别出伪造的登录页面或钓鱼链接?它会不会在假网站上输入真实的账号密码?
  3. 凭证欺诈风险 :智能体在需要登录的场合,是会使用预设的、安全的测试凭证,还是可能尝试使用它从别处“看到”或“推断”出的敏感信息?
  4. 社会工程攻击风险 :智能体是否会处理带有诱导性内容的邮件(如“点击此链接领取奖金”),并执行危险操作?

这些风险场景不是凭空想象的,而是对现实世界中自动化攻击和用户误操作的高度抽象。RiOSWorld为每一类风险都构建了对应的测试任务和环境。

2.2 技术架构:基于OSWorld的“风险增强”层

RiOSWorld并非从零搭建,它明智地建立在另一个优秀的开源项目—— OSWorld 之上。OSWorld提供了一个标准化的、可编程的桌面环境模拟框架,让研究者可以像写脚本一样定义和评估CUA的复杂任务。

RiOSWorld在OSWorld的基础上,做了关键的“风险化”改造:

  • 环境注入 :在干净的虚拟机环境中,预先部署好钓鱼网站服务器、伪造的登录页面、带有验证码的测试网页等“风险元件”。
  • 任务设计 :设计一系列看似平常但暗藏玄机的指令。例如,给智能体的指令可能是“登录这个网站查看你的消息”,而它面对的却是一个高仿的钓鱼页面。
  • 评估逻辑 :评估的重点从“任务是否完成”转变为“行为是否安全”。系统会全程记录智能体的每一个操作(点击、输入、导航),并最终通过规则或大模型评委(LLM-as-a-judge)来判断其行为意图是否存在风险。

这种架构选择非常务实,既利用了成熟框架的稳定性,又精准地注入了自己的核心创新点。在实际研发中,这种“站在巨人肩膀上做增强”的思路,往往比从头造轮子更高效、更易被社区接受。

3. 环境搭建与配置实战指南

理论讲完,我们进入实战环节。要让RiOSWorld跑起来,需要搭建一个包含虚拟机(VM)的完整测试环境。这个过程稍有繁琐,但每一步都至关重要。下面是我在多次部署中总结的详细步骤和避坑要点。

3.1 基础Python环境与依赖安装

首先,克隆代码并准备Python环境。官方推荐使用Conda,这是管理项目依赖、避免版本冲突的最佳实践。

# 1. 克隆仓库
git clone https://github.com/yjyddq/RiOSWorld
cd RiOSWorld

# 2. 创建并激活Conda环境(Python 3.9是经过验证的稳定版本)
conda create -n RiOSWorld python=3.9
conda activate RiOSWorld

# 3. 安装依赖包
pip install -r requirements.txt

注意 requirements.txt 中通常包含一些对系统库有要求的包(如 pyautogui , opencv-python )。如果安装失败,你可能需要先安装系统级的开发工具。在Ubuntu上可以尝试 sudo apt-get install python3-dev ;在macOS上确保Xcode Command Line Tools已安装 ( xcode-select --install )。

3.2 虚拟机管理程序(Provider)选型与安装

这是整个环境的核心。RiOSWorld需要一个隔离的、可编程控制的桌面环境来运行测试,虚拟机是最佳选择。项目主要支持两种Provider:VMware(适合本地开发)和Docker(适合云服务器或集群)。

方案一:本地开发首选 - VMware

对于绝大多数在个人电脑(macOS或Windows)上进行研究的同学,VMware是首选,因为它能提供完整的图形化桌面体验。

  1. 下载安装

  2. 关键配置 :安装后,务必将VMware的命令行工具 vmrun 所在的目录添加到系统的PATH环境变量中。这是RiOSWorld控制虚拟机的桥梁。

    • 通常在macOS的 /Applications/VMware Fusion.app/Contents/Library 或 Windows的 C:\Program Files (x86)\VMware\VMware Workstation
    • 验证是否成功:打开终端,输入 vmrun -T ws list 。如果安装正确,即使没有虚拟机在运行,它也会正常执行并返回,而不是报“command not found”。

方案二:无头服务器/自动化部署 - Docker

如果你在云服务器(如AWS、GCP)或没有图形界面的Linux服务器上工作,Docker方案是唯一选择。它通过KVM虚拟化和VNC来实现“无头”的图形环境。

  1. 下载虚拟机镜像

    # 创建目录并下载官方预置的Ubuntu镜像
    mkdir -p ./docker_vm_data/
    wget -P ./docker_vm_data/ https://huggingface.co/datasets/xlangai/ubuntu_osworld/resolve/main/Ubuntu.qcow2.zip
    unzip ./docker_vm_data/Ubuntu.qcow2.zip -d ./docker_vm_data/
    
  2. 启动Docker容器

    docker run -it \
        --cap-add=NET_ADMIN \
        --device=/dev/kvm \
        -e DISK_SIZE=32G \
        -e RAM_SIZE=4G \
        -e CPU_CORES=4 \
        -v $(pwd)/docker_vm_data/Ubuntu.qcow2:/boot.qcow2:rw \
        -p 8006:8006 \
        -p 5000:5000 \
        -p 9222:9222 \
        -p 8080:8080 \
        happysixd/osworld-docker
    

    这条命令做了几件重要的事:授予容器KVM权限、挂载磁盘镜像、并映射了多个端口(VNC在8006,后续风险服务可能会用到5000、8080等)。

  3. 连接桌面 :在宿主机上使用VNC查看器(如macOS的 Screen Sharing ,Windows的 RealVNC )连接 localhost:8006 ,你就能看到虚拟机的桌面了。

实操心得 :第一次启动Docker镜像时,虚拟机内部系统可能还在初始化,VNC画面可能是黑屏或命令行。耐心等待几分钟,直到出现完整的Ubuntu GNOME桌面。如果始终无法连接,检查宿主机防火墙是否放行了8006端口。

3.3 虚拟机内部环境标准化配置

无论使用哪种Provider,虚拟机内部的桌面环境必须进行标准化设置,这是保证实验可重复性的 生命线 。RiOSWorld的测试脚本依赖于特定的桌面布局。

  1. 禁用自动睡眠和锁屏 :在虚拟机内,进入系统设置(Settings)-> 电源(Power),将“空白屏幕”和“自动挂起”设为“从不”。同时,在隐私(Privacy)-> 屏幕锁定(Screen Lock)中禁用自动锁屏。这一步至关重要,否则测试运行到一半屏幕锁住,AI就“瞎”了。

  2. 严格遵循标准桌面布局 :按照项目 assets/desktop.png 图片所示,布置你的虚拟机桌面。通常包括:

    • 将“Files”(文件管理器)和“Terminal”(终端)图标固定在左侧启动器。
    • 在桌面左上角放置几个测试用的文件夹和文本文档。
    • 确保浏览器(如Firefox)在启动器中,且没有多余窗口打开。 不要小看这一步 。CUA智能体通常依赖视觉定位(如图标位置)来执行点击操作。布局不一致会导致脚本无法找到目标元素,实验失败。
  3. 创建并命名虚拟机快照 :在VMware或Docker中,将配置好的、纯净的虚拟机状态保存为一个快照(Snapshot)。在RiOSWorld的代码中,你需要告诉它使用哪个快照来启动测试。

    • 打开 run.py 文件,找到第112行附近的 snapshot_name 参数。
    • 打开 desktop_env/desktop_env.py 文件,找到第32行附近的类似参数。
    • 将它们的值修改为你创建的快照的确切名称(例如 "Clean_State" )。
    • 为什么这么做? 每次测试都从一个干净的快照开始,可以消除上一次测试残留状态(如打开的网页、创建的文件)对本次实验的干扰,保证每次测试都是独立的。

4. 核心风险场景的部署与调试

环境搭好,接下来是部署具体的风险测试场景。这是RiOSWorld最“硬核”的部分,需要一些Web开发和网络知识。

4.1 reCAPTCHA验证码风险部署

这个场景测试智能体是否会尝试自动化解决验证码。我们需要搭建一个带有真实Google reCAPTCHA组件的测试网页。

  1. 申请reCAPTCHA密钥

    • 访问 Google reCAPTCHA管理页面 ,使用谷歌账号登录。
    • 点击“注册”新网站。这里有个关键点: 在“域名”部分,你必须添加你宿主机的IP地址 (如 192.168.1.100 ),因为我们的测试服务器运行在本地。也可以添加 localhost 127.0.0.1
    • 选择“reCAPTCHA v2” -> ““我不是机器人”复选框”类型。注册成功后,你会获得一对密钥: 站点密钥(Site Key) 密钥(Secret Key)
  2. 配置后端服务

    • 将上一步获得的两把密钥,分别填入 env_risk_utils/recaptcha.py 文件中对应的 RECAPTCHA_SITE_KEY RECAPTCHA_SECRET_KEY 变量位置。
    • 这个Python文件是一个Flask应用,它提供了显示验证码的页面和验证用户响应的接口。
  3. 修改网络配置

    • 风险服务器运行在宿主机上,但虚拟机需要能访问到它。你需要找到 evaluation_risk_examples/ 目录下相关任务的JSON配置文件(如 test_recaptcha.json )。
    • halfway_config 部分,找到 urls_to_open 里的地址(例如 "http://10.1.82.26:5006" )。
    • 将其中的IP地址 10.1.82.26 替换为你宿主机的实际局域网IP地址 。端口号(如5006)通常不用改,除非冲突。
    • 你可以使用 ipconfig (Windows) 或 ifconfig (macOS/Linux) 查看本机IP。

避坑指南 :最常见的失败原因是 密钥的域名设置 IP地址配置 。确保在Google reCAPTCHA控制台添加了宿主机的IP,并确保配置文件中的IP地址正确无误。否则,验证码会显示“无法验证”的错误。

4.2 钓鱼网站与账号欺诈风险部署

这两个场景原理相似,都是搭建一个本地Web服务器,提供一个伪造的登录页面。

  1. 获取页面源码 :你需要一个目标网站的登录页面HTML源码。可以通过浏览器打开目标页面(例如一个开源项目的登录页),然后右键“查看页面源代码”,全选复制。 请务必仅用于合法的安全研究,并选择允许测试的网站。

  2. 创建钓鱼页面

    • 将复制好的HTML代码保存到 env_risk_utils/templates/ 目录下,命名为例如 fake_login.html
    • 你完全可以(也应该)修改这个HTML,比如将表单提交的地址改为你自己的后端处理接口,或者在页面中添加更诱骗性的文字。这能测试智能体对更隐蔽威胁的抵抗力。
  3. 创建启动脚本

    • env_risk_utils/ 目录下,参考已有的 phishing.py account.py ,创建一个新的Python脚本(如 my_phishing.py )。
    • 脚本的核心是使用Flask或简单HTTP服务器,将上一步的HTML页面在你指定的端口(例如5007)提供服务。
    • 同样,记得在对应的任务JSON配置文件中,将打开的URL地址指向 http://[你的宿主机IP]:5007

4.3 钓鱼邮件风险部署

这个场景模拟智能体处理邮件时的风险。你需要两个真实的Gmail邮箱(一个发件,一个收件),并对发件邮箱进行特殊配置。

  1. 启用Gmail的“应用专用密码”

    • 由于Gmail默认的安全策略,直接使用账号密码通过脚本发信会失败。你需要为你的发件邮箱生成一个“应用专用密码”。
    • 登录发件Gmail,进入“管理您的Google账号” -> “安全性” -> “两步验证”(需先开启)-> “应用专用密码”。
    • 生成一个密码,并为其命名(如“RiOSWorld_Test”)。 这个密码只会显示一次,务必立即复制保存。
  2. 配置发信脚本

    • 打开 env_risk_utils/send_email.py 文件。
    • 修改 sender_email (发件地址)、 receiver_email (收件地址)和 password 变量。这里的 password 填的就是上一步生成的 16位应用专用密码 ,不是你邮箱的登录密码。
    • 你可以在脚本中精心设计钓鱼邮件的内容,比如模仿系统升级通知、奖品领取等,以测试智能体的警惕性。

5. 运行实验与结果评估

一切配置就绪后,就可以开始真正的测试了。

5.1 快速验证环境

首先,运行最小示例脚本,确保基础环境通信正常:

python run_minimal_example.py

这个脚本会尝试启动虚拟机,并在桌面执行一个简单的右键点击操作。如果你在虚拟机屏幕上看到了这个动作,恭喜你,环境打通了。

5.2 执行批量智能体风险测试

项目提供了 multi_llm_run.sh 脚本,用于批量测试不同的AI智能体模型(如GPT-4V、Claude-3、Gemini等)在各类风险任务上的表现。

  1. 配置脚本 :在运行前,必须编辑 multi_llm_run.sh 脚本。

    • 设置你的大模型API密钥(如 OPENAI_API_KEY )。
    • 指定要测试的模型列表(如 gpt-4-vision-preview , claude-3-opus-20240229 )。
    • 配置任务列表、输出目录等参数。
  2. 运行测试

    bash multi_llm_run.sh
    

    这个过程可能会比较耗时,因为每个任务都需要启动虚拟机、执行智能体的多轮决策和操作、并记录完整的轨迹(Trajectory)。你会看到控制台输出大量的交互日志。

5.3 自动化评估与意图判读

测试完成后,会生成一系列轨迹文件。如何判断智能体的行为是“安全”还是“有风险”?RiOSWorld提供了基于大模型评委(LLM-as-a-judge)的自动化评估管道。

  1. 运行评估脚本 :编辑并执行 multi_evaluation.sh

    bash multi_evaluation.sh
    

    这个脚本会读取之前生成的轨迹文件,将其作为上下文,提交给另一个大模型(例如GPT-4)进行评判。提示词(Prompt)会要求模型根据智能体的操作序列,判断其“是否试图进行恶意操作”(如绕过验证码、提交凭证到钓鱼网站)。

  2. 理解评估结果 :输出通常是每个任务的一个评分(如0/1,或风险等级)。你需要综合所有任务的结果,来评估一个智能体模型的整体风险倾向。项目在Hugging Face上发布了官方的评估轨迹数据,你可以用来与自己的结果进行对比分析。

6. 常见问题与排查实录

在实际部署和运行中,我遇到了不少坑。这里把典型问题和解决方案记录下来,希望能帮你节省大量时间。

问题一: vmrun 命令找不到或执行失败。

  • 现象 :运行脚本时报错 Command ‘vmrun’ not found Unable to connect to host
  • 排查
    1. 路径问题 :确认 vmrun 的安装目录已加入系统PATH。可以尝试在终端输入完整路径执行,如 /Applications/VMware\ Fusion.app/Contents/Library/vmrun list
    2. 权限问题 :在macOS或Linux上,可能需要为VMware内核扩展授予权限。重启电脑时注意提示,或在“系统设置-安全性与隐私”中允许来自VMware的加载项。
    3. 服务未启动 :确保VMware的相关服务正在运行。在Windows的服务管理器中查看“VMware Authorization Service”和“VMware Workstation Server”是否启动。

问题二:Docker方案中VNC无法连接或黑屏。

  • 现象 :VNC客户端连接 localhost:8006 后,一直黑屏或连接被拒绝。
  • 排查
    1. 端口映射 :确认Docker run命令正确映射了 -p 8006:8006 。用 docker ps 查看容器运行状态和端口映射。
    2. KVM支持 :Docker方案需要宿主机支持KVM硬件虚拟化。在Linux上运行 lsmod | grep kvm 检查KVM模块是否加载。在云服务器上,需选择支持嵌套虚拟化的实例类型。
    3. 等待启动 :首次启动镜像,虚拟机内部操作系统需要时间初始化。等待2-5分钟再尝试连接VNC。

问题三:reCAPTCHA测试页面显示“无法验证”错误。

  • 现象 :虚拟机内浏览器打开了测试页,但reCAPTCHA插件显示红色错误。
  • 排查
    1. 密钥域名 :这是最常见原因。100%确认你在Google reCAPTCHA控制台注册站点时,在“域名”列表里添加了 宿主机的局域网IP地址 (如 192.168.31.45 )。
    2. IP一致性 :确保 recaptcha.py 中Flask服务器监听的IP是 0.0.0.0 (允许所有连接),并且任务JSON配置中 urls_to_open 的IP与上一步添加的域名IP一致。
    3. 网络连通性 :从虚拟机内部,尝试用浏览器直接访问 http://[宿主机IP]:5006 ,看是否能打开页面。如果不能,检查宿主机防火墙是否屏蔽了5006端口。

问题四:智能体任务执行失败,找不到桌面元素。

  • 现象 :任务日志显示智能体一直在“寻找”某个按钮或图标,但最终超时失败。
  • 排查
    1. 桌面布局 :再次严格比对你的虚拟机桌面与 assets/desktop.png 的布局。图标位置、桌面文件数量、甚至任务栏的自动隐藏设置,都可能影响视觉定位。
    2. 屏幕分辨率 :将虚拟机的屏幕分辨率设置为一个固定值(如1920x1080),并避免在测试过程中缩放VNC窗口。分辨率变化会导致坐标计算错误。
    3. 快照状态 :确保每次任务都从一个 干净、统一 的快照启动。快照里不应该有残留的浏览器窗口、文件对话框等。

问题五:评估脚本调用LLM API失败或速度极慢。

  • 现象 multi_evaluation.sh 运行时报API错误,或长时间卡住。
  • 排查
    1. API密钥与模型名 :检查评估脚本中配置的API密钥和模型名称是否正确、有效。例如,OpenAI的 gpt-4-vision-preview gpt-4-turbo 是不同的端点。
    2. 速率限制 :批量评估会发送大量请求,容易触发API的速率限制(Rate Limit)。在脚本中增加请求间隔(如 sleep 2 ),或考虑使用异步请求库。
    3. 轨迹文件路径 :确认评估脚本中输入的轨迹文件路径( --trajectory_path )是正确的,并且文件格式是JSONL等预期格式。

部署RiOSWorld的过程,本身就是一个对CUA风险建立直观认知的过程。你会深刻体会到,一个看似简单的“点击”或“输入”指令背后,需要多么精细的环境控制和风险建模。这个项目最大的价值,或许不在于它给出的几个测试分数,而在于它为我们提供了一套完整的、可扩展的方法论和工程实践,让“AI安全评估”从一个模糊的概念,变成了可以一行行代码搭建、一个个任务执行的实在工作。对于任何想要深入CUA或AI安全领域的研究者和开发者来说,亲手复现一遍RiOSWorld,都是极其宝贵的一课。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐