NeMo Guardrails : Guide Complet d’Installation, Configuration et Sécurisation des LLM

NeMo Guardrails sécurise les LLM via des rails programmables définis en Colang.

  • Installation pip simple : pip install nemoguardrails
  • Version 0.23.0 disponible sur PyPI, avec support Python 3.10-3.13
  • Langage Colang pour définir les flux conversationnels par fichiers.colang
  • CLI intégré avec endpoint HTTP /v1/chat/completions pour tests rapides
  • Classe LLMRails charge config.yml et initie les guardrails en 2 étapes
  • Télémétrie native avec heartbeat régulier pour visibilité en production

Installation et configuration de NeMo Guardrails

L’installation de NeMo Guardrails est simple et s’effectue via le gestionnaire de paquets pip. La version stable actuelle est la 0.23.0, disponible sur le dépôt officiel PyPI. Avant de lancer l’installation, assurez-vous que votre environnement dispose de Python 3.10, 3.11, 3.12 ou 3.13 : ces versions sont les seules prises en charge par la bibliothèque.

  • Installation via pip Exécutez pip install nemoguardrails pour installer la bibliothèque et ses dépendances de base.
  • Intégration LangChain optionnelle Activez explicitement le support de LangChain en définissant la variable d’environnement NEMOGUARDRAILS_LLM_FRAMEWORK.
  • Déploiement flexible Utilisez la bibliothèque Python directement dans votre code, ou déployez-la comme microservice containerisé via Docker.
  • Documentation NVIDIA La documentation officielle couvre les scénarios avancés, la configuration des rails et les exemples d’utilisation.

Une fois l’installation terminée, vous pouvez configurer NeMo Guardrails soit par un fichier de configuration YAML, soit par des appels programmatiques dans votre code. La configuration repose sur le langage Colang pour définir les flux conversationnels, un aspect que nous explorerons en détail dans les sections suivantes.

Pour tester votre installation en quelques minutes, le package inclut un CLI intégré qui permet de lancer un serveur guardrails local avec un endpoint HTTP compatible /v1/chat/completions, comparable à un serveur d’inférence. Cette approche vous permet de valider rapidement votre configuration avant de l’intégrer dans vos applications de production.

Guide d’utilisation : démarrage rapide avec l’API Python

guardrails llm avec nemo

L’intégration de NeMo Guardrails dans une application Python se fait en 2 étapes, une approche volontairement simple qui rappelle l’utilisation directe d’un LLM. Plutôt que de réinventer votre logique métier, vous encapsulez vos appels existants avec une couche de sécurité programmables. Les versions Python 3.10, 3.11, 3.12 ou 3.13 sont supportées, ce qui couvre la grande majorité des environnements de développement actuels.

Cette simplicité d’utilisation ne sacrifie en rien la puissance : le framework gère nativement la télémétrie, avec un événement d’usage à l’instanciation et un heartbeat régulier. Vous gardez ainsi une visibilité totale sur le comportement de vos garde-fous en production, sans configuration supplémentaire.

Étape 1 : Charger la configuration et initialiser les guardrails

La première étape consiste à créer une instance de la classe LLMRails, qui servira d’interface principale avec l’ensemble du système. Cette initialisation charge automatiquement votre fichier de configuration config.yml ainsi que les flux de dialogue définis en Colang dans vos fichiers .colang.

  • Chargement config via l’instanciation de LLMRails
  • Configuration rails centralisée dans config.yml pour toutes les directives
  • Flux Colang chargés au démarrage, définissant les comportements conversationnels

Cette approche déclarative vous permet de séparer clairement la logique de sécurité de votre code applicatif, une démarche comparable à la protection des systèmes autonomes. L’initialisation détecte également le framework LLM utilisé et s’y adapte automatiquement, y compris pour l’intégration optionnelle avec LangChain.

Étape 2 : Appeler les guardrails et interpréter les réponses

Une fois la configuration chargée, l’utilisation est directe : vous appelez la méthode principale de LLMRails avec votre prompt exactement comme vous le feriez avec un LLM. La réponse retournée est un objet structuré qui contient à la fois le texte généré et des métadonnées sur les rails activés pendant le traitement.

L’interprétation de la réponse est cruciale : elle vous permet de savoir si un rail d’entrée a bloqué le prompt, si un rail de sortie a reformulé la réponse, ou si le flux a été routé vers un gestionnaire d’événements spécifique défini dans Colang. Cette transparence vous donne un contrôle fin pour affiner vos politiques de sécurité en continu.

Pour un déploiement en service, un CLI intégré démarre un serveur HTTP compatible avec les endpoints /v1/chat/completions, à l’image des outils DevOps. Cette option transforme vos garde-fous en microservice containerisé, capable de gérer jusqu’à 350 RPS sur un seul processeur virtuel selon les tests de TrueFoundry, idéal pour les architectures à forte charge, une gestion du trafic Kubernetes.

