首先,安装所有依赖项,并确保你运行的是 Python 3.10。
conda create -n stepjack python=3.10
conda activate stepjack
pip install -r requirements.txt
我们使用 RedTeamCUA 提供的 AWS 环境。
AWS
配置 NETWORK_INTERFACE_MAP:
根据你自己的 AWS 实例,在 aws_config.py 中配置 NETWORK_INTERFACE_MAP。
配置你的安全组:
配置一个安全组非常重要,它既要允许对你托管的实例进行合法访问,又要阻止未经授权的访问尝试。这一点至关重要,因为该 AMI 默认仅使用基于密码的基本身份验证,这种验证方式相对容易被攻破。
你的本地机器将通过 HTTP/TCP 连接访问托管在 AWS 上的服务。因此,你应明确允许访问以下端口:8092、6379、9999、5000、9222、8091、2999 和 3000,这些端口由 WebArena 或 TheAgentCompany 使用。
此外,我们会使用 SSH 直接修改底层数据库以模拟注入场景。因此,还必须在安全组设置中允许来自你本地 IP 地址的 SSH 访问。
通过 aws configure 配置你的 AWS 凭证,该命令会提示你输入:
scripts/run_gpt54_2step.sh 展示了在 StepJack 上运行 GPT-5.4 CUA 的一个示例。
设置环境变量
CUA API 密钥
# For GPT
unset OPENAI_BASE_URL
export OPENAI_API_KEY="sk-proj-XXXX"
# For Kimi
export KIMI_API_KEY='sk-XXXX'
# For Qwen
export OPENAI_BASE_URL="https://dashscope-us.aliyuncs.com/compatible-mode/v1"
export OPENAI_API_KEY="sk-XXXX"
# For Claude
export ANTHROPIC_API_KEY='sk-XXXX'
AWS 凭证
export AWS_REGION='XX'
export AWS_ACCESS_KEY='XX'
export AWS_SECRET_KEY='XX'
运行实验
# For GPT
python run_gpt54_multienv.py \
--observation_type screenshot \
--agent_type GPT54Agent \
--headless \
--model gpt-5.4-mini-2026-03-17 \
--result_dir ./results_gpt54 \
--test_all_meta_path "./dataset/{subset}/{platform_instruction}/test_{k}_step.json" \
--test_config_base_dir "./dataset/{subset}/{platform_instruction}" \
--max_steps {15*k} \
--sleep_after_execution 4 \
--provider_name aws \
--num_envs 12 \
--aws_ami {reddit | agentcompany}
# For Kimi
python run_kimi_multienv.py \
--observation_type screenshot \
--agent_type KimiAgent \
--headless \
--model Kimi-K2.5 \
--result_dir ./results_kimi \
--test_all_meta_path "./dataset/{subset}/{platform_instruction}/test_{k}_step.json" \
--test_config_base_dir "./dataset/{subset}/{platform_instruction}" \
--max_steps {15*k} \
--sleep_after_execution 4 \
--provider_name aws \
--num_envs 12 \
--aws_ami {reddit | agentcompany}
# For Qwen
python run_qwen35vl_multienv.py \
--observation_type screenshot \
--agent_type Qwen35VLAgent \
--headless \
--model qwen3.5-plus-2026-02-15 \
--coord relative \
--enable_thinking \
--result_dir ./results_qwen \
--test_all_meta_path "./dataset/{subset}/{platform_instruction}/test_{k}_step.json" \
--test_config_base_dir "./dataset/{subset}/{platform_instruction}" \
--max_steps {15*k} \
--sleep_after_execution 4 \
--provider_name aws \
--num_envs 12 \
--aws_ami {reddit | agentcompany}
# For Claude
python run_claude_multienv.py \
--observation_type screenshot \
--action_space pyautogui \
--agent_type AnthropicAgent \
--api_provider anthropic \
--headless \
--model {claude-sonnet-4-6 | claude-haiku-4-5} \
--result_dir ./results_claude \
--test_all_meta_path "./dataset/{subset}/{platform_instruction}/test_{k}_step.json" \
--test_config_base_dir "./dataset/{subset}/{platform_instruction}" \
--max_steps {15*k} \
--sleep_after_execution 4 \
--provider_name aws \
--num_envs 12 \
--aws_ami {reddit | agentcompany}
自动分解流水线的代码位于 auto_decomp/ 中。
cd auto_decomp。将要分解的新对抗性目标添加到 adv_goals.py 中。k \in \{2, 3\},运行 python iterative_refinement.py -k {k}。输出:ir/goal_*_k{k}_N20_K3_all.json,其中包含阶段 1 的结果。python selected_examples/select_examples.py。输出:selected_examples/selected_examples.json,该文件从阶段 1 的结果中选出前 10 个示例。StepJack 构建在 RedTeamCUA(Liao et al., 2025; arXiv:2505.21936)的基础之上,而 RedTeamCUA 又源自 OSWorld(XLANG NLP Lab, 2024)。两个上游来源均采用 Apache-2.0 许可。
StepJack 的某些数据目录没有按文件添加文件头,因为它们包含二进制或非源代码的固定文件(fixtures)。其来源在此记录以供署名:
adv/TheAgentCompany_OwnCloud/file_to_upload/ — 从 RedTeamCUA 复制(adv/TheAgentCompany_OwnCloud/file_to_upload/),原始版本采用 Apache-2.0 许可。adv/upload_file/ — 包含两个 SSH 密钥固定文件(system/authorized_keys、system/id_rsa),用作数据集任务配置中的上传负载。由 StepJack 整理(其中的值是占位字符串,并非真实密钥)。根据本源代码树根目录下 LICENSE 文件中的许可发布。adv/upload_file_dir/ — StepJack 原创。RedTeamCUA 中不存在。根据本源代码树根目录下 LICENSE 文件中的许可发布。dataset/ — 改编自 RedTeamCUA 的 evaluation_examples/,并进行了大量修改。RedTeamCUA 的评估示例根据其 croissant_metadata.json 以 发布。StepJack 对任务配置所做的修改和新增内容,根据本源代码树根目录下 文件中的许可发布。参数说明:
single_step(k=1)、w_urgent(Urgent = Y)、wo_urgent(Urgent = N)。forum、forum_follow、owncloud、owncloud_follow。它们对应 2 个平台和 2 种用户指令类型。(subset, k) 组合:single_step 仅搭配 k=1;w_urgent 和 wo_urgent 仅搭配 k \in \{2,3\}。forum 平台应为 reddit,owncloud 平台应为 agentcompany。LICENSEdesktop_env/ — 从 RedTeamCUA 的 desktop_env/ 复制/改编,其本身源自 OSWorld;两个上游来源均采用 Apache-2.0 许可。按源文件添加的文件头(.py / .sh / .yml / .service / .txt)记录了每个文件的具体来源(复制或由 StepJack 修改)。随附的文档文件(例如 README.md、DOCKER_GUIDELINE.md、INSTALL_*.md)是从 RedTeamCUA 复制的。