
साइबर सुरक्षा संचालन में AI के लिए एक ओपन हार्नेस और बेंचमार्क
फ्रंटियर रीज़निंग LLM को SOC एजेंट के रूप में कच्चे NetFlow डेटा पर बेंचमार्क करें।
socbench फ्रंटियर रीज़निंग मॉडल को SOC एजेंट के रूप में बेंचमार्क करता है: प्रत्येक मॉडल एक निर्धारक, पूर्व-अनुक्रमित NetFlow कॉर्पस के विरुद्ध एक सीमित मल्टी-टर्न एजेंट लूप चलाता है, जिसमें persona-स्कोप्ड रीड-ओनली टूल्स, प्रति जांच निश्चित डॉलर सीमा, और एक सख्त अंतिम-उत्तर JSON अनुबंध होता है। चार personas (SOC Analyst, Threat Analyst, Adversary Hunter, Detection Engineer) और तीन प्रदाता (OpenAI, Anthropic, Google) समान eval इकाइयाँ, स्कोरिंग लेंस, और ablation सतह साझा करते हैं ताकि मुख्य संख्याएँ और tools_off / playbooks_off डेल्टा सीधे तुलनीय हों।
रिपॉजिटरी स्थानीय-प्रथम है। एक लैपटॉप, तीन API कुंजियाँ, और रिपोजिटरी में प्रतिबद्ध एक नमूना parquet $10 बजट के तहत एक स्मोक उत्पन्न करने के लिए पर्याप्त है।
अल्फा। पूरी पाइपलाइन एंड-टू-एंड चलती है। निर्माण कवरेज:
socbench build-index) निर्धारक content-addressed इंडेक्स के साथREPRODUCE.md में पुनरुत्पादन निर्देशआप आज कोई API कुंजी नहीं के साथ मॉक प्रदाता के माध्यम से एक पूर्ण स्मोक चला सकते हैं (क्विकस्टार्ट चरण 3, या notebooks/quickstart.ipynb देखें)।
socbench एक मानक PEP 621 / hatchling परियोजना के रूप में वितरित होता है। कोई भी स्थापना पथ काम करता है।
uv के साथ (विकास के लिए अनुशंसित)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 के साथgit clone https://github.com/DeepTempo/socbench.git
cd socbench
python3.11 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev,providers]"
किसी भी तरह, socbench --help अब उपलब्ध उपकमांडों को सूचीबद्ध करना चाहिए।
config/benchmark_config.yaml सुरक्षित डिफ़ॉल्ट प्रेषित करता है: स्मोक cost_budget_usd: 10, पूर्ण cost_budget_usd: 900, निश्चित cost_usd_cap_per_rendering: 0.50। इसके अंदर के पथ जो सहयोगी कॉन्फ़िग फ़ाइलों (schema_path, pricing_path) पर इंगित करते हैं, YAML की अपनी निर्देशिका के सापेक्ष हल होते हैं, इसलिए config/ का नाम बदलने या स्थानांतरित करने पर कोई कोड संपादन की आवश्यकता नहीं होती।
socbench build-index \
--config config/benchmark_config.yaml \
--dataset sample
यह parquet को config/schema.json के विरुद्ध सामान्यीकृत करता है, निर्धारक टाई-ब्रेकिंग के साथ वैश्विक रूप से ts_start द्वारा सॉर्ट करता है, स्थिर flow_id असाइन करता है, pair_timeline / host_egress eval इकाइयाँ प्राप्त करता है, रोलअप की गणना करता है, और indexes/<dataset_hash>/ पर लिखता है।
उसी डेटा पर कमांड को फिर से चलाना एक no-op है। पुनर्निर्माण को बाध्य करने के लिए --rebuild पास करें।
socbench tools-smoke \
--dataset-hash <dataset_hash> \
--persona soc_analyst
यह persona की अनुमति सूची में प्रत्येक टूल को बनाए गए इंडेक्स के विरुद्ध आमंत्रित करता है और एक सारांश प्रिंट करता है, बिना किसी मॉडल कॉल के।
# मुफ्त, निर्धारक, कोई API कुंजी नहीं (मॉक प्रदाता):
socbench run --dataset-hash <dataset_hash> --providers mock --personas all
# वास्तविक मॉडल (`pip install -e ".[providers]"` + API कुंजियों को निर्यात करने के बाद):
socbench run --dataset-hash <dataset_hash> --providers all --personas all
इकाई चयन डिफ़ॉल्ट रूप से स्तरीकृत नमूनाकरण है, (dataset_hash, sample_seed, mode) में निर्धारक। प्रत्येक (unit × persona × provider) रेंडरिंग एक सीमित मल्टी-टर्न एजेंट लूप चलाता है; परिणाम runs/<run_id>/ के अंतर्गत आते हैं जिसमें summary.json (स्कोरिंग + लागत + कैश रोलअप), eval_units_summary.jsonl, predictions_raw.jsonl, renderings.jsonl, tool_calls.jsonl, और 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 → मुख्य डेल्टा)
notebooks/quickstart.ipynb पूरा लूप चलाता है (यह एक नमूना डेटासेट संश्लेषित करता है ताकि इसे प्रतिबद्ध डेटा की आवश्यकता न हो) और प्रति-persona F1 प्लॉट करता है। notebooks/results_explorer.ipynb किसी भी runs/<run_id>/ को लोड करता है और परिणामों को स्तर, persona, और प्रदाता द्वारा स्लाइस करता है। pip install -e ".[notebooks]" के साथ स्थापित करें।
विकसित होने के लिए डिज़ाइन किया गया प्रत्येक इंटरफ़ेस एक रजिस्ट्री या एक YAML कुंजी है:
src/socbench/tools/catalog/<name>.py के अंतर्गत Tool उपवर्ग के साथ एक नई फ़ाइल ड्रॉप करें, इसे ALL_TOOLS में जोड़कर src/socbench/tools/catalog/__init__.py में पंजीकृत करें, फिर config/benchmark_config.yaml में उपयुक्त persona tools: सूचियों में इसका नाम जोड़ें। tools_manifest_sha स्वचालित रूप से शिफ्ट होता है। फ़ाइल नाम, YAML नाम, और मैट्रिक्स प्रविष्टि डिज़ाइन द्वारा 1:1 हैं।src/socbench/index.py में एक असाइनर और src/socbench/models.py में EvalUnitType के लिए एक मिलान Literal जोड़ें।src/socbench/providers/<name>_adapter.py में ABC लागू करें, इसे में फैक्ट्री में पंजीकृत करें, और में के अंतर्गत एक प्रविष्टि जोड़ें। मूल्य निर्धारण में जाता है। SDK आयात आलसी रहते हैं ताकि निर्भरता वैकल्पिक हो।पूर्ण पद्धति (eval इकाइयाँ, persona x टूल मैट्रिक्स, एजेंट लूप, स्कोरिंग, लागत मॉडल, मरम्मत नीति, नमूनाकरण, ablations, रन आर्टिफैक्ट) src/socbench/ में मॉड्यूल-स्तरीय फ़ाइलों में लागू की गई है (प्रत्येक एक केंद्रित मॉड्यूल डॉकस्ट्रिंग रखता है)।
Apache-2.0. LICENSE देखें।
| Surface | डिफ़ॉल्ट | स्थान |
|---|
| बेंचमार्क डिफ़ॉल्ट (नमूनाकरण, एजेंट बजट, प्रदाता, persona × टूल मैट्रिक्स) | benchmark_config.yaml | config/ |
| विहित NetFlow स्कीमा + सामान्यीकरण उपनाम | schema.json | config/ |
| प्रदाता मूल्य निर्धारण स्नैपशॉट (USD प्रति 1M टोकन) | pricing.yaml | config/ |
| प्रदाता API कुंजियाँ | env vars OPENAI_API_KEY, ANTHROPIC_API_KEY, GOOGLE_API_KEY | शेल env |
Adapterproviders/base.pybuild_adapterconfig/benchmark_config.yamlproviders:config/pricing.yamlconfig/benchmark_config.yaml में agent.personas: के अंतर्गत उसके बजट और tools: अनुमति सूची के साथ एक ब्लॉक जोड़ें।src/socbench/scoring.py में score_unit में एक लेंस और models.py में EvalUnitSummary में एक मिलान फ़ील्ड जोड़ें।prompts.py / agent.py में Ablation हैंडलिंग और aggregate.py में टैग सूची का विस्तार करें।