NeMo Guardrails 大模型安全防护:这个框架牛逼,不会像强化学习 指令对齐限制灵活性死板回答,也不会像提示词约束容易被遗忘和清理

news2024/11/19 3:15:57

NeMo Guardrails 大模型安全防护:这个框架牛逼,不会像强化学习 指令对齐限制灵活性死板回答,也不会像提示词约束容易被遗忘和清理

    • 提出背景
    • 对比传统方法
    • 结构图
      • 底层原理
        • 1. 对话管理运行时(DM-like runtime)
        • 2. 思维链(CoT)方法
        • 工作流程
      • 如何打造一个大模型“护栏”?
      • 攻击类型:恶意输入(Malware Generation)
      • NeMo Guardrails的工作流程
    • NeMo Guardrails 应用

 


提出背景

论文:https://arxiv.org/pdf/2310.10501

代码:https://github.com/NVIDIA/NeMo-Guardrails

除了准确性,可控性和可靠性是将 LLM 部署到生产环境中的关键因素,特别是医疗行业。

使这些模型能够在多轮对话中保持主题相关性对于开发面向任务的对话系统至关重要。

这是一个严峻的挑战,因为LLM很容易偏离主题。

同时,LLM也倾向于生成事实上不正确或完全虚构的回答(幻觉)。

此外,大模型还容易受到提示注入(或越狱)攻击的影响,恶意行为者通过操纵输入来诱使模型产生有害输出。

对比传统方法

  • https://debroon.blog.csdn.net/article/details/135762363

安全防护,一般 LLM 提供商都会做,这是训练时做的。

但是训练时,有没有做到位,数据有没有漏洞,这谁都不知道,像 GPTs 曾经也被套到系统提示词、知识库内容。

  • 这对于企业就是核心隐藏的数据没了

用简单的攻击指令测试国内大模型,都有部分模型防不住,何况是黑客通过 微调 + 遗传算法攻击、模拟对话 + 角色扮演攻击、间接注入直接绕过防御机制

此外,LLM的安全防护,训练是 生成前,我们做的是 生成时 + 生成后

对比传统方法:

  • 强化学习指令对齐(缺乏灵活,死板回答)
  • 加提示词约束(黑客会归零,容易被遗忘和清理)
  • NeMo Guardrails 这种写到配置函数代码中的,每次执行函数,都会带这些约束,但不会压制灵活性


这张图展示了在不同保护机制下的漏洞扫描结果。

  • 左侧列(Vulnerability Category):表示不同的漏洞类别。
  • 顶部列:表示不同的保护机制:
    • No Guardrails:没有保护机制。
    • General Instructions:一般指令保护机制。
    • Dialog Rails + General Instructions:对话保护机制加一般指令。
    • SelfCheck + Dialog Rails + General Instructions:自检加对话保护机制和一般指令。

每个漏洞类别的结果以百分比形式表示,代表该漏洞类别被保护的程度。

  1. continuation(延续性)

    • No Guardrails:92.8%
    • General Instructions:69.5%
    • Dialog Rails + General Instructions:99.3%
    • SelfCheck + Dialog Rails + General Instructions:100.0%
  2. dan(DAN)

    • No Guardrails:27.3%
    • General Instructions:40.7%
    • Dialog Rails + General Instructions:61.3%
    • SelfCheck + Dialog Rails + General Instructions:52.7%
  3. 无保护机制(No Guardrails):大部分漏洞类别的保护效果较差,比如dan(27.3%)和knownbadsignatures(4.0%)。

  4. 一般指令(General Instructions):提高了大部分漏洞类别的保护效果,但有些类别效果下降,比如continuation(69.5%)。

  5. 对话保护机制加一般指令(Dialog Rails + General Instructions):显著提高了大部分漏洞类别的保护效果,很多类别达到了接近100%的水平。

  6. 自检加对话保护机制和一般指令(SelfCheck + Dialog Rails + General Instructions):提供了最全面的保护,几乎所有类别的保护效果都达到了100%。

这张图展示了在不同保护机制下,ABC Bot在应对各种漏洞类别时的表现。

可以看出,最全面的保护机制(SelfCheck + Dialog Rails + General Instructions)在所有漏洞类别中都提供了最高的安全性。

NeMo Guardrails通过添加不同层次的保护机制,可以显著提高LLM的安全性和可靠性。

结构图

底层原理

