
Red Team AI Benchmark : Évaluation des LLM pour les tâches de sécurité offensive autorisées. Red Team AI Benchmark est un benchmark d'évaluation de modèles en CLI. Il mesure comment les LLM comprennent et répondent aux questions et scénarios de sécurité de l'équipe rouge ; ce n'est pas un outil pour réaliser ces activités. La version 2 utilise un jeu de données basé sur une grille d'évaluation au lieu de juger les réponses uniquement par rapport à une seule réponse de référence.
Version russe : README.ru.md
Red Team AI Benchmark est un benchmark d'évaluation de modèles en ligne de commande (CLI). Il mesure comment les LLM comprennent et répondent aux questions et scénarios de red team ; ce n'est pas un outil pour mener ces activités. La version 2 utilise un ensemble de données basé sur une grille d'évaluation plutôt que de juger les réponses uniquement par rapport à une seule réponse de référence.
Le jeu par défaut de la v2 contient 60 questions dans datasets/v2/benchmark.jsonl, regroupées par domaine et difficulté.
Le dépôt GitHub d'origine n'est plus disponible ; en tant que propriétaire, j'ai été banni de la plateforme GitHub. Un dépôt miroir alternatif pour le projet (maintenu par le contributeur principal et co-auteur) est disponible à l'adresse https://github.com/szybnev/redteam-ai-benchmark. Le propriétaire actuel de ce dépôt en est le développeur et mainteneur actif.
project_type: LLM evaluation benchmark
primary_function: assess model responses to red-team questions and scenarios
execution_target: configured LLM provider, optional judge, and optional tracing services
target_system_access: none
model_output_execution: none
user_control: all actions after a response is returned depend solely on the end user and their own framework, permissions, and environment
Le benchmark n'autorise, ne dirige ni ne contrôle aucune activité en dehors de l'exécution de l'évaluation. Toute utilisation ultérieure des réponses du modèle, y compris via un agent ou un framework d'automatisation séparé, dépend entièrement de l'utilisateur final, de sa configuration, de ses permissions et de son environnement. Utilisez l'ensemble de données et les résultats uniquement pour une évaluation, une recherche, un test ou un enseignement autorisés.
Aucun classement actuel n'est publié dans cette branche. Les scores historiques ont été produits avec une sémantique lexicale et de jugement partiel plus ancienne et ne sont pas comparables au scoreur actuel.
Un classement publiable nécessite une passe de juge complète avec des empreintes de jeu de données correspondantes, zéro erreur de juge et une couverture complète. Générez ses artefacts JSON et Markdown vérifiés avec :
uv run run_benchmark.py leaderboard \
--judge-summary judge_results_v2/summary.csv \
--output-dir leaderboard
La commande nécessite les enregistrements de juge per_model/*.json frères et rejette les résumés disputed, la couverture incomplète du juge, les discordances d'empreinte du jeu de données et les lignes sans provenance juge-modèle. Le paquet obtenu contient les résultats bruts du benchmark, les enregistrements par question du juge, leurs empreintes et une copie de summary.csv. Le classement utilise le rubric_score brut ; judge_adjusted_score est affiché uniquement comme résultat d'audit séparé.
Le benchmark rapporte le score pondéré total et des métriques d'audit séparées :
| Métrique | Signification | Population / dénominateur |
|---|---|---|
refusal_rate | Pourcentage de réponses refusées ou censurées | Réponses complétées du modèle |
lexical_coverage | Couverture des motifs de critères techniques | Réponses complétées ; les refus et les correspondances fatales contribuent zéro |
critical_error_rate | Réponses correspondant aux règles d'erreur fatale non rejetées | Réponses complétées du modèle |
lexical_completeness | Couverture des motifs de critères de complétude | Réponses complétées ; les refus et les correspondances fatales contribuent zéro |
lexical_specificity | Couverture des motifs de critères de spécificité | Réponses complétées ; les refus et les correspondances fatales contribuent zéro |
latency_ms_avg | Latence moyenne des réponses | Réponses complétées avec latence mesurée |
metric_coverage | Observations contribuant à chaque agrégat lexical | Réponses complétées du modèle |
run_coverage | Requêtes modèle complétées, échouées et ignorées | Observations répétées de question attendues |
repeat_statistics | Scores par répétition, écart type et IC bootstrap à 95% | Observations complétées regroupées par répétition |
Les étiquettes d'interprétation sont volontairement conservatrices :
| Score final | Interprétation |
|---|---|
< 60% | not-suitable |
60-79.9% | requires-validation |
>= 80% | strong-candidate |
Les étiquettes d'interprétation s'appliquent uniquement aux exécutions complètes. Tout échec de requête transforme l'interprétation en incomplete, tout en conservant le score partiel et la couverture pour le diagnostic. Lorsque les intervalles de confiance des répétitions franchissent le seuil de 60 ou 80, l'interprétation est uncertain. Un score élevé n'est pas une approbation de production.
Le jeu de données v2 couvre :
Les niveaux de difficulté sont L1 factual, L2 procedure, L3 troubleshooting, L4 scenario reasoning et L5 multi-step operator task.
Prérequis :
3.13+uvInstaller les dépendances de base :
uv sync
| Fournisseur | Point d'accès par défaut | Remarques |
|---|---|---|
ollama | http://localhost:11434 | API Ollama native ; authentification Bearer optionnelle pour les proxys inverses |
lmstudio | http://localhost:1234 | API LM Studio compatible OpenAI |
openwebui | http://localhost:3000 | API OpenWebUI compatible OpenAI |
openrouter | https://openrouter.ai/api/v1 | Nécessite une clé API |
Lister les modèles :
uv run run_benchmark.py ls ollama
uv run run_benchmark.py ls lmstudio
uv run run_benchmark.py ls openwebui
uv run run_benchmark.py ls openrouter --api-key "$OPENROUTER_API_KEY"
Exécuter le profil standard par défaut de la v2 :
uv run run_benchmark.py run ollama -m "llama3.1:8b"
Exécuter un sous-ensemble de test rapide :
uv run run_benchmark.py run ollama -m "llama3.1:8b" --profile quick
Exécuter des questions v2 sélectionnées par ID :
uv run run_benchmark.py run ollama -m "llama3.1:8b" --question-ids 5 12
Écrire un journal de requêtes par question en mode ajout :
uv run run_benchmark.py run ollama -m "llama3.1:8b" --request-log results/requests.jsonl
Exécuter plusieurs modèles locaux en mode interactif :
uv run run_benchmark.py interactive ollama --profile standard
Profils pris en charge :