NeMo Guardrails项目实战:输出护栏(Output Rails)配置指南

NeMo Guardrails项目实战:输出护栏(Output Rails)配置指南

NeMo-Guardrails NeMo Guardrails is an open-source toolkit for easily adding programmable guardrails to LLM-based conversational systems. NeMo-Guardrails 项目地址: https://gitcode.com/gh_mirrors/ne/NeMo-Guardrails

概述

在构建对话系统时,确保AI生成的内容符合安全规范至关重要。NVIDIA NeMo Guardrails项目提供的输出护栏功能,能够有效控制AI模型的输出内容,防止生成有害、不当或敏感信息。本文将详细介绍如何为对话系统配置输出护栏。

环境准备

在开始配置前,需要完成以下准备工作:

  1. 安装必要的Python包:
pip install openai
  1. 设置OpenAI API密钥环境变量:
export OPENAI_API_KEY=你的API密钥
  1. 如果在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"])
# 输出: "我不能讨论专有技术。"

工作原理

输出护栏的工作流程如下:

  1. 用户输入通过输入护栏检查
  2. LLM生成初步回复
  3. 输出护栏检查生成的内容
    • 内置审核:使用LLM判断内容合规性
    • 自定义审核:检查敏感词等
  4. 如果内容不合规,返回预设的安全回复
  5. 如果内容合规,返回原始回复

最佳实践

  1. 多层防护:结合内置审核和自定义审核,构建多层次的防护体系
  2. 定期更新:定期更新敏感词列表和审核策略
  3. 性能考量:输出审核会增加额外的LLM调用,需权衡安全性和响应时间
  4. 日志记录:记录被拦截的内容,用于分析和改进审核规则

通过合理配置输出护栏,可以显著提升对话系统的安全性和可靠性,确保AI生成的内容符合业务要求和道德标准。

NeMo-Guardrails NeMo Guardrails is an open-source toolkit for easily adding programmable guardrails to LLM-based conversational systems. NeMo-Guardrails 项目地址: https://gitcode.com/gh_mirrors/ne/NeMo-Guardrails

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戚魁泉Nursing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值