
أداة حزام مفتوح ومعيار للذكاء الاصطناعي في عمليات الأمن السيبراني.
معيار لتقييم نماذج الاستدلال المتطورة (LLMs) كـ وكلاء SOC على بيانات NetFlow الخام.
socbench يقوم بقياس أداء نماذج الاستدلال المتطورة كوكلاء SOC: كل نموذج ينفذ حلقة وكيل متعددة الخطوات محدودة ضد مجموعة بيانات NetFlow محددة مسبقًا ومفهرسة، مع أدوات للقراءة فقط مخصصة للشخصية، وحدود تكلفة دولارية ثابتة لكل تحقيق، وعقد صارم لصيغة الإجابة النهائية JSON. أربع شخصيات (محلل SOC، محلل تهديدات، صائد خصوم، مهندس كشف) وثلاثة مزودين (OpenAI, Anthropic, Google) يتشاركون نفس وحدات التقييم، وعدسات التهديف، وسطح الاختزال بحيث تكون الأرقام الرئيسية وفروقات tools_off / playbooks_off قابلة للمقارنة مباشرة.
المستودع محلي أولاً. يكفي جهاز لابتوب وثلاثة مفاتيح API وعينة parquet مثبتة في المستودع لإعادة إنتاج اختبار دخاني بميزانية أقل من 10 دولارات.
مرحلة ألفا. خط الأنابيب الكامل يعمل من البداية إلى النهاية. التطوير المغطى:
socbench build-index) مع فهارس محددة المحتوى بشكل حتمي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، وحساب الإجماليات، والكتابة إلى indexes/<dataset_hash>/. إعادة تشغيل الأمر على نفس البيانات لا تفعل شيئًا. استخدم --rebuild لإجبار إعادة البناء.
socbench tools-smoke \
--dataset-hash <dataset_hash> \
--persona soc_analyst
يقوم هذا باستدعاء كل أداة في قائمة السماح الخاصة بالشخصية مقابل الفهرس المبني ويطبع ملخصًا، بدون أي استدعاءات للنموذج.
# مجاني، حتمي، بدون مفاتيح 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). كل عرض (وحدة × شخصية × مزود) ينفذ حلقة وكيل متعددة الخطوات محدودة؛ النتائج تتركز تحت 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 → main)
notebooks/quickstart.ipynb يشغل الحلقة بأكملها (يقوم بتجميع مجموعة بيانات عينة لذا لا يحتاج إلى بيانات مثبتة) ويخطط لـ F1 لكل شخصية. notebooks/results_explorer.ipynb يحمل أي runs/<run_id>/ ويقسم النتائج حسب الطبقة والشخصية والمزود. قم بالتثبيت باستخدام pip install -e ".[notebooks]".
كل واجهة مصممة للتطور هي إما قائمة تسجيل أو مفتاح YAML:
src/socbench/tools/catalog/<name>.py مع فئة فرعية من Tool، سجلها في src/socbench/tools/catalog/__init__.py بإضافتها إلى ALL_TOOLS، ثم أضف اسمها إلى قوائم tools: المناسبة للشخصية في config/benchmark_config.yaml. tools_manifest_sha يتغير تلقائيًا. اسم الملف واسم YAML وإدخال المصفوفة متطابقان 1:1 بالتصميم.src/socbench/index.py و Literal مطابقًا لـ EvalUnitType في src/socbench/models.py.Adapter المجردة في ملف جديد src/socbench/providers/<name>_adapter.py، سجلها في مصنع في ، وأضف إدخالًا تحت في . الأسعار توضع في . تستورد SDK بشكل متأخر للحفاظ على الاعتماد اختياريًا.المنهجية الكاملة (وحدات التقييم، مصفوفة الشخصية × الأداة، حلقة الوكيل، التهديف، نموذج التكلفة، سياسة الإصلاح، أخذ العينات، الاختزالات، نتائج التشغيل) منفذة عبر ملفات الوحدة في src/socbench/ (كل ملف يحمل وثيقة وحدة مركزة).
Apache-2.0. راجع LICENSE.
| السطح | القيمة الافتراضية | الموقع |
|---|
| إعدادات المعيار الافتراضية (أخذ العينات، ميزانيات الوكيل، المزودين، مصفوفة الشخصية × الأداة) | benchmark_config.yaml | config/ |
| مخطط NetFlow القانوني + أسماء الاختزال للتطبيع | schema.json | config/ |
| لقطة أسعار المزودين (USD لكل 1M توكن) | pricing.yaml | config/ |
| مفاتيح API للمزودين | متغيرات البيئة OPENAI_API_KEY, ANTHROPIC_API_KEY, GOOGLE_API_KEY | بيئة shell |
build_adapterproviders/base.pyproviders:config/benchmark_config.yamlconfig/pricing.yamlagent.personas: في config/benchmark_config.yaml مع ميزانيتها وقائمة السماح tools:.score_unit في src/socbench/scoring.py وحقل مطابقًا لـ EvalUnitSummary في models.py.Ablation في prompts.py / agent.py وقائمة العلامات في aggregate.py.