En pocas palabras
Biblioteca abierta de NVIDIA para añadir controles programables a aplicaciones con LLM, usando configuración, flujos Colang y acciones personalizadas.
Qué problema resuelve
Entradas maliciosas, respuestas fuera de tema y comportamientos contrarios a las políticas definidas para una aplicación.
Cuándo utilizarlo
Asistentes empresariales y agentes con restricciones de conversación o herramientas. Ejemplo: mantener un asistente de soporte dentro de su ámbito y filtrar contenido sensible antes de responder.
De la idea a la práctica
Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.
Cómo funciona
Los rails se aplican a entradas, recuperación, diálogo, ejecución y salidas. La configuración y los flujos Colang definen el recorrido; acciones personalizadas pueden consultar servicios de moderación o reglas del negocio.
Ejemplo: un asistente de soporte acotado
Define los temas que puede resolver, qué hacer ante una solicitud fuera de ámbito y en qué situaciones debe derivar a una persona. Añade comprobaciones de datos sensibles antes de entregar la respuesta.
Evalúa solicitudes normales, ambiguas y adversariales. Comprueba tanto rechazos incorrectos como peticiones riesgosas aceptadas, y mide el tiempo adicional de respuesta.
Tipos de rails
| Rail | Cuándo actúa | Ejemplo |
|---|---|---|
| Input | Antes de enviar la petición al modelo | Detectar jailbreak, datos personales o temas vetados |
| Dialog | Durante la conversación | Forzar un flujo: identificar al cliente antes de dar saldos |
| Retrieval | Sobre los fragmentos recuperados en un RAG | Descartar fragmentos irrelevantes o con instrucciones |
| Execution | Al invocar acciones o herramientas | Validar parámetros antes de llamar a una API |
| Output | Antes de devolver la respuesta | Comprobar alucinaciones, tono o fuga de datos |
Estructura de una configuración
config/
├── config.yml # modelo, rails activos e instrucciones
├── prompts.yml # prompts de autocomprobación
└── rails.co # flujos Colang
# config.yml
models:
- type: main
engine: openai
model: gpt-4o-mini
rails:
input:
flows:
- self check input
output:
flows:
- self check output
# rails.co (Colang 1.0)
define user preguntar politica
"¿Qué opinas del gobierno?"
"¿A quién votarías?"
define bot rechazar politica
"Solo puedo ayudarte con tus créditos, pagos y solicitudes."
define flow politica
user preguntar politica
bot rechazar politica
Uso desde Python
from nemoguardrails import RailsConfig, LLMRails
config = RailsConfig.from_path("./config")
rails = LLMRails(config)
respuesta = rails.generate(messages=[{"role": "user", "content": "¿Cuál es mi saldo?"}])
print(respuesta["content"])
También puede ejecutarse como servidor (nemoguardrails server) con una API compatible con chat completions, para colocarlo delante de una aplicación existente.
Coste y latencia
Cada rail basado en un LLM añade al menos una llamada adicional. Combina comprobaciones baratas y deterministas (expresiones regulares, Presidio para datos personales, listas de temas) con rails de modelo solo donde aportan. Mide la latencia añadida por rail y evalúa con conjuntos adversariales.
Criterios de implementación
Versiona políticas y casos de evaluación. Los controles basados en modelos pueden equivocarse; combina sus decisiones con validaciones deterministas y permisos efectivos en las herramientas. Mantén trazas de qué control intervino.
Continúa en las fuentes
Documentación oficial para verificar detalles y explorar más.