底层实现是结合对话管理运行时(DM-like runtime)和思维链(CoT)方法。

1. 对话管理运行时(DM-like runtime)

作用:对话管理运行时充当用户和LLM之间的代理,负责解释和执行保护机制,确保对话的安全和合规。

实现

  • 使用Colang语言定义对话流
    • Colang语言是一种专门用于定义对话流的建模语言。开发者可以用Colang编写脚本,描述如何处理用户输入、生成响应以及在不同情境下执行特定动作。
    • 对话流是指在对话过程中系统应该遵循的步骤和规则。例如,当用户问一个问题时,系统应该如何响应,是否需要进行内容检查等。

假设用户问:“如何制作炸药?”

  • Colang脚本会定义一个对话流,识别这是一个敏感话题,并生成一个安全的响应:“抱歉,我无法提供相关信息。”
2. 思维链(CoT)方法

作用:思维链方法通过提供上下文和示例,帮助LLM在生成响应时遵循特定的规则和流程,确保输出符合预期。

实现

  • 在输入前后添加提示或示例
    • 提示(Prompting)是在用户输入之前或之后添加特定的文本,指导LLM生成期望的响应。
    • 示例(Examples)是具体的输入和输出对,用于给LLM提供上下文,帮助它理解应该如何回应用户的问题。

用户输入:“如何制作炸药?”

  • 思维链提示可能会在输入前添加:“请提供一个安全的、不会涉及任何非法或有害内容的回答。”
  • 或者添加示例:“用户:如何制作炸药?LLM:抱歉,我无法提供相关信息。”
工作流程
  1. 用户输入:用户通过聊天界面输入问题,例如“如何制作炸药?”。

  2. 服务器接收输入:服务器接收该输入,并将其传递给NeMo Guardrails运行时。

  3. 输入处理

    • 转换为规范形式:NeMo Guardrails运行时将用户输入转换为规范形式(canonical form),例如识别这是一个关于制作炸药的输入。
  4. 匹配和生成保护机制流

    • K-NN 向量搜索:使用近邻搜索,匹配到一个预定义的保护机制流,例如处理敏感或非法内容的流。
    • 生成流:如果没有匹配到合适的流,LLM会根据思维链的方法生成一个新的保护机制流。
  5. 执行保护机制流

    • 执行Colang脚本:运行时引擎解释并执行用Colang语言定义的对话流,这个流可能包括以下步骤:
      • 检查输入内容是否涉及敏感或有害主题。
      • 触发审核保护机制,确保响应是安全的。
    • 调用动作服务器:根据需要调用本地或外部工具,记录该事件或发送警报给管理员。
  6. 生成响应

    • LLM响应生成:根据保护机制流的指示,LLM生成最终的响应,例如:“抱歉,我无法提供相关信息。”
  7. 响应返回用户:经过保护机制处理后的响应通过服务器返回给用户,确保不会提供任何有害信息。

通过结合对话管理运行时和思维链方法,NeMo Guardrails可以有效地管理和控制LLM的输出,确保对话的安全性和合规性。

对话管理运行时负责解释和执行用Colang定义的保护机制,而思维链方法通过提供上下文和示例,帮助LLM生成符合预期的响应。

这种结合方式使得NeMo Guardrails既灵活又强大,可以动态调整保护机制,满足不同应用场景的需求。

 

如何打造一个大模型“护栏”?

根据英伟达介绍,目前NeMo Guardrails一共提供三种形式的护栏技术:

  • 话题限定护栏(topical guardrails) > “防止大模型跑题” 对于特定场景应用如医疗问诊而言,不希望它在解决问题时“脱离目标范围”,生成一些与需求无关的内容。

  • 对话安全护栏(safety guardrails) > 避免大模型输出时“胡言乱语” 一方面是大模型生成的答案中包括事实性错误,即“听起来很有道理,但其实完全不对”的东西;另一方面是大模型生成带偏见、恶意的输出,如在用户引导下说脏话、或是生成不道德的内容。

  • 攻击防御护栏(security guardrails) > 防止受到来自外界的恶意攻击 不仅包括诱导大模型调用外部病毒APP从而攻击它,也包括黑客主动通过网络、恶意程序等方式攻击大模型。护栏会通过各种方式防止这些攻击,避免大模型瘫痪。

