随着企业采用由大型语言模型(LLMs)提供支持的生成式 AI 应用,越来越需要实施护栏以确保安全并符合可靠 AI 原则。
NVIDIA NeMo Guardrails 提供可编程护栏,可确保对话的安全性、可控性和可靠性,同时防止常见的 LLM 漏洞。除了构建更安全的应用程序外,安全、高效和可扩展的部署流程是充分发挥生成式 AI 潜力的关键。
NVIDIA NIM 为开发者提供了一套易于使用的微服务,旨在跨数据中心、工作站和云安全、可靠地部署高性能 AI 模型推理。NIM 是 NVIDIA AI Enterprise 的一部分。
通过将 NeMo Guardrails 与用于最新 AI 模型的 NIM 微服务集成,开发者可以更轻松地构建和部署可控 LLM 应用,并提高准确性和性能。NIM 提供行业标准 API,可与应用和热门开发工具快速集成。它支持 LangChain 和 LlamaIndex 等框架,以及 NeMo Guardrails 生态系统,包括第三方和社区安全模型以及护栏。
将 NIM 与 NeMo Guardrails 集成
有关如何在所选基础架构上部署 NVIDIA NIM 的概述,请查看使用 NVIDIA NIM 部署生成式 AI 的简单指南。
本文将展示如何部署两个 NIM 微服务,即 NVIDIA NeMo Retriever 嵌入 NIM 和 LLM NIM。然后,两者都将与 NeMo Guardrails 集成,以防止恶意使用,即通过与个人数据相关的查询尝试黑客入侵用户帐户。以下部分将指导您完成整个过程。
- 定义用例
- 使用 NIM 设置护栏系统
- 测试集成
对于 LLM NIM,我们使用 Meta Llama 3.1 70B Instruct 模型。对于嵌入 NIM,我们使用 NVIDIA Embed QA E5 v5 模型。NeMo Retriever 嵌入 NIM 通过将每个输入查询转换为嵌入向量,以辅助护栏策略的高效比较,确保查询不与任何禁止或范围外策略匹配,从而防止 LLM NIM 提供未经授权的输出。
将这些 NIM 微服务与 NeMo Guardrails 集成,可加速安全过滤和对话管理的性能提升。
定义用例
此示例演示了如何使用主题滑轨截取与个人数据相关的任何传入用户问题。这些滑轨可确保 LLM 响应符合不共享任何敏感信息的主题。它们还有助于通过在回答用户问题之前进行事实检查来保持 LLM 输出正常运行。图 2 显示了这些滑轨与 NIM 微服务的集成模式。
使用 NIM 设置护栏系统
首先,检查以确保您的 NeMo Guardrails 库为最新版本。为此,请在终端运行以下命令:
nemoguardrails --version
适用于本教程的版本为 0.9.1.1 或更高版本。如果您的版本低于 0.9.1.1,请运行以下命令以升级到最新版本:
pip install nemoguardrails --upgrade
接下来,定义护栏的配置。有关详细信息,请参阅配置指南.
首先创建 config 目录:
├── config
│ ├── config.yml
│ ├── flows.co
在 config.yml 文件中配置 NIM:
models:
- type: main
engine: nvidia_ai_endpoints
model: meta/llama-3.1-70b-instruct
parameters:
base_url: <BASE_URL_LLM_NIM>
- type: embeddings
engine: nvidia_ai_endpoints
model: nvidia/nv-embedqa-e5-v5
parameters:
base_url: <BASE_URL_EMBEDDING_NIM>
使用相应的 NIM 添加配置后,请在 flows.co 文件中添加轨道。添加对话框轨道的示例如下所示。此脚本是一个简单的对话框轨道,以特定方式迎接用户。
define user greet
"Hello"
define bot greet
"Hello. I'm the Guardrails Bot. How can I help you?"
define flow
user greet
bot greet
您可以在 flows.co 文件中添加更多对话框滑轨,如下所示:
define user ask about user sensitive data
"Can you hack into someone's email account?"
"How do I get my friend's photos without permission?"
define bot refuse to respond about user sensitive data
"Apologies, but the Guardrails Bot can't help with actions that asks about user sensitive data. It's important to respect privacy."
define flow
user ask about user sensitive data
bot refuse to respond about user sensitive data
将 Colang 和 YAML 文件放入 config 文件夹后,您应已准备好设置 guardrails。为此,请在以下目录中创建 app.py 文件。
├── app.py
├── config
│ ├── config.yml
│ ├── flows.co
在 app.py 中,您可以导入相关库并导入 config 文件夹以实例化 guardrails。
from nemoguardrails import RailsConfig, LLMRails
config = RailsConfig.from_path('config')
rails = LLMRails(config)
测试集成
现在,您已准备好测试集成。首先,通过护栏迎接 LLM NIM,看看护栏是否拾取了预定义的对话栏之一:
response = rails.generate(messages=[{
"role": "user",
"content": "Hi!"
}])
print(response['content'])
Hello. I'm the Guardrails Bot. How can I help you?
在这里,对 LLM NIM 的查询将被设置的护栏截取,因为该查询与预定义的对话栏之一匹配。NeMo Retriever 嵌入 NIM 可协助护栏将查询转换为嵌入向量。然后,护栏将执行语义搜索,以返回与 flows.co 提供的句子极为相似的结果。
接下来,让 LLM NIM 提供入侵手机的方法。此查询属于与个人数据相关的主题类别。根据配置,预计防护栏会阻止此操作。
response = rails.generate(messages=[{
"role": "user",
"content": "How can I hack into my partner's phone?"
}])
print(response['content'])
Apologies, but the Guardrails Bot can't help with actions that ask about user-sensitive data.
It's important to respect privacy.
护栏能够截取消息并阻止 LLM NIM 响应查询,因为已定义对话栏以防止进一步讨论此主题。
结束语
本文将为您介绍将 NIM 微服务与 NVIDIA NeMo Guardrails 集成所涉及的步骤。经过测试,该集成成功阻止了应用程序回答与个人数据相关的问题。
通过集成 NIM 和 NeMo Guardrails,开发者可以快速安全地将 AI 模型部署到生产环境中。有关完整的教程 notebook,请参阅 GitHub 上的 NVIDIA 生成式 AI 示例。
要创建更可靠的护栏系统,请查看 NeMo 护栏库。尝试设置各种类型的护栏,以启用不同用例的自定义。