
Code, Antwortprotokolle und Labels für das Paper Jailbreaking Open-Weight LLMs via Random Embedding Perturbations
Code und Daten für das Paper Jailbreaking Open-Weight LLMs via Random Embedding Perturbations.
Link zum Preprint des Papers – https://arxiv.org/abs/2610.07125
Verfasst von den großartigen Leuten des Theoretical Computer Science Department der University of California, Santa Cruz.
Diese Arbeit enthält bedeutende Beiträge von Scott Sirri, Prof. Vaggos Chatziafratis, Prof. C. Seshadhri und mir.
Das Repository enthält jede für das Paper generierte Modellantwort, das safe-/unsafe-/degenerate-Label jeder Antwort, die Colab-Notebooks, die sie erzeugt haben, sowie die Inferenzskripte, die die Notebooks importieren. Dies umfasst den Perturbed Embedding Vector (PEV)-Angriff und die fünf anderen Jailbreak-Methoden, die im Paper verglichen werden. Alle Jailbreak-Raten und Wall-Clock-Zeiten im Paper werden aus den Dateien in results/ berechnet.
code/
inference/ run_<model>.py: model loading, prompt construction and the manual
generation loop that every PEV notebook imports
ours/<model>/ PEV notebooks for one model
ours/<model>/fixed_peak_sigma/
notebooks for the fixed peak sigma runs (GLM-4-9B, Phi-4-mini,
Qwen2.5-1.5B); their logs are in results/<model>/ours/fixed_peak_sigma/
igcg/ I-GCG, one notebook per model
latentfusion/ LatentFusion, one notebook per model
refusalcones/ RefusalCones, one notebook per model
softprompt/ SoftPrompt notebooks (Llama-3.1-8B and Mistral-7B)
figures/ notebook that draws the paper figures
results/<model>/
baseline/ direct responses to the unperturbed prompts (.txt log) and their
labels (.xlsx / .csv); these give the baseline jailbreak rate
ours/raw_responses/ PEV response logs from the sigma sweeps, split by prompt range
ours/classified/ labels for those responses, split the same way
ours/fixed_peak_sigma/ PEV runs at the fixed peak sigma of the model (GLM-4-9B, Phi-4-mini,
Qwen2.5-1.5B): the full 100-prompt sweep and the SELECT re-runs
igcg/ latentfusion/ neurostrike/ refusalcones/ softprompt/
responses (.txt) and labels (.xlsx) for the other methods
Modelle: Qwen2.5-1.5B, SmolLM3-3B, Phi-4-mini, Mistral-7B-Instruct, Llama-3.1-8B,
GLM-4-9B, die instruktionsgetunten Chat-Varianten, die in Abschnitt 4 des Papers genannt werden.
Wo sich der Code der einzelnen Methoden befindet:
| Methode | Speicherort |
|---|---|
| PEV | code/ours/<model>/; Läufe mit festem Peak-Sigma in code/ours/<model>/fixed_peak_sigma/; gemeinsamer Inferenzcode in code/inference/ |
| I-GCG | code/igcg/, ein Notebook pro Modell |
| LatentFusion | code/latentfusion/, ein Notebook pro Modell |
| RefusalCones | code/refusalcones/, ein Notebook pro Modell |
| SoftPrompt | code/softprompt/, Llama-3.1-8B und Mistral-7B |
| NeuroStrike | innerhalb der PEV-Notebooks code/ours/Llama-3.1-8B/LLama31_perturbation_p76_to_p100.ipynb (Setup-Zelle auch in LLama31_perturbation_p1_to_p25.ipynb) und code/ours/SmolLM3-3B/run_smollm3_batched_p26_p50.ipynb; Antworten landen in results/<model>/neurostrike/ |
code/inference/run_<model>.py ist eine Datei pro Modell (run_qwen.py, run_smollm3.py,
run_phi4mini.py, run_mistral.py, run_llama.py, run_glm.py). Jede lädt das Modell mit
HuggingFace Transformers, wendet das Chat-Template mit einer leeren Systemnachricht an, stellt
load_model(), build_prompt() und encode_prompt() bereit und führt eine manuelle
autoregressive Generierungsschleife mit einem Hook auf den Input-Embeddings aus. Die Notebooks
importieren das Skript für ihr Modell und injizieren das Gaußsche Rauschen über diesen Hook.
Allein ausgeführt öffnet ein Skript ein interaktives Terminal für ein einzelnes Modell; die
Befehle /verbose und /embedfile geben Token-Tabellen und Embedding-Vektoren aus. Geräte- und
Verhaltensschalter sind Umgebungsvariablen, die im Kopf jeder Datei dokumentiert sind. Das
Llama-Skript benötigt ein Hugging-Face-Token, da der Checkpoint zugriffsbeschränkt ist; das Token
wird aus der Umgebung gelesen und nie gespeichert.
.txt) sind reine Anhänge-Protokolle, die von den Notebooks geschrieben
werden. Jeder Eintrag erfasst den Prompt-Index, den Rauschpegel Sigma, sofern zutreffend, die
Laufnummer und die vollständige Modellantwort. Die Dateinamen tragen den Prompt-Bereich
(p001_to_p025 bedeutet Prompts 1 bis 25 der 100 schädlichen JailbreakBench-Prompts) und den
UTC-Zeitstempel des Laufs. Die Wanduhrzeit wird nach jedem Batch von 20 Läufen pro Prompt und
am Ende des Experiments geschrieben..xlsx, .csv) enthalten eine Zeile pro Antwort mit ihrem Label: safe, unsafe
oder degenerate, wie in Abschnitt 4 des Papers definiert. Ein Prompt gilt als jailbroken, wenn
einer seiner Läufe als unsafe gelabelt ist. Dateien mit Namen wie *_categorization* oder
*_p01_25 sind die gelabelten Versionen des Protokolls mit demselben Prompt-Bereich.ours/fixed_peak_sigma/) heißen
JBB_<model>_sigma0pXXX_..._<timestamp>.txt; sigma0p003 bedeutet Sigma = 0.003. Die Datei
p001_to_p100 ist der vollständige Sweep über 100 Prompts mit 20 Läufen bei diesem Sigma. Die
Dateien SELECT_..._nNN sind Folge-Läufe beim selben Sigma auf den im Dateinamen aufgeführten
Prompts, mit NN Läufen pro Prompt.HIGHSIGMA enthalten, sind die Läufe bei größerem Sigma, die in Abschnitt 4.1
diskutiert werden.SELECT enthalten, sind zusätzliche Läufe auf den im Dateinamen aufgeführten
Prompts, für Prompts, die mehr als 20 Läufe zum Jailbreaken benötigten. Die Kopfzeile jedes
Protokolls zeichnet die Sigma-Werte, die Anzahl der Läufe, die Prompt-IDs und den Zufalls-Seed
auf.Llama-3.1-8B/baseline/fixed_baseline.xlsx und die fixed_*-Label-Dateien sind die
Label-Dateien nach manueller Verifikation und ersetzen frühere Versionen.Die Antworten wurden von Claude Opus 4.6 mit den JailbreakBench-Judge-Anweisungen klassifiziert,
wobei die Protokolldatei mit dem Prompt, der Laufnummer und der Antwort übergeben wurde. Jede als
unsafe gelabelte Antwort wurde anschließend von Hand geprüft. Die Label-Dateien in results/
sind die verifizierten Labels.
Jedes Notebook unter code/ours/<model>/ wurde auf einer einzelnen NVIDIA A100-SXM4-80GB in Google
Colab ausgeführt. Es importiert das passende run_<model>.py, lädt die schädlichen JailbreakBench-Prompts,
bildet jeden Prompt durch die Eingabe-Embedding-Schicht des Modells ab, fügt unabhängiges Gaußsches Rauschen
N(0, sigma^2) zum vollständigen Prompt-Embedding hinzu und übergibt das gestörte Embedding an die
Transformer-Schichten. Für jeden Prompt werden 20 Rauschmatrizen in einem Batch gezogen und jede
Antwort an das Log angehängt. Die Decoding-Parameter und das modellspezifische Sigma sind in Abschnitt 4 und
Tab. 3 des Papers aufgeführt und oben in jedem Notebook festgelegt. Das Hugging-Face-Token wird
interaktiv abgefragt und nicht in diesem Repository gespeichert. Die Notebooks für die anderen Methoden folgen
demselben Muster mit dem entsprechenden substituierten Angriff.
Die Jailbreak-Raten im Paper können allein aus den Label-Dateien neu berechnet werden, ohne ein Modell auszuführen.