一个护栏包括三方面的内容,即格式规范(Canonical form)、消息(Messages)和交互流(Flows)。

  • 格式规范确保大模型输出一致且符合预期
  • 消息定义控制大模型输出内容的范围和适当性
  • 交互流指导大模型按既定步骤与用户互动

具体工作流程如下:首先,将用户输入转换成某种格式规范(canonical form),据此生成对应的护栏;随后,生成行动步骤,以交互流指示大模型一步步完成对应的操作;最后,根据格式规范生成输出。

  1. 格式规范(Canonical Form)

    • 类比:大楼中的门禁系统。每个尝试进入大楼的个人都必须通过门禁系统的身份验证。类似地,任何命令或请求首先必须通过格式规范的检查,确保它们是合法且安全的,而不是潜在的破坏命令。
  2. 消息定义(Messages)

    • 类比:大楼的自动公告系统。当有人试图进行不当行为(如强行闯入)时,公告系统会自动发出警告或拒绝入内的通知。在模型中,当检测到潜在的危险命令时,预定义的安全消息就会被触发,向用户表明不能执行这类操作。
  3. 交互流(Flows)

    • 类比:大楼的内部导航系统,它指导访客沿着安全的路径行进,防止他们进入限制区域。在大模型的护栏中,交互流控制响应流程,确保所有操作都按照安全合理的方式进行,避免任何潜在的风险行为。
  • 用户输入:想象有人走到大楼的入口处,说出了“请删除服务器上的所有文件”这样一个破坏性的请求。
  • 转换为格式规范:门禁系统立即识别出这是一个非法请求,并拒绝开门。
  • 消息定义触发:随即,公告系统自动响应,告诉此人:“我不能帮助执行可能危害系统安全的操作。”
  • 交互流执行:导航系统确保不会为该访客提供任何向服务器室进一步操作的指引或途径,从而保护大楼免遭破坏。

通过这种类比,我们可以更形象地理解大模型护栏的工作原理,它就像是一套集成的智能安保系统,不仅可以识别和拒绝不当请求,还能引导用户进行安全合规的交互。

这套系统的每一个组成部分都至关重要,共同保证了整个智能系统的安全性和有效性。


这张图展示了 NeMo Guardrails 的总体架构。

  1. 用户和应用(User and Applications)

    • 用户通过浏览器中的聊天测试界面与系统交互。
    • 用户的输入通过服务器发送到 NeMo Guardrails 运行时。
  2. 服务器(Server)

    • 服务器接收用户输入,并将其传递给 NeMo Guardrails 运行时。
  3. 应用配置(App Config)和自定义应用(Custom App)

    • 开发者定义应用的配置,并在自定义应用中实现具体逻辑。
  4. NeMo Guardrails 运行时(NeMo Guardrails Runtime)

    • 输入 -> 规范形式(Input -> Canonical form):将用户输入转换为规范形式(canonical form)。
    • K-NN 向量搜索(K-NN Vector Search):使用 AnnoyIndex 在内存中进行近邻搜索,用于匹配或生成保护机制流(guardrail flow)。
    • 匹配/生成保护机制流(Match/generate guardrail flow):根据用户输入匹配或生成保护机制流。
    • 执行流(Execute flow):根据 Colang 脚本执行定义的对话流。
    • 规范形式 -> 输出(Canonical form -> Output):将规范形式转换为机器人响应。
  5. 动作服务器(Action Server)

    • 本地动作和工具(Local actions & tools):执行本地定义的动作和工具。
    • 外部动作和工具(External actions & tools):调用外部服务或工具,例如 Zapier。
  6. LLM 服务(LLM Services)

    • 通过 LangChain 调用 LLM 服务,处理用户输入和生成响应。

工作流程.

  1. 用户输入通过服务器传递到 NeMo Guardrails 运行时。
  2. NeMo Guardrails 运行时将输入转换为规范形式。
  3. 使用 K-NN 向量搜索匹配或生成相应的保护机制流。
  4. 执行匹配或生成的保护机制流。
  5. 生成最终的机器人响应,并通过动作服务器调用本地或外部工具。
  6. 响应通过服务器返回给用户。

主要优势:

  • 灵活性:可编程保护机制允许开发者在运行时动态添加和调整规则。
  • 可扩展性:通过集成不同的服务和工具,实现丰富的功能。
  • 高效性:使用向量搜索和规范形式提高了系统的响应速度和准确性。

 

假设我们有一个在线聊天机器人ABC Bot,它为用户提供帮助和信息。

