
حزمة تكرار تدرس كيفية اعتماد مدققي ثغرات LLM على أدلة التحليل الساكن، مع واجهة أمامية لـ C/C++ مبنية على tree-sitter، وظروف أدلة مضبوطة، وشيفرة تحليل إحصائي.
حزمة تكرار للورقة البحثية التي تحمل العنوان نفسه بقلم ZhiHong Liu.
تم تزويد مدققي ثغرات نماذج اللغة الكبيرة بأدلة تحليل ساكن حول دوال C/C++ المصابة والمرقّعة من PrimeVul. كانت الأدلة إما صحيحة أو ملفّقة، بينما بقي الكود والنموذج ثابتين. أدّت التطمينات الكاذبة (الادعاء بوجود فحص مفقود) إلى خفض اكتشاف الثغرات الحقيقية. أما الإنذارات الكاذبة (الادعاء بغياب فحص مضاف) فلم تخفّض الدقة قط، وقد اعترضت النماذج عليها بوتيرة أعلى بكثير. أكّد تكرار مسجّل على سبعة نماذج جديدة هذا التباين غير المتماثل. أدّى التحقق من كل ادعاء في استدعاء منفصل وإظهار الادعاءات المدحوضة (verify-show) إلى تقليل الاحترام في اختبار مسجّل.
يحتوي هذا المستودع على المحلّل، وكود التجربة والتحليل، والتسجيلات، والتعليقات التوضيحية، والتقارير الموجزة. سجلات التشغيل الكاملة (كل ملاحظة دليل واستجابة نموذج) وذاكرة التخزين المؤقت لاستجابات نماذج اللغة الكبيرة مؤرشفة بشكل منفصل (انظر النتائج الكاملة).
| المسار | المحتوى |
|---|---|
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 الدقيق، bootstrap المزدوج |
sgv/llm.py | عميل متوافق مع OpenAI مع ذاكرة تخزين مؤقت للاستجابات SQLite |
sgv/analysis.py، claims.py، verifier.py، methods.py، run.py، trace.py، labeling.py، … | دراسة أولية على Python (CRUXEval، REval): استخراج الادعاءات والتحقق المستند إلى البنية |
preregistration/ | تسجيل H3 وتجزئات كود التحليل المثبّتة قبل التشغيلات |
annotation/ | دليل التعليق التوضيحي، أوراق كلا المعلّقين من نماذج اللغة الكبيرة، فحص المؤلف المكوّن من 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. تُنزَّل بيانات الدراسة الأولية عبر 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 (DeepSeek وAlibaba Cloud Bailian/DashScope). توجد أسماء النماذج، ولقطات الإصدارات المثبّتة، وإعدادات الطلبات في MODELS داخل sgv/evidence.py. تُقرأ مفاتيح API من متغيرات البيئة (SGV_API_KEY لـ DeepSeek، وSGV_QWEN_KEY لـ DashScope) أو من ~/.sgv_deepseek_key / ~/.sgv_qwen_key. ولا تُكتب أبدًا في المستودع.
# 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. مجموعات بيانات الورقة هي
| المجموعة | تقسيم المصدر | الاختيار |
|---|---|---|
| الدراسة | primevul_test_paired | CWEs بنيوية، ≤150 سطرًا، جميع الأزواج المؤهلة |
| المحجوزة | primevul_test_paired | --heldout --max-lines 300 (جميع CWEs، منفصلة عن مجموعة الدراسة) |
| التطوير | primevul_valid_paired | جميع الأزواج المؤهلة |
| الاختبار (المُسجَّل) | primevul_train_paired | --pairs 300 --seed 7 |
يشغّل run_h3.ps1 تكرار H3 المُسجَّل (سبعة نماذج، C2/C4/C5، العرض العادي).
تم ترميز السلوك بواسطة نموذجين لغويين كبيرين (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}
}