NVIDIA NeMo Guardrails は、LLM ベースの対話型アプリケーションにプログラム可能なガードレールを追加するためのオープンソースツールキットである。README ではレール(全体を通して使われる略称)を、大規模言語モデルの出力を制御する具体的な方法と定義しており、例として、政治の話をしないこと、特定のユーザーリクエストに特定の方法で応答すること、あらかじめ定義された対話パスに従うこと、特定の文体を使うこと、構造化データを抽出することを挙げている。ライブラリは PyPI で nemoguardrails として配布され、Apache 2.0 ライセンスで、Python 3.10 から 3.13 を必要とする。
アプリケーション内での位置づけはアーキテクチャ上のものである。このツールキットは、プロンプトの内部ではなく、アプリケーションコードと LLM の間にプログラム可能なガードレールを追加できるようにする。README は 3 つの主な利点を挙げている。特定のトピックで許容される振る舞いを定義することで、信頼でき、安全でセキュアな LLM アプリケーションを構築できること。モデル、チェーン、その他のサービスを安全に接続できること。そして制御可能な対話、すなわちあらかじめ定義された会話パスに沿ってモデルを誘導し、認証やサポートフローといった標準作業手順を強制できることである。また、4 つのユースケースの形を挙げている。ファクトチェックと出力モデレーションを備えた検索拡張型の質問応答、ドメイン特化型アシスタント、カスタム LLM エンドポイント、そして LangChain のチェーンをラップするオプションの統合である。
機能
ドキュメントでは 5 種類のレールが説明されており、リクエストのどこで適用されるかによって区別される。入力レールはユーザー入力に適用され、入力をそのまま拒否してそれ以降の処理を止めることも、機密データのマスキングや言い換えによって入力を改変することもできる。対話レールはモデルへのプロンプトの与え方に影響し、正規形のメッセージに対して動作して、アクションを実行すべきか、次のステップや応答のためにモデルを呼び出すべきか、それとも代わりに事前定義された応答を使うべきかを判断する。検索レールは RAG のシナリオで取得されたチャンクに適用され、チャンクがプロンプトに入る前に拒否または改変できる。実行レールはカスタムアクション(このツールキットにおけるツールの呼び名)の入力と出力に適用される。出力レールは生成された出力に適用され、ユーザーに届く前に拒否したり、機密データを取り除くよう改変したりできる。
ガードレール設定は 1 つのフォルダで、モデルと有効なレールを指定する config.yml、カスタム初期化用のオプションの config.py、カスタム Python アクション用の actions.py、そして Colang による定義を収めた .co ファイルから構成される。README によれば、レールを 1 つも設定していない構成は、基本的にリクエストをモデルに転送するだけになる。例として示される config.yml には、ジェイルブレイクのチェックと機密データのマスキングを行う入力フロー、事実性とハルシネーションのセルフチェックおよびモデレーションを行う出力フローが列挙され、あわせて入力時にどのエンティティ種別をマスキングするかを設定するブロックが含まれている。
Python からツールキットを使うには最小限の変更で済むとされている。設定を RailsConfig に読み込み、LLMRails インスタンスを作成し、モデルの代わりに generate を呼び出すだけで、入出力の形式は OpenAI の Chat Completions API に近い。ライブラリは非同期ファーストと説明されており、中核の仕組みは Python の非同期モデルの上に構築され、公開メソッドには同期版と非同期版がある。Python API の代替として、ガードレールサーバーも提供されている。
採用とエコシステム
README は、一般的な LLM の脆弱性(ジェイルブレイクと プロンプトインジェクション を挙げている)からの保護をツールキットの目的の一つとして提示し、同梱のサンプルボットに対してガードレール設定を比較する脆弱性スキャンについて報告している。結果と手法については自身のドキュメントを参照するよう案内している。また、このツールキットは複数のモデルプロバイダーで動作し、組み込みガードレールのライブラリを同梱しているとしている。
プロジェクトは NVIDIA 自身のドキュメントサイトで解説されており、README はこのライブラリを紹介し、技術的な概要と評価を示す論文を参照している。この論文は README での言及を通じてしか把握していないため、そのタイトル、著者、知見は確立した事実としては記載しない。開発は最新の作業を追跡する develop ブランチで行われ、リリースは別途タグ付けされる。