
Un Harness Aperto e Benchmark per l'AI nelle Operazioni di Cybersecurity.
Benchmark per modelli di ragionamento all'avanguardia come agenti SOC su dati NetFlow grezzi.
socbench esegue benchmark dei modelli di ragionamento all'avanguardia come agenti SOC:
ogni modello esegue un ciclo ad agenti multi-turno limitato su un corpus NetFlow deterministico e pre-indicizzato,
con strumenti di sola lettura limitati al ruolo, un tetto di spesa fisso per indagine e un contratto JSON di risposta finale rigoroso. Quattro ruoli (Analista SOC, Analista di Minacce, Cacciatore di Avversari, Ingegnere di Rilevamento) e tre provider (OpenAI, Anthropic, Google) condividono le stesse unità di valutazione, le stesse lenti di punteggio e la stessa superficie di ablazione, in modo che i numeri principali e i delta tools_off / playbooks_off siano direttamente confrontabili.
Il repository è locale-primo. Un laptop, tre chiavi API e un parquet di esempio impegnato nel repository sono sufficienti per riprodurre un test rapido con un budget inferiore a $10.
Alpha. L'intera pipeline è eseguibile dall'inizio alla fine. Costruzione coperta:
socbench build-index) con indici indirizzabili deterministicamente per contenutoREPRODUCE.mdPuoi eseguire un test completo oggi senza chiavi API utilizzando il provider mock (vedi Avvio rapido passo 3, o notebooks/quickstart.ipynb).
socbench viene distribuito come progetto standard PEP 621 / hatchling. Entrambi i percorsi di installazione funzionano.
uv (consigliato per lo sviluppo)curl -LsSf https://astral.sh/uv/install.sh | sh
git clone https://github.com/DeepTempo/socbench.git
cd socbench
uv venv --python 3.11
source .venv/bin/activate
uv pip install -e ".[dev,providers]"
pip semplicegit clone https://github.com/DeepTempo/socbench.git
cd socbench
python3.11 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev,providers]"
In entrambi i casi, socbench --help dovrebbe ora elencare i sottocomandi disponibili.
config/benchmark_config.yaml include valori predefiniti sicuri: cost_budget_usd: 10 per test rapido, cost_budget_usd: 900 completo, cost_usd_cap_per_rendering: 0.50 fisso. I percorsi al suo interno che puntano a file di configurazione fratelli (schema_path, pricing_path) si risolvono in relazione alla directory dello YAML stesso, quindi rinominare o spostare config/ non richiede modifiche al codice.
socbench build-index \
--config config/benchmark_config.yaml \
--dataset sample
Questo normalizza il parquet rispetto a config/schema.json, ordina globalmente per ts_start con risoluzione di parità deterministica, assegna flow_id stabili, ricava le unità di valutazione pair_timeline / host_egress, calcola i riepiloghi e scrive in indexes/<dataset_hash>/.
Rieseguire il comando sugli stessi dati non produce alcun effetto. Passa --rebuild per forzare una ricostruzione.
socbench tools-smoke \
--dataset-hash <dataset_hash> \
--persona soc_analyst
Questo invoca ogni strumento nella lista consentita del ruolo contro l'indice costruito e stampa un riepilogo, senza chiamate al modello.
# Gratuito, deterministico, nessuna chiave API (provider mock):
socbench run --dataset-hash <dataset_hash> --providers mock --personas all
# Modelli reali (dopo `pip install -e ".[providers]"` + esportazione delle chiavi API):
socbench run --dataset-hash <dataset_hash> --providers all --personas all
La selezione delle unità predefinisce il campionamento stratificato, deterministico in (dataset_hash, sample_seed, mode). Ogni rendering (unità × ruolo × provider) esegue un ciclo ad agenti multi-turno limitato; i risultati vengono salvati in runs/<run_id>/ con summary.json (punteggio + costo + rollup cache), eval_units_summary.jsonl, predictions_raw.jsonl, renderings.jsonl, tool_calls.jsonl e prompts_used/.
socbench run --dataset-hash <dataset_hash> --ablation tools_off --providers mock --personas all
socbench aggregate --dataset-hash <dataset_hash>
# → ablations/<dataset_hash>/<seed>/ablation_summary.json (tools_off → delta principali)
notebooks/quickstart.ipynb esegue l'intero ciclo (sintetizza un dataset di esempio quindi non necessita di dati impegnati) e traccia l'F1 per ruolo. notebooks/results_explorer.ipynb carica qualsiasi runs/<run_id>/ e seziona i risultati per strato, ruolo e provider. Installa con pip install -e ".[notebooks]".
Ogni interfaccia progettata per evolversi è un registro o una chiave YAML:
src/socbench/tools/catalog/<name>.py con una sottoclasse di Tool, registralo in src/socbench/tools/catalog/__init__.py aggiungendo a ALL_TOOLS, quindi aggiungi il suo nome alle liste tools: appropriate del ruolo in config/benchmark_config.yaml. Il tools_manifest_sha si sposta automaticamente. Nome file, nome YAML e voce della matrice sono 1:1 per progettazione.src/socbench/index.py e un Literal corrispondente a EvalUnitType in src/socbench/models.py.Adapter in un nuovo , registralo nella factory in e aggiungi una voce sotto in . I prezzi vanno in . Le importazioni SDK rimangono lazy in modo che la dipendenza sia opzionale.La metodologia completa (unità di valutazione, matrice ruolo × strumento, ciclo agente, punteggio, modello di costo, politica di riparazione, campionamento, ablazioni, artefatti di esecuzione) è implementata nei file a livello di modulo in src/socbench/ (ciascuno include una docstring di modulo mirata).
Apache-2.0. Vedi LICENSE.
| Area | Predefinito | Posizione |
|---|
| Impostazioni predefinite del benchmark (campionamento, budget agenti, provider, matrice ruolo × strumento) | benchmark_config.yaml | config/ |
| Schema NetFlow canonico + alias di normalizzazione | schema.json | config/ |
| Snapshot dei prezzi dei provider (USD per 1 milione di token) | pricing.yaml | config/ |
| Chiavi API dei provider | variabili d'ambiente OPENAI_API_KEY, ANTHROPIC_API_KEY, GOOGLE_API_KEY | shell env |
src/socbench/providers/<nome>_adapter.pybuild_adapterproviders/base.pyproviders:config/benchmark_config.yamlconfig/pricing.yamlagent.personas: in config/benchmark_config.yaml con il suo budget e la lista consentita tools:.score_unit in src/socbench/scoring.py e un campo corrispondente a EvalUnitSummary in models.py.Ablation in prompts.py / agent.py e la lista dei tag in aggregate.py.