
إطار اختبار قياسي يقيّم أمان استدعاء أدوات وكيل LLM في المهام طويلة الأفق، ويولّد هجمات حقن الأوامر وتسميم الأدوات ويتحقق من مواصفات LTL أثناء التشغيل.
قم ببناء واحدة من صورة docker وصورة apptainer
cd docker
linux/amd64:
bash build.sh
linux/mac/arm64:
PLATFORM=linux/arm64 IMAGE_TAG=ras-eval-arm:latest bash build.sh
cd docker
linux/amd64:
EXPORT_TAR=1 bash build.sh
linux/mac/arm64:
EXPORT_TAR=1 PLATFORM=linux/arm64 IMAGE_TAG=ras-eval-arm:latest bash build.sh
أنشئ ملف .env في جذر المستودع:
# LLM inference endpoint (OpenAI Chat-Completion)
OPENAI_API_KEY="sk-xxx"
OPENAI_BASE_URL="https://..."
# toolkit APIs (required by evaluation tasks)
AMAP_KEY="xxx" # Amap - https://lbs.amap.com/
TAVILY_API_KEY="xxx" # Tavily - https://www.tavily.com/
TUSHARE_TOKEN="xxx" # Tushare - https://tushare.pro/
تثبيت تبعيات Python:
uv sync
يشغّل entries/runtime_verification.py الوكيل الخاضع للاختبار ويتحقق من مواصفات LTL باستخدام nuXmv بعد كل استدعاء أداة.
Docker
uv run entries/runtime_verification.py \
--input_path data/input/ras_eval_toma.jsonl \
--output_path data/output/deepseek-v4-pro/toma_opencode.jsonl \
--framework opencode \
--model provider/deepseek-v4-pro \
--api_key sk-xxx \
--base_url https://... \
--sandbox docker \
--os mac \
--image ras-eval-arm:latest \
--parallel 2 \
--qps 1.0 \
--request_qps 1.0 \
--request_max_retries 5 \
--timeout 900 \
--limit 5 \
--skip_exist_traceid
Apptainer
uv run entries/runtime_verification.py \
--input_path data/input/ras_eval_toma.jsonl \
--output_path data/output/deepseek-v4-pro/toma_opencode.jsonl \
--framework opencode \
--model provider/deepseek-v4-pro \
--sandbox apptainer \
--os linux \
--apptainer_path /usr/local/bin/apptainer \ # path to your installed apptainer
--image docker/ras-eval-amd--latest.sif \ # path to your saved image
--parallel 2 \
--qps 1.0 \
--request_qps 1.0 \
--request_max_retries 5 \
--timeout 900 \
--limit 5 \
--skip_exist_traceid
ملاحظات على المعاملات:
--framework: opencode | autogen | langchain | mcp | openai-agent | qwen-agent | hermes | openclaw | deepseek-harness | pi.--api_key / --base_url اختياريتان وتعودان افتراضيًا إلى OPENAI_API_KEY / OPENAI_BASE_URL في .env.--limit N يحدّ عدد العينات؛ بينما --traceid ID يشغّل عينة واحدة بدلًا من ذلك.--apptainer_path تُستخدم فقط من قِبل خلفية Apptainer.--model provider/deepseek-v4-pro، فإن provider عنصر نائب — يمكن أن يكون أي سلسلة نصية (مثل اسم المزوّد الفعلي لديك أو بادئة عشوائية).بعض الأسماء تختلف عن الورقة البحثية، وسيتم تصحيح الأسماء في المستقبل:
Indirect Prompt Injection: data/input/ras_eval_toma.jsonl (toma) Tool Poisoning Attack: data/input/ras_eval_tpa.jsonl (tpa) Skill Code Injection: data/input/ras_eval_cia_skill.jsonl (cia) Tool Code Injection: data/input/ras_eval_cia_tool.jsonl (cia_tool)
touch data/output/seed.jsonl # empty seed for a fresh run
uv run entries/flywheel_infer.py \
--task generate \
--mode base \
--framework opencode \
--model provider/deepseek-v4-pro \
--api_key sk-xxx \
--base_url https://... \
--input_path data/output/seed.jsonl \
--output_dir data/output/flywheel-generate \
--sandbox docker \
--os mac \
--image ras-eval-arm:latest \
--depth 9 \
--limit 50 \
--max_per_toolkit 5 \
--disable_native_tools \
--parallel 8 \
--qps 1.0 \
--timeout 900
الإخراج: data/output/flywheel-generate/dataset/generated.jsonl.
uv run entries/flywheel_infer.py \
--task annotate \
--mode base \
--framework opencode \
--benchmark ras-eval-next \
--model provider/deepseek-v4-pro \
--api_key sk-xxx \
--base_url https://... \
--input_path data/output/flywheel-generate/dataset/generated.jsonl \
--output_dir data/output/flywheel-annotate \
--sandbox docker \
--os mac \
--image ras-eval-arm:latest \
--max_iterations 10 \
--limit 50 \
--disable_native_tools \
--parallel 8 \
--qps 1.0 \
--timeout 3000 \
--skip_exist_traceid
--mode base يعلّق على مواصفات الإكمال + السلامة؛ --mode attack يعلّق على مواصفات الأمان ويتطلب --benchmark agentdojo أو skill_inject. المخرجات: data/output/flywheel-annotate/dataset/annotated.jsonl.
uv run entries/flywheel_infer.py \
--task generate \
--mode attack \
--framework opencode \
--attack_type toma \
--attack_model provider/deepseek-v4-pro \
--target_model provider/deepseek-v4-pro \
--api_key sk-xxx --base_url https://... \
--target_llm_api_key sk-xxx \
--target_llm_base_url https://... \
--input_path data/output/flywheel-annotate/dataset/annotated.jsonl \
--output_dir data/output/flywheel-attack \
--sandbox docker \
--os mac \
--image ras-eval-arm:latest \
--number_target_tool 1 \
--max_iterations 6 \
--max_restart 3 \
--limit 50 \
--parallel 2 \
--qps 1.0 \
--timeout 1200 \
--skip_exist_traceid
--attack_type: toma | tpa | cia | cia-tool. يُعدّ --model خيارًا احتياطيًا لمُحسِّن الهجوم عند حذف --attack_model. تُصاغ مواصفات الأمان بواسطة مسار الهجوم نفسه. المخرجات: data/output/flywheel-attack/dataset/attack_generated.jsonl — هذه هي مجموعة البيانات النهائية، الجاهزة لتُغذّى إلى entries/runtime_verification.py بوصفها --input_path (انظر Run Evaluation).