Qu’est-ce que NeMo Guardrails ? Architecture et fonctionnement

NeMo Guardrails est un toolkit open-source de NVIDIA, distribué sous licence Apache 2.0. Introduit lors de la conférence EMNLP 2023, il agit comme une couche programmable entre votre code applicatif et le modèle de langage. Avec 3 777 commits sur GitHub et une version stable en 0.23.0, l’outil est activement maintenu par la communauté.

Son architecture repose sur un moteur de rails qui intercepte chaque appel au LLM. Plutôt qu’une validation statique, il orchestre des flux conversationnels définis en Colang, un langage dédié. Cette approche permet de contrôler finement le dialogue : le toolkit peut rejeter une entrée, reformuler une sortie, ou déclencher une action avant d’interroger le modèle.

Concrètement, NeMo Guardrails ne remplace pas le LLM : il l’encadre. Il s’appuie sur des modèles de sécurité NVIDIA complémentaires et offre une compatibilité native avec les fournisseurs majeurs comme OpenAI GPT-3.5, GPT-4, LLaMa-2, Falcon et Vicuna. Cette flexibilité en fait un standard de facto pour sécuriser les applications basées sur grands modèles de langage.

Les différents types de rails : entrée, sortie, dialogue, récupération, exécution

Le système de garde-fous de NeMo Guardrails repose sur 5 types de garde-fous distincts, chacun intervenant à un moment précis du cycle de vie d’une requête. Cette segmentation permet de contrôler finement chaque étape, de la réception du prompt jusqu’à la diffusion de la réponse finale. Le tableau ci-dessous synthétise leur rôle et leurs applications concrètes.

Type de rail Rôle principal Exemple d’application
Rails d’entrée Inspectent et filtrent la requête utilisateur avant tout traitement Rejeter un prompt contenant des instructions malveillantes ou des requêtes hors sujet
Rails de récupération Contrôlent les documents ou données extraits avant leur envoi au LLM Filtrer un contexte Retrieval-Augmented Generation pour éviter les fuites d’informations sensibles
Rails de dialogue Définissent les flux conversationnels et guident le comportement du modèle Imposer un script de vente ou refuser poliment les demandes de contournement des règles
Rails d’exécution Gèrent les actions que le LLM peut déclencher auprès de systèmes externes Vérifier les permissions avant d’autoriser un appel d’API ou une modification de base de données
Rails de sortie Post-traitent la réponse générée avant qu’elle n’atteigne l’utilisateur Supprimer des données personnelles ou reformater une réponse pour garantir sa conformité

Interaction et ordre d’exécution des rails

Ces garde-fous s’exécutent dans un ordre logique : les rails d’entrée filtrent le prompt, puis les rails de récupération valident le contexte, et les rails de dialogue orientent l’échange via des flux définis en Colang. Enfin, les rails d’exécution contrôlent les actions du modèle, et les rails de sortie nettoient la réponse.

Un point important à noter : lorsqu’un type de rail n’est pas configuré sur un sujet spécifique, NeMo Guardrails applique un comportement de forwarding direct vers le LLM, sans contrainte supplémentaire. Cette flexibilité permet de sécuriser uniquement les chemins critiques tout en laissant les conversations les plus simples fluides et rapides. Cette architecture par couches offre une granularité élevée pour adapter la sécurité à chaque cas d’usage métier.

Intégrations et modèles supportés par NeMo Guardrails

NeMo Guardrails fonctionne comme une couche logique indépendante du fournisseur de LLM. Il ne remplace pas votre modèle : il l’encadre. Concrètement, vous conservez votre infrastructure existante et l’outil se positionne entre votre code applicatif et l’API du modèle, quelle que soit la solution retenue.

  • OpenAI GPT-3.5 et GPT-4 : support natif complet via l’API standard, aucune configuration supplémentaire requise.
  • LLaMa-2, Falcon et Vicuna : modèles open-source intégrables via LlamaIndex ou les endpoints compatibles OpenAI.
  • Mosaic et autres modèles compatibles OpenAI : tout fournisseur exposant une API au format OpenAI fonctionne directement.
  • Intégration LangChain via variable d’environnement : définissez NEMOGUARDRAILS_LLM_FRAMEWORK pour activer la compatibilité avec les chaînes LangChain existantes.
  • Wrapper HTTP via FastAPI : déployez un microservice containerisé exposant un endpoint /v1/chat/completions, prêt à servir vos applications en production.

