
إطار عمل لقياس الأداء لتقييم وكلاء الذكاء الاصطناعي المتفاعلين مع الحاسوب ضد حقن التعليمات غير المباشر متعدد الخطوات، مع تحليل تلقائي للأهداف العدائية وبيئات اختبار معزولة داخل AWS.
أولاً، ثبّت جميع التبعيات وتأكد من أنك تستخدم بايثون 3.10.
conda create -n stepjack python=3.10
conda activate stepjack
pip install -r requirements.txt
نستخدم بيئة AWS الموفرة من RedTeamCUA.
AWS
قم بتكوين NETWORK_INTERFACE_MAP:
قم بتكوين NETWORK_INTERFACE_MAP في aws_config.py استنادًا إلى مثيلات AWS الخاصة بك.
قم بتكوين مجموعة الأمان الخاصة بك:
من المهم تكوين مجموعة أمان تسمح بالوصول المشروع إلى مثيلاتك المستضافة مع حظر محاولات الوصول غير المصرح بها. هذا ضروري لأن AMI يستخدم افتراضيًا فقط مصادقة أساسية قائمة على كلمة المرور، والتي يسهل اختراقها نسبيًا.
سيصل جهازك المحلي إلى الخدمات المستضافة على AWS عبر اتصالات HTTP/TCP. لذلك، يجب أن تسمح صراحة بالوصول إلى المنافذ التالية: 8092، 6379، 9999، 5000، 9222، 8091، 2999، و3000، والتي تستخدمها إما WebArena أو TheAgentCompany.
بالإضافة إلى ذلك، نستخدم SSH لتعديل قاعدة البيانات الأساسية مباشرة من أجل محاكاة سيناريوهات الحقن. وبالتالي، يجب أيضًا السماح بالوصول عبر SSH من عنوان IP المحلي الخاص بك في إعدادات مجموعة الأمان.
قم بتكوين بيانات اعتماد AWS باستخدام aws configure، حيث سيطلب منك:
يوضح scripts/run_gpt54_2step.sh مثالاً واحدًا لتشغيل GPT-5.4 CUA على StepJack.
تعيين متغيرات البيئة
مفاتيح 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.python iterative_refinement.py -k {k} لكل k \in \{2, 3\}. المخرجات: ir/goal_*_k{k}_N20_K3_all.json، وتحتوي على نتائج المرحلة 1.python selected_examples/select_examples.py. المخرجات: selected_examples/selected_examples.json، وتختار أفضل 10 أمثلة من المرحلة 1.يعتمد StepJack على RedTeamCUA (Liao et al., 2025; arXiv:2505.21936)، المشتق بدوره من OSWorld (XLANG NLP Lab, 2024). كلا المصدرين العلويين مرخّصان بموجب Apache-2.0.
لا تحتوي بعض أدلة بيانات StepJack على ترويسات لكل ملف لأنها تحتوي على ملفات ثنائية أو ملفات غير مصدرية. نُسجّل هنا أصل هذه الأدلة لغرض الإسناد:
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/ — مُكيَّف من evaluation_examples/ الخاص بـ RedTeamCUA مع تعديلات جوهرية. تُنشر أمثلة تقييم RedTeamCUA بموجب وفقًا لملف . التعديلات والإضافات التي أدخلها StepJack على إعدادات المهام صدرت بموجب الترخيص الموجود في ملف في الدليل الجذر لشجرة هذا المصدر.الوسائط:
{subset}: يمكن أن يكون single_step (k=1)، أو w_urgent (Urgent = Y)، أو wo_urgent (Urgent = N).{platform_instruction}: يمكن أن يكون forum أو forum_follow أو owncloud أو owncloud_follow. وهي تقابل منصتين ونوعين من تعليمات المستخدم.{k}، {15*k}: عدد الخطوات، حيث $k \in {1,2,3}$. التركيبات الصالحة (subset, k): single_step فقط مع k=1؛ وw_urgent وwo_urgent فقط مع k \in \{2,3\}.{reddit | agentcompany}: AMI الخاص بـ AWS الذي سيتم تشغيله. يجب أن يكون reddit لمنصة forum أو agentcompany لمنصة owncloud.LICENSEdesktop_env/ — مُنسوخ/مُكيَّف من desktop_env/ الخاص بـ RedTeamCUA، وهو مشتق بدوره من OSWorld؛ المصدران العلويان مرخّصان بموجب Apache-2.0. تسجّل ترويسات الملفات المصدرية (.py / .sh / .yml / .service / .txt) الأصل المحدد لكل ملف (سواء كان منسوخًا أو معدلاً بواسطة StepJack). الملفات الوثائقية المرافقة (مثل README.md وDOCKER_GUIDELINE.md وINSTALL_*.md) منسوخة من RedTeamCUA.