用途
NVIDIA NeMo Guardrails 是一个开源工具包,旨在为基于大语言模型(LLM)的对话应用添加可编程护栏(rails)。护栏是控制 LLM 输出的具体方式,例如:不谈论政治、以特定方式回应特定用户请求、遵循预定义对话路径、使用特定语言风格、提取结构化数据等。开发者可以在应用代码与 LLM 之间插入护栏层,从而构建可信、安全、可靠的 LLM 应用,防止模型参与不期望的话题讨论。
主要能力
该工具包支持五种主要护栏类型:
- 输入护栏(Input rails):应用于用户输入,可拒绝输入以停止后续处理,或修改输入(如掩码敏感数据、改写)。
- 对话护栏(Dialog rails):影响 LLM 的提示方式,基于规范形式消息运作,决定是否执行动作、是否调用 LLM 生成下一步或响应、是否使用预定义响应等。
- 检索护栏(Retrieval rails):应用于 RAG(检索增强生成)场景中检索到的文本块,可拒绝或修改文本块。
- 执行护栏(Execution rails):应用于自定义动作(工具)的输入/输出。
- 输出护栏(Output rails):应用于 LLM 生成的输出,可拒绝输出或修改输出(如移除敏感数据)。
该工具包还提供针对 LLM 常见漏洞(如越狱和提示注入)的保护机制,并内置多种护栏,包括 LLM 自检(输入/输出审核、事实核查、幻觉检测)、NVIDIA 安全模型(内容安全、话题安全)、越狱和注入检测,以及与社区模型和第三方 API 的集成。
使用方式
安装要求 Python 3.10、3.11、3.12 或 3.13。可以使用 pip 安装。
使用 Python API 添加护栏仅需两步:
- 加载护栏配置并创建
LLMRails实例。 - 使用
generate/generate_async方法调用 LLM。
输入输出格式类似于 OpenAI 的 Chat Completions API。该工具包是异步优先的,公共方法同时提供同步和异步版本(如 LLMRails.generate 和 LLMRails.generate_async)。
还可以使用内置 CLI 启动护栏服务器,从指定文件夹加载一个或多个配置,并暴露 HTTP API。例如使用 /v1/chat/completions 端点获取聊天补全。也可使用 Docker 容器启动护栏服务器(提供了 Dockerfile 构建 nemoguardrails 镜像)。
LangChain 集成为可选,需设置环境变量 NEMOGUARDRAILS_LLM_FRAMEWORK=langchain 或调用 set_default_framework("langchain") 启用。
护栏配置通过文件夹组织,包含 config.yml(通用配置选项,如 LLM 模型、激活的护栏、自定义配置数据)、config.py(自定义初始化代码)、actions.py(自定义 Python 动作)以及 .co 文件(包含 Colang 定义,用于定义各种护栏)。Colang 是专为设计灵活可控对话流而创建的建模语言,具有类似 Python 的语法。
适用场景
- 基于文档的问答(RAG):强制执行事实核查和输出审核。
- 领域特定助手(聊天机器人):确保助手保持话题并遵循设计的对话流程。
- LLM 端点:为自定义 LLM 添加护栏以实现更安全的客户交互。
- LangChain 链(可选):在链周围包裹护栏层。
限制
- 评估 LLM 对话应用的安全性是一项复杂任务,仍是开放研究问题。该库提供了评估工具(
nemoguardrails evaluate)支持话题护栏、事实核查、审核和幻觉检测,并提供样本 LLM 漏洞扫描报告。 - 该库收集匿名遥测数据以帮助 NVIDIA 了解部署模式和安全功能使用情况。可在库启动前通过设置环境变量或创建
do_not_track文件选择退出。遥测不包括用户内容、模型名称、API 密钥、端点、提示、补全、令牌计数、每请求指标、文件路径、用户名或 IP 地址。 - 使用第三方端点(如 NVIDIA Build)时,该端点有自己的服务条款和隐私实践,库的遥测退出不延伸至端点。NVIDIA Build 仅用于评估和测试,不得用于生产环境,使用时应避免提交机密信息或个人数据。
- 该库遵循 Apache License 2.0 许可。
其他信息
最新发布版本为 0.24.1,开发分支跟踪最新开发进度。官方文档位于 docs.nvidia.com/nemo/guardrails。该工具包与多种 LLM 兼容,如 OpenAI GPT-3.5、GPT-4、LLaMa-2、Falcon、Vicuna、Mosaic 等。