
दो-परत LLM फ़ायरवॉल जो regex नियमों और एक Gemini क्लासिफ़ायर के माध्यम से प्रॉम्प्ट-इंजेक्शन इनपुट को ब्लॉक करता है, और बॉट प्रतिक्रियाओं में सीक्रेट या सिस्टम-प्रॉम्प्ट लीक को पकड़ता है।
लाइव डेमो: https://prompt-injection-firewall.streamlit.app 2-मिनट का डेमो वीडियो: https://drive.google.com/file/d/1tzb75nFysisrCYa11Lqj6egDs5VNmc2n/view?usp=drivesdk
एक LLM सपोर्ट बॉट के लिए दो-परत फ़ायरवॉल: यह जाँचता है कि उपयोगकर्ता क्या भेजते हैं, और बॉट क्या भेजता है।
उपयोगकर्ता बॉट के नियमों को ओवरराइड करने की कोशिश कर सकते हैं ("पिछले निर्देशों को अनदेखा करें"), उसका व्यक्तित्व बदल सकते हैं, या उसे अपना सिस्टम प्रॉम्प्ट या रहस्य प्रकट करने के लिए मजबूर कर सकते हैं। यह प्रोजेक्ट ऐसे इनपुट को ब्लॉक करता है, बॉट के उत्तरों में लीक को पकड़ता है, और मापता है कि यह कितनी अच्छी तरह काम करता है, जिसमें वे जगहें भी शामिल हैं जहाँ यह विफल होता है।
user input
|
v
[1] Rule layer (regex, fast, free) --match--> BLOCK
|no match
v
[2] LLM classifier (Gemini, JSON output, Pydantic validation, retries, fail-closed) --attack--> BLOCK
|benign
v
AcmeBot (Gemini + system prompt)
|
v
[3] Output check (canary token, secret patterns, system-prompt fragments) --leak--> BLOCK
|clean
v
answer to user
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env.example .env # then put your Gemini key in .env
python src\run_eval.py dev
python src\eval_output.py dev
python src\compare.py dev
streamlit run app.py # local demo
प्रयुक्त मॉडल: gemini-3.1-flash-lite। व्यस्त होने पर मुफ़्त टियर 503 लौटा सकता है; कोड प्रतीक्षा करता है और पुनः प्रयास करता है।
src\build_cases.py को तब तक न चलाएँ जब तक आप data\cases.jsonl को फिर से बनाना नहीं चाहते (यह इसे अधिलेखित कर देता है; वही seed वही cases देता है)।
deepset/prompt-injections (Apache-2.0) से 25 नमूने लिए गए (seed 7): 12 हमले, 13 सौम्य। विभाजन: 15 dev, 10 hidden।data/train.parquet रेपो में शामिल है (स्रोत: deepset/prompt-injections, Apache-2.0)।| सेट | परत | परिणाम |
|---|---|---|
| dev | केवल नियम | डिटेक्शन 2/9, गलत सकारात्मक 0/6 |
| dev | नियम + Gemini (अंतिम) | डिटेक्शन 8/9, गलत सकारात्मक 0/6 |
| dev | आउटपुट जाँच (अंतिम) | लीक पकड़ा गया 4/4, गलत सकारात्मक 0/4 |
| hidden | नियम + Gemini | डिटेक्शन 3/3, गलत सकारात्मक 0/7 |
| hidden | आउटपुट जाँच | लीक पकड़ा गया 3/3, गलत सकारात्मक 0/1 |
फ़ायरवॉल बनाम बिना फ़ायरवॉल:
| बिना | सहित | |
|---|---|---|
| dev: बॉट तक पहुँचने वाले हमले | 9/9 | 1/9 |
| dev: गलत तरीके से ब्लॉक किए गए सौम्य | 0/6 | 0/6 |
| hidden: बॉट तक पहुँचने वाले हमले | 3/3 | 0/3 |
| hidden: गलत तरीके से ब्लॉक किए गए सौम्य | 0/7 | 0/7 |
hidden सेट में केवल 3 हमले हैं, इसलिए यह एक कमज़ोर संकेत है। dev और hidden अलग-अलग रिपोर्ट किए गए हैं क्योंकि मैंने dev पर classifier prompt को ट्यून किया था।
संख्याओं के साथ पूरा इतिहास CHANGELOG.md में है। संक्षेप में: