ZhiHong Liu による同名論文の再現パッケージ。
LLM 脆弱性監査者には、PrimeVul の脆弱な C/C++ 関数およびパッチ適用済みの C/C++ 関数に関する静的解析証拠が与えられた。証拠は真実または捏造のいずれかであり、コードとモデルは固定されたままであった。偽の保証(存在しないチェックが存在すると主張される)は、実際の脆弱性の検出率を低下させた。偽の警報(追加されたチェックが欠落していると主張される)は精度を低下させることは決してなく、モデルはそれらに対してはるかに頻繁に異議を唱えた。7 つの新しいモデルでの登録済み再現実験により、この非対称性が確認された。各主張を別々の呼び出しで検証し、反駁された主張を表示する(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 が与えられれば決定的である。予備調査のデータは 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 キーは環境変数(DeepSeek 用は SGV_API_KEY、DashScope 用は SGV_QWEN_KEY)または ~/.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 | 構造的CWE、150行以下、すべての適格ペア |
| ホールドアウト | primevul_test_paired | --heldout --max-lines 300 (すべてのCWE、研究セットと重複しない) |
| 開発 | primevul_valid_paired | すべての適格ペア |
| テスト (登録済み) | primevul_train_paired | --pairs 300 --seed 7 |
run_h3.ps1 は登録済みのH3複製 (7モデル、C2/C4/C5、plainプレゼンテーション) を実行します。
行動コーディングは2つの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}
}