Cette flexibilité de branchement permet de changer de modèle sous-jacent sans toucher aux rails de sécurité. Les tests comparatifs peuvent ainsi s’effectuer sereinement : par exemple, une instance NeMo Guardrails configurée sur GPT-4 peut être basculée vers Falcon en modifiant une seule variable d’environnement.

Pour les organisations qui préfèrent une solution entièrement hébergée, TrueFoundry a démontré la capacité de l’outil à traiter 350 RPS sur un seul processeur virtuel, preuve que la couche de contrôle n’introduit pas de goulot d’étranglement rédhibitoire dans une architecture de production.

Les modèles NVIDIA safety inclus complètent le dispositif : ils évaluent la toxicité des réponses et fournissent des scores de confiance exploitables par vos rails de sortie, sans dépendre d’un appel externe.

Colang : maîtriser le langage de dialogue pour définir les flux

Là où les rails d’entrée et de sortie opèrent en périphérie, le rail de dialogue contrôle l’architecture même de la conversation. NeMo Guardrails s’appuie sur Colang, un langage dédié (DSL) pensé pour les développeurs. Sa syntaxe, proche de Python, permet de définir des flux conversationnels précis, interprétés ensuite par le runtime Colang. Cette couche intermédiaire transforme la gestion de la sécurité d’une simple validation en une véritable orchestration des échanges.

Syntaxe et principes fondamentaux de Colang

Colang repose sur l’idée que chaque interaction peut être modélisée sous forme de scénarios. Un flux se déclare avec le mot-clé define flow, suivi d’un nom unique. À l’intérieur, chaque bloc représente une intention utilisateur (user) ou une action de l’assistant (bot). Le langage gère également les blocs de contexte pour conserver l’état de la conversation et les blocs d’action pour exécuter du code applicatif. Cette structure permet aux modèles comme Llama 3.1 NemoGuard (8B) de recevoir des instructions claires et contraintes.

  • Définition des flux : déclarez des scénarios avec define flow pour encapsuler des échanges types.
  • Gestion des messages : distinguez les entrées utilisateur (user) des réponses générées (bot).
  • Blocs de contexte : conservez les variables et l’historique de session pour des réponses cohérentes.
  • Blocs d’action : exécutez du code Python ou des appels API tiers directement depuis le flux.

Exemples de flux : créer et structurer des fichiers.colang

La structuration se fait dans des fichiers.colang, que vous pouvez organiser par domaine de compétence. Pour illustrer, un flux simple qui refuse une demande hors sujet pourrait ressembler à ceci : define flow ask off-topic, puis user ask about weather suivi de bot inform cannot help. Vous modularisez ainsi la logique, ce qui facilite la maintenance sur des projets comportant plusieurs centaines de flux. Pour un déploiement robuste qui tient jusqu’à 350 RPS sur un seul processeur virtuel, la clarté de vos définitions Colang est aussi cruciale que l’infrastructure qui les exécute.

NeMo Guardrails vs alternatives : comparaison et positionnement

Outil Approche Différence clé avec NeMo Guardrails
Guardrails AI Validation par state-machine NeMo gère les flux conversationnels complets
LLM Guard Scanners entrée/sortie Pas de rails de dialogue ni d’exécution
Llama Guard Modèle fine-tuné de sécurité NeMo est une couche programmable et flexible
OpenAI Moderation Endpoints API explicites NeMo s’intègre directement dans le dialogue

Le positionnement de NeMo Guardrails se distingue nettement par son approche state-machine : au lieu de valider chaque prompt de manière isolée, il orchestre des 5 types de garde-fous entrée, sortie, dialogue, récupération, exécution qui interagissent entre eux pour encadrer l’ensemble de la conversation. Cette architecture permet de définir des comportements complexes, comme un chatbot qui refuse poliment une requête puis propose une alternative, là où les outils de validation simple se contentent de bloquer ou modifier un contenu.

La différence fondamentale avec LLM Guard ou Guardrails AI réside dans cette gestion du contexte conversationnel. Là où les scanners input/output traitent chaque requête comme un événement isolé, NeMo Guardrails comprend l’historique et la trajectoire du dialogue grâce à son langage Colang. Cette capacité se traduit en pratique par une gestion fluide des 30 minutes de session type, permettant au garde-fou de maintenir le fil conducteur sans perdre le contrôle thématique.

Concernant les modèles de sécurité intégrés, le Llama 3.1 NemoGuard de 8B de paramètres offre une alternative open-source aux solutions propriétaires comme OpenAI Moderation. L’intégration native avec l’écosystème NVIDIA et la compatibilité API OpenAI permettent de basculer d’un fournisseur à l’autre sans réécrire les flux de dialogue, ce qui représente un avantage concurrentiel décisif pour les équipes souhaitant rester agnostiques côté infrastructure.