
LLM अवेद्यता ऑडिटर स्थिर-विश्लेषण साक्ष्य को किस प्रकार स्वीकार करते हैं, इसका अध्ययन करने वाला प्रतिकृति पैकेज, जिसमें tree-sitter C/C++ फ्रंट एंड, नियंत्रित साक्ष्य स्थितियाँ और सांख्यिकीय विश्लेषण कोड शामिल हैं।
ZhiHong Liu द्वारा लिखे गए इसी शीर्षक वाले पेपर के लिए प्रतिकृति पैकेज।
LLM वल्नरेबिलिटी ऑडिटरों को PrimeVul से लिए गए वल्नरेबल और पैच किए गए C/C++ फ़ंक्शनों के बारे में स्टैटिक-एनालिसिस साक्ष्य दिया गया। साक्ष्य या तो सत्य था या गढ़ा हुआ, जबकि कोड और मॉडल स्थिर रहे। झूठे आश्वासन (एक अनुपस्थित जाँच के मौजूद होने का दावा) ने वास्तविक वल्नरेबिलिटी की पहचान को कम किया। झूठे अलार्म (एक जोड़ी गई जाँच के अनुपस्थित होने का दावा) ने सटीकता को कभी कम नहीं किया, और मॉडलों ने उन पर कहीं अधिक बार विवाद किया। सात नए मॉडलों पर एक पंजीकृत प्रतिकृति ने इस असममिति की पुष्टि की। प्रत्येक दावे को एक अलग कॉल में सत्यापित करने और खंडित दावों को दिखाने (verify-show) से एक पंजीकृत परीक्षण में डेफरेंस कम हुआ।
इस रिपॉज़िटरी में विश्लेषक, प्रयोग और विश्लेषण कोड, पंजीकरण, एनोटेशन और सारांश रिपोर्टें शामिल हैं। पूर्ण रन रिकॉर्ड (प्रत्येक साक्ष्य नोट और मॉडल प्रतिक्रिया) और LLM प्रतिक्रिया कैश अलग से संग्रहीत हैं (देखें पूर्ण परिणाम)।
| पथ | सामग्री |
|---|---|
sgv/cfront.py | इंट्राप्रोसीजरल C/C++ फ्रंट एंड (tree-sitter): संवेदनशील ऑपरेशन, प्रभावी गार्ड, प्रमाण दायित्व |
sgv/evidence.py | नियंत्रित अध्ययन: साक्ष्य स्थितियाँ C0–C5, प्रस्तुति रणनीतियाँ, मॉडल कॉन्फ़िगरेशन, रनर |
sgv/vuln.py | ऑडिट प्रॉम्प्ट, वर्डिक्ट पार्सिंग और PrimeVul लोडिंग (प्रारंभिक वल्नरेबिलिटी अध्ययन भी) |
sgv/contrasts.py | प्रति-संस्करण सटीकताएँ और मिलान किए गए कंट्रास्ट (C4 बनाम C2, C5 बनाम C2, …) |
sgv/direction.py | दिशा-जागरूक डेफरेंस माप (H3) |
sgv/deference.py | डेफरेंस और शाब्दिक "विवाद" संकेत |
sgv/mitigation.py | युग्मित McNemar परीक्षणों और Holm सुधार के साथ प्रस्तुति रणनीतियों की तुलना |
sgv/pooled.py | H2 का पोस्ट-हॉक पूल्ड विश्लेषण और डेटासेट वर्णनात्मक आँकड़े |
sgv/annotate.py | व्यवहारिक कोडिंग के लिए एनोटेशन शीट और सहमति (Cohen's kappa) |
sgv/figures.py, sgv/diagrams.py | पेपर के सभी चित्र, रन रिकॉर्ड से गणना किए गए |
sgv/stats.py | Wilson अंतराल, सटीक McNemar परीक्षण, युग्मित बूटस्ट्रैप |
sgv/llm.py | SQLite प्रतिक्रिया कैश के साथ OpenAI-संगत क्लाइंट |
sgv/analysis.py, claims.py, verifier.py, methods.py, run.py, trace.py, labeling.py, … | Python पर प्रारंभिक अध्ययन (CRUXEval, REval): दावा निष्कर्षण और संरचना-आधारित सत्यापन |
preregistration/ | H3 का पंजीकरण और रन से पहले तय किए गए विश्लेषण कोड के हैश |
annotation/ | एनोटेशन गाइड, दोनों LLM एनोटेटरों की शीट, लेखक की 20-आइटम जाँच |
results/*.md | अध्ययन, होल्ड-आउट, डेवलपमेंट, टेस्ट और H3 सेटों की सारांश रिपोर्टें |
tests/ | यूनिट टेस्ट (python -m unittest discover -s tests -t .) |
Python 3.12 या बाद का संस्करण (3.14 के साथ विकसित)।
pip install -r requirements.txt
PrimeVul को यहाँ पुनर्वितरित नहीं किया गया है। युग्मित विभाजनों को PrimeVul रिपॉज़िटरी से डाउनलोड करें और उन्हें इस प्रकार रखें
data/primevul/primevul_train_paired.jsonl
data/primevul/primevul_valid_paired.jsonl
data/primevul/primevul_test_paired.jsonl
जोड़ी चयन फ़ाइल, --pairs, --max-lines और --seed को देखते हुए नियतात्मक (deterministic) है। प्रारंभिक
अध्ययन के लिए डेटा python -m sgv.data --dest data/cruxeval.jsonl और python -m sgv.reval --dest data/reval द्वारा डाउनलोड किया जाता है।
पूर्ण परिणाम निर्देशिका, जिसमें प्रत्येक रन के लिए evidence.jsonl (प्रत्येक शर्त के अंतर्गत दिखाए गए नोट्स) और records.jsonl (प्रत्येक मॉडल प्रतिक्रिया और निर्णय), साथ ही llm_cache.sqlite (सभी API प्रतिक्रियाएँ), Zenodo पर संग्रहीत है। इसे रिपॉज़िटरी रूट में अनज़िप करें ताकि यह results/ बना दे। कैश मौजूद होने पर, नीचे दिया गया प्रत्येक रन बिना किसी API कॉल के कैश से पुनः चलाया जाता है, और प्रत्येक विश्लेषण पेपर के आँकड़ों को पुनः उत्पन्न करता है।
python -m sgv.contrasts results/evidence_full_a # RQ1/RQ2 on the study set
python -m sgv.deference results/evidence_full_a # RQ3: deference and dispute cue
python -m sgv.mitigation results/evidence_full_a results/mitig_quote results/mitig_alarms \
results/mitig_reframe results/mitig_provenance --model flash # RQ4 on the study set
python -m sgv.direction results/h3_* --pooled # H3 (registered)
python -m sgv.pooled # post-hoc pooled H2
python -m sgv.annotate score annotation/sheet_claude.csv annotation/sheet_deepseek.csv
python -m sgv.figures --out figures # data figures
python -m sgv.diagrams --out figures # schematic figures
मॉडलों को OpenAI-संगत API (DeepSeek और Alibaba Cloud Bailian/DashScope) के माध्यम से कॉल किया जाता है। मॉडल नाम, पिन किए गए स्नैपशॉट और अनुरोध सेटिंग्स sgv/evidence.py में MODELS में हैं। API कुंजियाँ environment से पढ़ी जाती हैं (SGV_API_KEY DeepSeek के लिए, SGV_QWEN_KEY DashScope के लिए) या ~/.sgv_deepseek_key / ~/.sgv_qwen_key से। इन्हें कभी भी repository में नहीं लिखा जाता।
# Build and inspect the evidence of every condition without calling a model
python -m sgv.evidence --pairs 0 --dry-run --out results/evidence_dry
# One run: conditions, presentation strategy and models are arguments
python -m sgv.evidence --data data/primevul/primevul_test_paired.jsonl --pairs 0 \
--models flash --conditions C2,C4,C5 --presentation plain --out results/my_run
मुख्य विकल्प: --conditions (C0–C5), --presentation (plain, quote, alarms, reframe, provenance,
verify, verify-show, commit, commit-verify), --heldout (अध्ययन सेट से असंयुक्त जोड़े),
--max-lines, --seed। पेपर के डेटा सेट हैं
| सेट | स्रोत स्प्लिट | चयन |
|---|---|---|
| Study | primevul_test_paired | संरचनात्मक CWE, ≤150 पंक्तियाँ, सभी पात्र जोड़े |
| Held-out | primevul_test_paired | --heldout --max-lines 300 (सभी CWE, अध्ययन सेट से असंयुक्त) |
| Development | primevul_valid_paired | सभी पात्र जोड़े |
| Test (पंजीकृत) | primevul_train_paired | --pairs 300 --seed 7 |
run_h3.ps1 पंजीकृत H3 प्रतिकृति (सात मॉडल, C2/C4/C5, plain प्रस्तुति) चलाता है।
व्यवहारिक कोडिंग का एनोटेशन दो LLM (Claude और deepseek-v4-pro) द्वारा किया गया। लेखक ने 20 आइटम हाथ से जाँचे।
पेपर इसकी रिपोर्ट करता है।
कोड: MIT (LICENSE देखें)। PrimeVul और प्रारंभिक-अध्ययन डेटा सेट अपने स्वयं के लाइसेंस बनाए रखते हैं।
@misc{liu2026trusting,
title = {Trusting the Tool: Asymmetric Deference of {LLM} Vulnerability Auditors to Static-Analysis Evidence},
author = {Liu, ZhiHong},
year = {2026},
note = {Preprint}
}