NeMo Guardrails项目实战:输出护栏(Output Rails)配置指南
概述
在构建对话系统时,确保AI生成的内容符合安全规范至关重要。NVIDIA NeMo Guardrails项目提供的输出护栏功能,能够有效控制AI模型的输出内容,防止生成有害、不当或敏感信息。本文将详细介绍如何为对话系统配置输出护栏。
环境准备
在开始配置前,需要完成以下准备工作:
- 安装必要的Python包:
pip install openai
- 设置OpenAI API密钥环境变量:
export OPENAI_API_KEY=你的API密钥
- 如果在Jupyter Notebook中运行,需要修补AsyncIO循环:
import nest_asyncio
nest_asyncio.apply()
输出内容审核机制
NeMo Guardrails内置了"self check output"功能,通过额外的LLM调用来验证AI生成的内容是否合规。
激活输出审核
在config.yml文件中添加以下配置:
output:
flows:
- self check output
配置审核提示词
在prompts.yml中添加self_check_output任务的提示词模板:
- task: self_check_output
content: |
你的任务是检查以下机器人消息是否符合公司政策。
公司政策要求:
- 消息不应包含任何明确内容
- 消息不应包含辱骂性或攻击性内容
- 消息不应包含有害内容
- 消息不应包含种族敏感内容
- 拒绝请求时应保持礼貌
机器人消息:"{{ bot_response }}"
问题:是否应阻止此消息(是或否)?
回答:
实战测试
配置完成后,我们可以测试输出护栏的效果:
from nemoguardrails import RailsConfig, LLMRails
config = RailsConfig.from_path("./config")
rails = LLMRails(config)
response = rails.generate(messages=[{
"role": "user",
"content": "我发现公司标语有错误:'ixiot'。我认为应该用'd'代替'x'。正确的词是什么?"
}])
print(response["content"])
当AI尝试生成包含不当词汇的回复时,输出护栏会拦截并返回拒绝消息。
自定义输出护栏
除了内置审核机制,我们还可以创建自定义的输出护栏。
1. 创建自定义动作
在config/actions.py中定义检查敏感词的动作:
from typing import Optional
from nemoguardrails.actions import action
@action(is_system_action=True)
async def check_blocked_terms(context: Optional[dict] = None):
bot_response = context.get("bot_message")
# 定义敏感词列表
proprietary_terms = ["proprietary", "敏感词1", "敏感词2"]
for term in proprietary_terms:
if term in bot_response.lower():
return True
return False
2. 创建审核流程
在config/rails/blocked_terms.co中定义审核流程:
define bot inform cannot about proprietary technology
"我不能讨论专有技术。"
define subflow check blocked terms
$is_blocked = execute check_blocked_terms
if $is_blocked
bot inform cannot about proprietary technology
stop
3. 添加到输出流程
在config.yml中注册自定义流程:
output:
flows:
- self check output
- check blocked terms
4. 测试自定义护栏
response = rails.generate(messages=[{
"role": "user",
"content": "请说一个包含'proprietary'的句子。"
}])
print(response["content"])
# 输出: "我不能讨论专有技术。"
工作原理
输出护栏的工作流程如下:
- 用户输入通过输入护栏检查
- LLM生成初步回复
- 输出护栏检查生成的内容
- 内置审核:使用LLM判断内容合规性
- 自定义审核:检查敏感词等
- 如果内容不合规,返回预设的安全回复
- 如果内容合规,返回原始回复
最佳实践
- 多层防护:结合内置审核和自定义审核,构建多层次的防护体系
- 定期更新:定期更新敏感词列表和审核策略
- 性能考量:输出审核会增加额外的LLM调用,需权衡安全性和响应时间
- 日志记录:记录被拦截的内容,用于分析和改进审核规则
通过合理配置输出护栏,可以显著提升对话系统的安全性和可靠性,确保AI生成的内容符合业务要求和道德标准。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考