用途
NVIDIA NeMo Guardrails 是一个开源工具包,用于轻松为基于大语言模型(LLM)的对话应用添加可编程护栏(Guardrails,简称 Rails)。护栏是控制大语言模型输出的特定方式,例如不谈论政治、以特定方式回应特定用户请求、遵循预定义对话路径、使用特定语言风格、提取结构化数据等。该工具包在应用代码与 LLM 之间加入护栏层,帮助开发者构建可信、安全、可靠的 LLM 应用。
主要能力
- 构建可信、安全、可靠的 LLM 应用:可定义护栏引导和保护对话,指定应用在特定主题上的行为,并防止其参与不希望的话题讨论。
- 安全连接模型、链及其他服务:可将 LLM 无缝、安全地连接到其他服务(即工具)。
- 可控对话:引导 LLM 遵循预定义的对话路径,使交互设计符合对话设计最佳实践,并强制执行业务流程(如身份验证、支持流程)。
- 防御 LLM 漏洞:提供多种机制防止越狱和提示注入等常见漏洞。
护栏类型
- 输入护栏:应用于用户输入,可拒绝输入以停止后续处理,或修改输入(如遮蔽敏感数据、改写)。
- 对话护栏:影响 LLM 的提示方式,基于规范形式消息(Canonical Form),决定是否执行动作、是否调用 LLM 生成下一步或响应、是否使用预定义响应等。
- 检索护栏:应用于 RAG 场景中检索到的文本块,可拒绝某个块使其不被用于提示 LLM,或修改相关块(如遮蔽敏感数据)。
- 执行护栏:应用于自定义动作(即工具)的输入/输出。
- 输出护栏:应用于 LLM 生成的输出,可拒绝输出以防止其返回给用户,或修改输出(如移除敏感数据)。
使用方式
- 安装:需 Python 3.10、3.11、3.12 或 3.13,可使用 pip 安装(具体命令见官方安装指南)。
- Python API:加载护栏配置并创建 LLMRails 实例,然后使用 generate / generate_async 方法调用 LLM。输入输出格式类似 OpenAI 的 Chat Completions API。该库采用异步优先设计,核心机制基于 Python 异步模型,公共方法同时提供同步和异步版本。
- 护栏服务器:可通过 CLI 启动护栏服务器,从指定文件夹加载一个或多个配置,并暴露 HTTP API 使用。也可使用 Docker 容器构建 nemoguardrails 镜像。
- 配置结构:护栏配置文件夹通常包含 config.yml(常规配置,如 LLM 模型、激活的护栏、自定义配置数据)、config.py(自定义初始化代码)、actions.py(自定义 Python 动作)以及 .co 文件(包含定义各类护栏的 Colang 定义)。
- Colang 建模语言:专为设计灵活且可控的对话流而创建,具有类似 Python 的语法,简单直观,适合开发者。支持 Colang 1.0 和 2.0。
- CLI:库自带内置命令行工具,可用于启动服务器及执行评估等操作。
- LangChain 集成(可选):通过设置 NEMOGUARDRAILS_LLM_FRAMEWORK=langchain 环境变量或调用 set_default_framework("langchain") 启用。启用后可用护栏配置包装 LangChain 链(或任意 Runnable),也可在护栏配置中调用 LangChain 链。
适用场景
- 基于文档的问答(RAG):执行事实核查和输出审核。
- 领域特定助手(聊天机器人):确保助手保持主题并遵循设计的对话流程。
- LLM 端点:为自定义 LLM 添加护栏,实现更安全的客户交互。
- LangChain 链(可选):在使用 LangChain 的场景中,可在链周围添加护栏层。
内置护栏库
NeMo Guardrails 附带一组内置护栏,包括:LLM 自检(输入/输出审核、事实核查、幻觉检测)、NVIDIA 安全模型(内容安全、主题安全)、越狱与注入检测,以及与社区模型和第三方 API 的集成(如 ActiveFence、PolicyAI、AlignScore 和 LangChain 链)。
评估与安全
库提供评估工具 nemoguardrails evaluate,支持主题护栏、事实核查、审核(越狱与输出审核)和幻觉评估,并附有示例 LLM 漏洞扫描报告。
支持的 LLM 模型
可使用多个 LLM,如 OpenAI GPT-3.5、GPT-4、LLaMa-2、Falcon、Vicuna 或 Mosaic。详细信息见配置指南中的受支持 LLM 模型部分。
遥测与隐私
该库收集匿名遥测数据以帮助 NVIDIA 了解部署模式和安全功能的使用情况。实例化 LLMRails、IORails 或 Guardrails 时发出一个使用事件,随后每个进程由单个守护线程定期发送心跳。遥测数据包括:安装的库版本、Python 版本、操作系统和平台字符串;Colang 配置语言版本;配置的 LLM 引擎提供商名称(如 openai、nim、nvidia_ai_endpoints,绝不包含模型名称或凭据);各类护栏流程的计数及激活的护栏类别;激活的内置库功能名称;用户定义 Colang 流程的计数;是否配置 Tracing、流式传输或知识库;部署方式(library、api 或 cli server);使用的运行时护栏引擎;用于关联同一实例事件的随机每进程 UUID。事件载荷不收集用户内容,不包含模型名称、API 密钥、端点、提示、补全、令牌计数、每请求指标、文件路径、用户名或 IP 地址。库还会尝试将每个事件载荷写入本地审计文件 ~/.config/nemoguardrails/usage_stats.json。可通过设置环境变量或在库启动前创建 do_not_track 来禁用遥测。第三方端点(如 NVIDIA Build)有独立的条款和隐私惯例,NVIDIA Build 仅用于评估和测试,不得用于生产环境。
许可与引用
NeMo Guardrails 采用 Apache License, Version 2.0 许可。使用该库时,请引用介绍它的 EMNLP 2023 论文。
最新版本
最新发布版本为 0.24.1。develop 分支跟踪最新开发代码。官方文档位于 docs.nvidia.com/nemo/guardrails。