LLM Guard - Kit de Herramientas de Seguridad para LLM
LLM Guard (por Protect AI) es un kit de herramientas de seguridad de código abierto para aplicaciones LLM. Proporciona una librería de escáneres de entrada (aplicados al prompt del usuario antes de que llegue al modelo) y escáneres de salida (aplicados a la respuesta del modelo antes de que llegue al usuario) que detectan y mitigan inyección de prompts, jailbreaks, toxicidad, fuga de PII, secretos, temas prohibidos y más. Los escáneres pueden desinfectar contenido, puntuar riesgo y bloquear solicitudes inseguras, lo que lo convierte en una capa de guardrail práctica para aplicaciones LLM de producción.
Installation
| Método | Comando |
|---|
| pip | pip install llm-guard |
| Con ONNX (más rápido) | pip install "llm-guard[onnxruntime]" |
| Servidor API (Docker) | ejecuta la imagen oficial llm-guard-api |
| Primera ejecución | descarga modelos de escáner (transformers) |
| Verificar | python -c "import llm_guard; print('ok')" |
Two Scanning Stages
| Etapa | Aplicado a | Propósito |
|---|
| Escáneres de entrada | El prompt del usuario | Detén entrada maliciosa/insegura antes de que llegue al modelo |
| Escáneres de salida | La respuesta del modelo | Detén salida insegura/que fuga antes de que llegue al usuario |
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")
| Retorno | Significado |
|---|
sanitized | El prompt (posiblemente modificado) |
results | Resultado por escáner aprobado/reprobado |
risk | Puntuaciones de riesgo por escáner (0–1) |
| Escáner | Detecta |
|---|
PromptInjection | Intentos de inyección/jailbreak |
Toxicity | Lenguaje tóxico/abusivo |
Secrets | Claves API, tokens en el prompt |
Anonymize | PII (desinfecta, con posterior deanonimización) |
BanTopics | Temas no permitidos |
BanSubstrings / BanCompetitors | Listas de bloqueo |
Code | Presencia de código / lenguajes específicos |
TokenLimit | Prompts demasiado grandes |
Language | Lenguajes inesperados |
Scanning Output
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)
Output Scanners
| Escáner | Verifica |
|---|
Sensitive | PII/secretos que fugan en la respuesta |
NoRefusal | Detecta rechazos (señal de calidad/guardrail) |
Relevance | La respuesta responde el prompt |
Toxicity | Salida tóxica |
Bias | Contenido sesgado |
MaliciousURLs | Enlaces peligrosos en la salida |
Deanonymize | Restaura PII redactado para visualización confiada |
FactualConsistency | Respuesta consistente con contexto |
PII Anonymize / Deanonymize Flow
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)
# ... llama al modelo con safe_prompt ...
final, _, _ = scan_output([Deanonymize(vault)], safe_prompt, model_response)
El Vault almacena la asignación para que las entidades redactadas puedan ser restauradas en la respuesta final.
Deployment
| Opción | Nota |
|---|
| Librería en proceso | Importa y llama scan_prompt/scan_output |
| Servidor API | llm-guard-api para una puerta de enlace agnóstica de lenguaje |
| ONNX runtime | Inferencia CPU más rápida para modelos de escáner |
| Configuración | Fail-fast, umbrales y estrategias de coincidencia por escáner |
Common Workflows
# Envolvente guardrail alrededor de cualquier llamada 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."
| Aspecto | LLM Guard | NeMo Guardrails | Garak |
|---|
| Rol | Escáneres de entrada/salida (tiempo de ejecución) | Raíles de diálogo programables | Escáner de vulnerabilidad de LLM (prueba) |
| Enfoque | Inyección, PII, toxicidad, secretos | Control de flujo de conversación | Red-teaming/sondeo |
| Cuándo | En la ruta de solicitud | En la ruta de solicitud | Prueba previa al despliegue |
| Mejor para | Guardrails drop-in | Flujos complejos basados en reglas | Encontrar debilidades |
Resources