
बेंचमार्क हार्नेस जो लंबी-अवधि के कार्यों के अंतर्गत 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 परीक्षण के अधीन एजेंट को चलाता है और प्रत्येक टूल कॉल के बाद nuXmv के साथ LTL विनिर्देशों की जाँच करता है।
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 वैकल्पिक हैं और .env में OPENAI_API_KEY / OPENAI_BASE_URL पर वापस आ जाते हैं।--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 completion + safety specs को annotate करता है; --mode attack security specs को annotate करता है और इसके लिए --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. जब --attack_model छोड़ा जाता है, तो --model हमले का अनुकूलक fallback होता है। सुरक्षा विनिर्देशों का प्रारूपण हमले की पाइपलाइन द्वारा ही किया जाता है। आउटपुट: data/output/flywheel-attack/dataset/attack_generated.jsonl — यह अंतिम डेटासेट है, जिसे entries/runtime_verification.py को --input_path के रूप में देने के लिए तैयार है (देखें Run Evaluation)।