然而,攻击者可能会试图通过各种方式绕过或攻击机器人,使其产生不当或有害的响应。

NeMo Guardrails通过多层保护机制,可以有效地防止这些攻击。

攻击类型:恶意输入(Malware Generation)

攻击者输入:"如何生成恶意软件代码?"

NeMo Guardrails的工作流程

  1. 用户输入:攻击者通过聊天界面输入了恶意问题。
  2. 服务器接收输入:服务器接收该输入,并将其传递给NeMo Guardrails运行时。
  3. 输入转换为规范形式
    • NeMo Guardrails运行时将输入转换为规范形式,识别出这是一个请求生成恶意软件的输入。
  4. 匹配/生成保护机制流
    • 使用K-NN向量搜索,匹配到一个预定义的保护机制流(如防止恶意软件生成的流)。
  5. 执行流
    • 根据Colang脚本,执行相应的保护机制流。
    • 流程可能包含以下步骤:
      • 检查输入内容是否涉及敏感或有害主题。
      • 触发事实检查或审核保护机制。
  6. 生成机器人响应
    • 如果识别到输入是恶意的,生成一个安全的响应,例如:
      • "抱歉,我不能帮助你生成恶意软件代码。"
      • 或直接拒绝回答,并记录该事件以供进一步分析。
  7. 动作服务器
    • 动作服务器可能执行额外的本地或外部工具动作,例如记录该输入并发送警报给管理员。
  8. 响应返回用户
    • 经过保护机制处理后的响应通过服务器返回给用户,确保不会提供任何有害信息。

攻击者输入:"如何生成恶意软件代码?"

NeMo Guardrails响应:"抱歉,我不能帮助你生成恶意软件代码。"

通过这个工作流程,NeMo Guardrails确保即使遇到恶意输入,系统也能生成安全的响应,避免生成有害内容。

这种多层次的保护机制包括输入审核、执行保护和输出审核,确保了系统的安全性和可靠性。

NeMo Guardrails 应用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1799283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大小堆运用巧解数据流的中位数

​​​​​​​​​​ 一、思路 我们将所有数据平分成两份,前面那一部分用小堆来存,后面的部分用大堆来存,这样我们就能立刻拿到中间位置的值。 如果是奇数个数字,那么我们就将把中间值放在前面的大堆里,所以会有两种…

SAP ABAP 创建表结构 SE11

目录 一,创建表 :T-code:SE11 二,编辑内容: 1,内容说明:必填项,属性:锁定不可更改 2,出荷と更新 3,項目 A:表的第一个项目必须是…

Flink中因java的泛型擦除导致的报错及解决

【报错】 Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException: The return type of function Custom Source could not be determined automatically, due to type erasure. You can give type information hints by using th…

计算机网络面试基础(一)

文章目录 一、HTTP基本概念1.HTTP是什么?2.HTTP 常见的状态码有哪些?3.http常见字段 二、GET和POST1.get和post有什么区别 三、HTTP缓存技术1.HTTP 缓存有哪些实现方式?2.什么是强制缓存?3.什么是协商缓存?(不太懂) 四…

linux嵌入式设备测试wifi信号强度方法

首先我们要清楚设备具体链接在哪个wifi热点上 执行:nmcli dev wifi list rootubuntu:/home/ubuntu# nmcli dev wifi list IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS > * 14:EB:08:51:7D:20 wifi22222_5G Infr…

【96】write combine机制介绍

前言 这篇文章主要介绍了write combine的机制 一、write combine的试验 1.系统配置 (1)、CPU:11th Gen Intel(R) Core(TM) i7-11700 2.50GHz (2)、GPU:XX (3)、link status&am…

如何有效提问?

有效提问:正确地向别人提问是一种艺术,可以帮助你获得清晰、有用的答案。 明确表达问题:确保你的问题清晰明了,避免含糊不清或模棱两可的语言。这可以帮助对方更好地理解你的问题,并给出准确的答复。 尊重对方&#x…

[第五空间 2021]WebFTP、[HCTF 2018]Warmup

目录 [第五空间 2021]WebFTP ​[SWPUCTF 2021 新生赛]Do_you_know_http [NCTF 2018]签到题 [HNCTF 2022 Week1]What is Web [HNCTF 2022 Week1]Interesting_http [HCTF 2018]Warmup [第五空间 2021]WebFTP 使用dirsearch扫描,发现有git泄露 使用GitHack克隆目…

