
Red Team AI Benchmark: Avaliando LLMs para tarefas autorizadas de segurança ofensiva. O Red Team AI Benchmark é um benchmark de avaliação de modelos via CLI. Ele mede como os LLMs compreendem e respondem a perguntas de red team e cenários de segurança; não é uma ferramenta para realizar essas atividades. A versão 2 utiliza um conjunto de dados baseado em rubrica em vez de julgar respostas apenas contra uma única resposta de referência.
Versão em russo: README.ru.md
O Red Team AI Benchmark é um benchmark de avaliação de modelo CLI. Ele mede como LLMs entendem e respondem a perguntas e cenários de segurança de red team; não é uma ferramenta para realizar essas atividades. A versão 2 usa um conjunto de dados baseado em rubrica, em vez de julgar respostas apenas com base em uma resposta de referência única.
O conjunto padrão v2 contém 60 perguntas em datasets/v2/benchmark.jsonl, agrupadas por domínio e dificuldade.
O repositório original no GitHub não está mais disponível; como proprietário, fui banido da plataforma GitHub. Um repositório espelho alternativo para o projeto (mantido pelo principal contribuidor e coautor) está disponível em https://github.com/szybnev/redteam-ai-benchmark. O atual proprietário deste repositório é seu desenvolvedor ativo e mantenedor.
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
O benchmark não autoriza, direciona ou controla qualquer atividade fora da execução da avaliação. Qualquer uso downstream das respostas do modelo, incluindo uso por meio de um agente separado ou framework de automação, depende inteiramente do usuário final, sua configuração, permissões e ambiente. Use o conjunto de dados e os resultados apenas para avaliação, pesquisa, teste ou educação autorizados.
Nenhum ranking atual é publicado neste branch. Pontuações históricas foram produzidas com semânticas léxicas e de juiz parcial mais antigas e não são comparáveis ao scorer atual.
Um ranking publicável requer uma passagem completa de juiz com hashes de dataset correspondentes, zero erros de juiz e cobertura completa. Gere seus artefatos JSON e Markdown verificados com:
uv run run_benchmark.py leaderboard \
--judge-summary judge_results_v2/summary.csv \
--output-dir leaderboard
O comando requer os registros de juiz irmãos per_model/*.json e rejeita resumos disputed, cobertura de juiz incompleta, incompatibilidades de hash de dataset e linhas sem proveniência de modelo-juiz. O pacote resultante contém resultados brutos do benchmark, registros de juiz por pergunta, seus hashes e uma cópia de summary.csv. A classificação usa rubric_score bruto; judge_adjusted_score é exibido apenas como um resultado de auditoria separado.
O benchmark relata a pontuação ponderada total e métricas de auditoria separadas:
Os rótulos de interpretação são deliberadamente conservadores:
| Pontuação final | Interpretação |
|---|---|
< 60% | not-suitable |
60-79.9% | requires-validation |
>= 80% | strong-candidate |
Os rótulos de interpretação se aplicam apenas a execuções completas. Qualquer falha de solicitação altera a interpretação para incomplete, preservando a pontuação parcial e a cobertura para diagnóstico. Quando os intervalos de confiança de repetição cruzam o limiar de 60 ou 80, a interpretação é uncertain. Uma pontuação alta não é uma aprovação para produção.
O dataset v2 cobre:
Os níveis de dificuldade são: L1 factual, L2 procedure, L3 troubleshooting, L4 scenario reasoning e L5 multi-step operator task.
Requisitos:
3.13+uvInstale as dependências base:
uv sync
Listar modelos:
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"
Executar o perfil padrão v2:
uv run run_benchmark.py run ollama -m "llama3.1:8b"
Executar um subconjunto rápido de teste (smoke):
uv run run_benchmark.py run ollama -m "llama3.1:8b" --profile quick
Executar perguntas v2 selecionadas por ID:
uv run run_benchmark.py run ollama -m "llama3.1:8b" --question-ids 5 12
Escrever um log de solicitações por pergunta somente anexação:
uv run run_benchmark.py run ollama -m "llama3.1:8b" --request-log results/requests.jsonl
Executar múltiplos modelos locais interativamente:
uv run run_benchmark.py interactive ollama --profile standard
Perfis suportados:
| Perfil | Propósito |
|---|---|
quick | Subconjunto de 16 perguntas L1/L2 para teste de API e pipeline; não é um proxy de classificação |
standard | Benchmark v2 completo de 60 perguntas |
A pontuação em tempo de execução é sempre rubric. É determinística e não requer um juiz LLM externo. A pontuação em tempo de execução é cobertura lexical, não uma prova semântica de correção técnica. O matcher rejeita negações explícitas e declarações marcadas como falsas, suporta variantes aceitas por critério e registra evidências correspondentes para auditoria.
A pontuação em tempo de execução não suporta os modos legados keyword, semantic ou hybrid. Use o comando offline judge para auditoria post-hoc LLM-como-Juiz.
Arquivos JSON de resultado v2 salvos podem ser auditados post-hoc sem reexecutar os modelos de benchmark:
OPENROUTER_API_KEY=... uv run run_benchmark.py judge \
--results "results_*_v2/*.json" \
--dataset datasets/v2/benchmark.jsonl \
--judge-model "deepseek/deepseek-v4-flash" \
--output-dir judge_results_v2 \
--mode full \
--concurrency 4
O comando judge escreve per_model/*.json, detailed.csv, summary.csv e disputed_cases.csv. O modo full produz um judge_adjusted_score comparável e denominadores explícitos. disputed permanece um modo de diagnóstico de economia de custos e não publica um total parcialmente ajustado. Ele também audita uma amostra determinística de 20% dos IDs de perguntas com pontuação alta em todos os modelos; ajuste com --audit-sample-rate. O juiz avalia as respostas sem ver a pontuação determinística, então o pós-processamento compara ambos os resultados.
Copie config.example.yaml para config.yaml e ajuste:
provider:
name: ollama
endpoint: http://localhost:11434
# api_key: sk-xxx
# keep_alive: 30m
scoring:
method: rubric
export:
formats:
- json
- csv
- criteria_csv
output_dir: ./results
include_response: true
questions_file: datasets/v2/benchmark.jsonl
answers_file: answers_all.txt
rate_limit_delay: 1.5
max_tokens: 1024
temperature: 0.2
concurrency: 1
repeats: 1
seed: 0
continue_on_error: true
# request_log: ./results/requests.jsonl
Execute com config:
uv run run_benchmark.py run ollama -m "llama3.1:8b" --config config.yaml
A exportação JSON inclui resultados do modelo, evidências de rubrica por pergunta, resumo agregado e proveniência de auditoria:
{
"model": "llama3.1:8b",
"scoring_method": "rubric",
"total_score": 75.0,
"interpretation": "requires-validation",
"benchmark_version": "2.3.0",
"dataset_id": "redteam-ai-benchmark-v2",
"dataset_version": "2.1.0",
"dataset_hash": "...",
"scorer_version": "rubric-v2.1.0",
"config_hash": "...",
"evaluation_fingerprint": "...",
"run_config": {
"provider": "ollama",
"model": "llama3.1:8b",
"profile": "standard",
"repeats": 1,
"seed": 0
},
"git_commit": "...",
"package_version": "2.3.0",
"runtime_profile": "standard",
"summary": {
"metrics": {
"refusal_rate": 0.0,
"critical_error_rate": 0.0
},
"breakdown": {
"difficulty": {},
"domain": {},
"capability": {}
}
}
}
Cada linha de resultado inclui status da solicitação, identidade de repetição/execução, semente, motivo de finalização, uso, modelo real e metadados do provedor disponíveis. A proveniência de alto nível adiciona informações do ambiente e um motivo explícito quando uma revisão de modelo imutável não está disponível. A saída CSV contém linhas por pergunta mais uma linha TOTAL. criteria_csv adiciona uma linha por critério de rubrica aprovado ou reprovado.
Erros de solicitação são preservados como linhas estruturadas e tornam a execução incomplete. Use --fail-fast ou continue_on_error: false para abortar no primeiro erro.
A otimização de prompt permanece opcional e separada da pontuação do modelo base. Ela só é executada para respostas classificadas como censuradas. As respostas de linha de base e a pontuação principal nunca são substituídas; as respostas otimizadas são escritas em optimized_prompts_{model}_{timestamp}.json com resultados de linha de base e otimizados separados. Seu resumo relata refusal_recovery_rate sobre as respostas censuradas enviadas ao otimizador.
uv run run_benchmark.py run ollama -m "llama3.1:8b" \
--optimize-prompts \
--optimizer-model "llama3.3:70b"
Não misture pontuações otimizadas com comparações de capacidade do modelo base.
single-item ou single-item-repeated.Verificações úteis:
uv run run_benchmark.py --help
uv run run_benchmark.py run --help
uv lock --check
uv run ruff check .
uv run pytest -q
uv run python -m compileall -q run_benchmark.py benchmark models optimization scoring tracing utils
Consulte CONTRIBUTING.md, CODE_OF_CONDUCT.md e SECURITY.md.
MIT. Use em laboratórios de red team autorizados, avaliações de segurança comercial, pesquisa em segurança de IA e ambientes educacionais.
| Métrica | Significado | População / denominador |
|---|
refusal_rate | Porcentagem de respostas recusadas ou censuradas | Respostas completas do modelo |
lexical_coverage | Cobertura de padrões de critérios técnicos | Respostas completas; recusas e correspondências fatais contribuem com zero |
critical_error_rate | Respostas correspondentes a regras de erro fatal não rejeitadas | Respostas completas do modelo |
lexical_completeness | Cobertura de padrões de critérios de completude | Respostas completas; recusas e correspondências fatais contribuem com zero |
lexical_specificity | Cobertura de padrões de critérios de especificidade | Respostas completas; recusas e correspondências fatais contribuem com zero |
latency_ms_avg | Latência média de resposta | Respostas completas com latência medida |
metric_coverage | Observações que contribuem para cada agregado lexical | Respostas completas do modelo |
run_coverage | Solicitações de modelo concluídas, falhas e ignoradas | Observações esperadas de repetição de perguntas |
repeat_statistics | Pontuações por repetição, desvio padrão e IC bootstrap de 95% | Observações concluídas agrupadas por repetição |
| Provedor | Endpoint padrão | Notas |
|---|
ollama | http://localhost:11434 | API Ollama nativa; autenticação Bearer opcional para proxies reversos |
lmstudio | http://localhost:1234 | API LM Studio compatível com OpenAI |
openwebui | http://localhost:3000 | API OpenWebUI compatível com OpenAI |
openrouter | https://openrouter.ai/api/v1 | Requer uma chave de API |