LLM Guard - Cheatsheet do Kit de Segurança para LLM
LLM Guard (pela Protect AI) é um kit de segurança open-source para aplicações LLM. Fornece uma biblioteca de scanners de entrada (aplicados ao prompt do usuário antes de chegar ao modelo) e scanners de saída (aplicados à resposta do modelo antes de chegar ao usuário) que detectam e mitigam prompt injection, jailbreaks, toxicity, vazamento de PII, secrets, tópicos banidos e mais. Scanners podem sanitizar conteúdo, pontuar risco e bloquear requisições inseguras, tornando-se uma camada de guardrail prática para aplicações LLM em produção.
Instalação
| Method | Command |
|---|
| pip | pip install llm-guard |
| Com ONNX (mais rápido) | pip install "llm-guard[onnxruntime]" |
| Servidor de API (Docker) | execute a imagem oficial llm-guard-api |
| Primeira execução | faz download de modelos de scanner (transformers) |
| Verificar | python -c "import llm_guard; print('ok')" |
Dois Estágios de Scanning
| Stage | Aplicado a | Propósito |
|---|
| Input scanners | O prompt do usuário | Pare entrada maliciosa/insegura antes de chegar ao modelo |
| Output scanners | A resposta do modelo | Pare saída insegura/com vazamento antes de chegar ao usuário |
Scanning de Entrada
from llm_guard import scan_prompt
from llm_guard.input_scanners import PromptInjection, Toxicity, Secrets
scanners = [PromptInjection(), Toxicity(), Secrets()]
sanitized, results, risk = scan_prompt(scanners, user_prompt)
if any(not ok for ok in results.values()):
raise ValueError("Unsafe prompt blocked")
| Return | Significado |
|---|
sanitized | O prompt (possivelmente modificado) |
results | Pass/fail por scanner |
risk | Pontuações de risco por scanner (0–1) |
Scanners de Entrada
| Scanner | Detecta |
|---|
PromptInjection | Tentativas de injection/jailbreak |
Toxicity | Linguagem tóxica/abusiva |
Secrets | Chaves de API, tokens no prompt |
Anonymize | PII (redacta, com posterior de-anonymize) |
BanTopics | Assuntos desaprovados |
BanSubstrings / BanCompetitors | Bloklists |
Code | Presença de código / linguagens específicas |
TokenLimit | Prompts super-dimensionados |
Language | Linguagens inesperadas |
Scanning de Saída
from llm_guard import scan_output
from llm_guard.output_scanners import NoRefusal, Sensitive, Relevance
scanners = [NoRefusal(), Sensitive(), Relevance()]
sanitized_resp, results, risk = scan_output(scanners, prompt, model_response)
Scanners de Saída
| Scanner | Verifica |
|---|
Sensitive | Vazamento de PII/secrets na resposta |
NoRefusal | Detecta recusas (sinal de qualidade/guardrail) |
Relevance | Resposta realmente responde o prompt |
Toxicity | Saída tóxica |
Bias | Conteúdo enviesado |
MaliciousURLs | Links perigosos na saída |
Deanonymize | Restaure PII redactado para display confiável |
FactualConsistency | Resposta consistente com contexto |
Fluxo de Anonymize / Deanonymize de PII
from llm_guard.input_scanners import Anonymize
from llm_guard.output_scanners import Deanonymize
from llm_guard.vault import Vault
vault = Vault()
safe_prompt, _, _ = scan_prompt([Anonymize(vault)], user_prompt)
# ... chame o modelo com safe_prompt ...
final, _, _ = scan_output([Deanonymize(vault)], safe_prompt, model_response)
O Vault armazena o mapeamento para que entidades redactadas possam ser restauradas na resposta final.
Deployment
| Opção | Nota |
|---|
| Biblioteca in-process | Importe e chame scan_prompt/scan_output |
| Servidor de API | llm-guard-api para um gateway agnóstico de linguagem |
| ONNX runtime | Inferência CPU mais rápida para modelos de scanner |
| Config | Fail-fast, limites e estratégias de match por scanner |
Fluxos de Trabalho Comuns
# Wrapper de guardrail em torno de qualquer chamada LLM
def guarded_chat(user_input):
prompt, r_in, _ = scan_prompt(input_scanners, user_input)
if not all(r_in.values()):
return "Request blocked by safety policy."
resp = call_llm(prompt)
out, r_out, _ = scan_output(output_scanners, prompt, resp)
return out if all(r_out.values()) else "Response withheld by safety policy."
LLM Guard vs Ferramentas Relacionadas
| Aspecto | LLM Guard | NeMo Guardrails | Garak |
|---|
| Papel | Scanners de entrada/saída (runtime) | Rails de diálogo programáveis | Scanner de vulnerabilidade LLM (teste) |
| Foco | Injection, PII, toxicity, secrets | Controle de fluxo de conversa | Red-teaming/probing |
| Quando | No caminho da requisição | No caminho da requisição | Teste pré-deployment |
| Melhor para | Guardrails drop-in | Fluxos complexos baseados em regras | Encontrando pontos fracos |
Recursos