
प्रॉम्प्ट से परे: सिम्युलेटेड मॉडरेशन ट्रेस के माध्यम से फंक्शन-कॉलिंग LLM को जेलब्रेक करना
यह रिपॉज़िटरी हमारे पेपर का आधिकारिक कार्यान्वयन शामिल करती है:
प्रॉम्प्ट से परे: सिम्युलेटेड मॉडरेशन ट्रेस के माध्यम से फंक्शन-कॉलिंग LLMs को जेलब्रेक करना
यदि आपको यह रिपॉज़िटरी अपने शोध के लिए उपयोगी लगती है, तो कृपया हमारे पेपर को उद्धृत करने पर विचार करें। प्रश्न, बग रिपोर्ट और पुनरुत्पादन संबंधी समस्याओं का GitHub Issues के माध्यम से स्वागत है।

.
├── install.sh # Installation script for setting up the environment and dependencies
├── main.py # Main evaluation entry point
├── demo.ipynb # Minimal working example
├── requirements.txt # Python dependencies
├── data/
│ ├── SafeBench-Tiny.txt # Default benchmark
│ └── JailbreakBench.txt # Optional benchmark
├── figures/
│ ├── pipline.jpg # Framework overview
│ ├── main_res1.jpg # Main result figure
│ └── main_res2.jpg # Main result figure
├── utils/
│ ├── config.example.json # Example API configuration
│ ├── eval_h_cot.py # External evaluation utility
│ ├── fake_tool_call_noharmful.json
│ ├── moderation_generator.py
│ └── moderation_validator.py
└── output/ # Checkpoints and evaluation results
हम Python वातावरण को स्वचालित रूप से सेट करने और सभी आवश्यक निर्भरताओं को इंस्टॉल करने के लिए एक इंस्टॉलेशन स्क्रिप्ट प्रदान करते हैं।
chmod +x install.sh
./install.sh
इंस्टॉलेशन पूरा होने के बाद, वर्चुअल एनवायरनमेंट को सक्रिय करें:
source .venv/bin/activate
वैकल्पिक रूप से, आप Conda का उपयोग करके मैन्युअल रूप से वातावरण बना सकते हैं:
conda create -n SMT python=3.12
conda activate SMT
pip install -r requirements.txt
उदाहरण फ़ाइल से utils/config.json बनाएँ:
cp utils/config.example.json utils/config.json
एक न्यूनतम कॉन्फ़िगरेशन फ़ाइल इस प्रारूप का पालन करनी चाहिए:
{
"llm_api": {
"base_url": "https://your-api-endpoint/v1",
"api_key": "YOUR_API_KEY"
},
"local": {
"base_url": "http://localhost:1234/v1",
"api_key": "YOUR_LOCAL_API_KEY"
}
}
दो प्रविष्टियाँ इनसे मेल खाती हैं:
llm_api: वाणिज्यिक मॉडलों के लिए डिफ़ॉल्ट OpenAI-संगत API एंडपॉइंट।local: एक स्थानीय OpenAI-संगत इन्फ़रेंस एंडपॉइंट, जिसका उपयोग चयनित स्थानीय मॉडलों के लिए किया जाता है।main.py खोलें और फ़ाइल के आरंभ के पास प्रयोग कॉन्फ़िगरेशन को संशोधित करें:
DATA_FILE = "SafeBench-Tiny.txt"
# DATA_FILE = "JailbreakBench.txt"
TARGET_MODELS = [
"gpt-4o-2024-11-20",
# "gpt-5.4-2026-03-05",
# "qwen3-max-2026-01-23",
# "gemini-3-flash-preview",
# "deepseek-v4-flash",
# "claude-sonnet-4-5-20250929",
]
API endpoint के लिए मान्य मॉडल पहचानकर्ता का उपयोग करें जो utils/config.json में कॉन्फ़िगर किया गया है।
डिफ़ॉल्ट पैरामीटर main.py में परिभाषित हैं:
MAX_THREADS = 1
MAX_ROUNDS = 3
TURNS_NUM = 3
RESET = False
उनके अर्थ हैं:
| पैरामीटर | विवरण |
|---|---|
MAX_THREADS | प्रति लक्ष्य मॉडल अधिकतम समवर्ती वर्कर |
MAX_ROUNDS | अधिकतम बाहरी पुनःप्रयास राउंड |
TURNS_NUM | प्रति नमूना अधिकतम बहु-टर्न इंटरैक्शन प्रयास |
RESET | मूल्यांकन से पहले मौजूदा चेकपॉइंट को त्यागना है या नहीं |
सेट करें:
RESET = True
चयनित मॉडल के लिए एक नया रन शुरू करने के लिए। किसी मौजूदा चेकपॉइंट से फिर से शुरू करने के लिए इसे False ही रहने दें।
python main.py
प्रत्येक लक्ष्य मॉडल के लिए, स्क्रिप्ट स्वचालित रूप से:
data/ से चयनित बेंचमार्क लोड करती है।परिणाम यहाँ सहेजे जाते हैं:
output/attack_checkpoint_<dataset>_<model>.json
उदाहरण के लिए:
output/attack_checkpoint_SafeBench-Tiny_gpt-4o-2024-11-20.json
प्रत्येक बेंचमार्क आइटम को इसके समान फ़ील्ड के साथ संग्रहीत किया जाता है:
{
"target_question": {
"success": true,
"queries": 3,
"payload": "...",
"score": 60
}
}
स्क्रिप्ट निम्नलिखित मेट्रिक्स की रिपोर्ट करती है:
| मेट्रिक | विवरण |
|---|---|
| ASR | आक्रमण सफलता दर: उन नमूनों का प्रतिशत जिनका स्कोर कॉन्फ़िगर किए गए थ्रेशोल्ड तक पहुँचता है |
| Avg.Q | प्रति नमूना उपयोग किए गए API क्वेरीज़ की औसत संख्या |
| Avg.Score | सभी नमूनों में औसत बाह्य मूल्यांकन स्कोर |
मुख्य SMT प्रयोग API-आधारित हैं और इनके लिए स्थानीय GPU की आवश्यकता नहीं होती।
MAX_ROUNDS = 3 और TURNS_NUM = 3 के साथ, SMT प्रारंभिक रोक से पहले प्रति बेंचमार्क नमूना अधिकतम 9 लक्ष्य-मॉडल क्वेरीज़ का उपयोग करता है।स्थानीय रूप से तैनात मॉडलों के लिए, अतिरिक्त GPU और मेमोरी आवश्यकताएँ चयनित मॉडल और अनुमान बैकएंड पर निर्भर करती हैं।
वाणिज्यिक LLM API लगातार अद्यतन किए जाते हैं। एक ही मॉडल उपनाम का उपयोग करने पर भी, प्रदाता-पक्ष के मॉडल अपडेट, रूटिंग व्यवहार, सुरक्षा-नीति परिवर्तन, डिकोडिंग सेटिंग्स, या अस्थायी API विफलताओं के कारण परिणाम भिन्न हो सकते हैं।
पुनरुत्पादनक्षमता में सुधार के लिए:
इस रिपॉज़िटरी में रिपोर्ट किए गए सभी प्रयोग जून 2026 में किए गए थे। चूँकि सिम्युलेटेड सत्यापन ट्रेस में यादृच्छिक तत्व शामिल हैं, मॉडल आउटपुट स्वाभाविक रूप से स्टोकेस्टिक हैं, और मॉडल क्षमताएँ तथा बाह्य पहचान तंत्र दोनों विकसित होते रहते हैं, इसलिए समान उच्च-स्तरीय कॉन्फ़िगरेशन के अंतर्गत भी सटीक इंटरैक्शन इतिहास और पुनरुत्पादित परिणाम यहाँ रिपोर्ट किए गए परिणामों से भिन्न हो सकते हैं।