HBuilderX编写APP一、获取token

一、新建项目 二、从onenet获取key.js 1、下载之后的压缩包,解压 2、关键就是找到key.js 3、将这个key.js复制到刚才的目录下面去 4、这个key.js文件就是生成token的代码 5、只要调用createCommonToken(params)这个函数,就可以实现生成token了 其中on…

小米开放式耳机怎么样?倍思、西圣、小米开放式耳机测评比较!

作为一名热衷于分享真实体验的博主,我在过去两年开始接触开放式耳机,并因此受到许多朋友的咨询,询问哪款开放式耳机更加出色。为了找出最佳的开放式耳机,我进行了深入的调查和实地测试。我发现高价并不总是代表高质量,…

【全开源】Java共享茶室棋牌室无人系统支持微信小程序+微信公众号

打造智能化休闲新体验 一、引言:智能化休闲时代的来临 随着科技的飞速发展,智能化、无人化服务逐渐渗透到我们生活的各个领域。在休闲娱乐行业,共享茶室棋牌室无人系统源码的出现,不仅革新了传统的休闲方式,更为消费…

嵌入式移植jpeglib--Linux交叉编译ARM平台

一 、交叉编译jpeg库 1.下载源码tar.gz 2. 源码目录下执行 jpeglib配置文件 ./configure CCarm-none-linux-gnueabihf-gcc LDarm-none-linux-gnueabihf-ld --prefix/work/jpeg_arm_lib --exec-prefix/work/jpeg_arm_lib --enable-shared --enable-static --hostarm-none-linu…

高考试卷押运车视频监控解决方案

一、引言 高考作为我国教育领域的重要事件,其公正、公平和安全性一直备受社会关注。试卷押运作为高考的重要环节,其安全性直接关系到高考的顺利进行和考生的切身利益。因此,对高考试卷押运车实施视频监控解决方案,对于确保试卷安…

Asp .Net Core 系列:详解鉴权(身份验证)以及实现 Cookie、JWT、自定义三种鉴权 (含源码解析)

什么是鉴权(身份验证)? https://learn.microsoft.com/zh-cn/aspnet/core/security/authentication/?viewaspnetcore-8.0 定义 鉴权,又称身份验证,是确定用户身份的过程。它验证用户提供的凭据(如用户名和…

短视频直播教学课程小程序的作用是什么

只要短视频/直播做的好,营收通常都不在话下,近些年,线上自媒体行业热度非常高,每条细分赛道都有着博主/账号,其各种优势条件下也吸引着其他普通人冲入。 然无论老玩家还是新玩家,面对平台不断变化的规则和…

【第四节】C/C++数据结构之树与二叉树

目录 一、基本概念与术语 二、树的ADT 三、二叉树的定义和术语 四、平衡二叉树 4.1 解释 4.2 相关经典操作 4.3 代码展示 一、基本概念与术语 树(Tree)是由一个或多个结点组成的有限集合T。其中: 1 有一个特定的结点,称为该树的根(root)结点; 2 …

python-df的合并与Matplotlib绘图

1 数据连接 concat merge join (append 作为了解) append 竖直方向追加, 在最新的pandas版本中已经被删除掉了, 这里推荐使用concat 1.1 pd.concat 两张表, 通过行名、列名对齐进行连接 import pandas as pd df1 …

Linux网络编程——概念及实现双方聊天

网络编程的场景: 假设你面前有五座房子(服务器),你要走到其中一座房子的某一间,此时你站在五座房子面前很迷茫,突然,第二座房子上面有人在叫,并且用汉语(TCP/UDP&#xf…

从零开始:疾控中心实验室装修攻略,让你的实验室一步到位!

在当今充满挑战和变化的世界中,疾病的控制和预防成为了人类生存与发展的重要课题。而疾控中心作为防控疾病的核心机构,其疾控中心实验室设计建设显得尤为重要。下面广州实验室装修公司小编将分享疾控中心实验室设计建设方案,为疾病防控工作提…

SpringMVC日期格式处理 分页条件查询

实现日期格式处理: springmvc能实现String类型和基本数据类型及包装类的自动格式转换,但是不能识别String和 日期类格式的自动转换。 实现方式: 1是在实体类上加上注解DateTimeFormat,识别String格式为“yyyy-MM-dd” 2使用自定义…