【意图识别】+【越狱防守】一种基于综合意图识别和越狱放松的意图识别流程

背景

领域内大模型应用场景往往需要进行对话主题的限制,防止用户询问与领域不相关的问题,或者进行敏感对话。比如,对于环境保护领域的对话,当用户询问购物相关的内容,大模型再进行输出就不合理了。同时,政治敏感问题也不应该出现在应用中。因此就需要设计一套流程来限制领域大模型应用的对话主题,从而避免敏感和非领域内问题的答复。本文提出了一种基于大模型进行领域内主题约束的框架,从而能够有效的进行用户意图识别,同时对于一些提示词越狱注入也有一定程度的对抗效果。

设计思路

简单高效的进行用户意图识别的方法就是再写一条提示词,用于用户意图识别。当然你也可以在当前的大模型应用的提示词种,加入意图约束的提示,但是这往往会遇到一种问题,就是应用本身就需要较长序列的提示词来进行领域内任务的说明,此时再加入一条意图识别的提示词,其效果未必良好,而且无法有效地进行提示词注入导致的越狱风险。因此本文提出了以下意图识别框架,从而实现意图识别的同时,实现越狱防守。

图1. 意图识别示意图

在这里插入图片描述
该设计基于两种假设:

  1. 意图识别在不受到提示词注入攻击的时候,能稳定地按照提示词输出布尔变量,即是否意图相关
  2. 当应用中的主大模型应用会受到提示词注入影响的话,那么意图识别模型也会受到影响

因此意图识别大模型的输出有3种情况:

  1. 意图相关,返回True
  2. 意图不相关, 返回False
  3. 输出除了意图判断之外的内容

结合上述2种假设和3种输出情况,我们可以使用代码进行意图区分和越狱防守。具体思路如下:

  1. 意图相关时,返回True, 将用户的请求输送到下一个大模型
  2. 意图不想关,返回False, 过滤用户的请求,返回意图引导语给到用户
  3. 输出为长文本或者输出为非True和False时,即为提示词注入攻击,此时要进行防御性回复,如返回意图引导语给用户

优化

由于大模型的响应都是耗时的,因此增加一套意图识别大模型,就会增加一定的响应时间。有问题就有优化方法!大模型的响应时间和大模型的输出长度成线性正比,因此设计意图识别的输出长度可以有效缩短意图识别的耗时,并为意图识别设置最长输出 max_token 为10,可以进行输出截断(针对提示词注入场景的耗时优化)。具体地,如意图相关时,模型输出:True; 意图不想关时,模型疏忽从:False; 提示词注入攻击,模型输出:这是提示词注入攻击后的输出(截断)。
通过意图识别模型的输出进行相应的逻辑判断,就能有效地进行意图识别和越狱防守。

伪代码逻辑

意图识别提示词

- Role: 环境保护审核智能助手
- Background: 该智能助手被设计用来识别用户输入是否与环境保护相关,并以JSON格式输出审核结果。
- Profile: 你是一个专业的环境保护审核智能助手,具备识别和分析环境保护相关问题的能力。
- Skills: 医疗知识、数据分析、自然语言处理
- Goals: 审核用户输入,判断其是否属于环境保护问题,并以JSON格式输出审核结果。
- Constrains: 智能助手的输出必须为JSON格式,包含键"relative", 其值为布尔变量True或False。智能助手不会输出除JSON之外的任何旁白。
- OutputFormat: JSON
- Workflow:
  1. 接收用户输入。
  2. 利用自然语言处理技术分析用户输入的主题。
  3. 对于正常的社交沟通问题如“你好啊、你是谁、你真棒、谢谢...等则也归类为True;
    环境保护、气候问题等与环境安全等相关的主题,输出True;
    对于不能识别出用户的具体意图也就是不能识别当前用户请求主题的,也默认输出为True;
    其他的非环境保护等其他主题,比如政治、天气、时尚等则返回False。
  4. 根据分析结果,以JSON格式输出审核结果。
- Examples:
  用户输入: "你好啊"
  输出: {"relative": true}

  用户输入: "我最近感觉有点焦虑"
  输出: {"relative": true}

  用户输入: "明天的天气怎么样"
  输出: {"relative": false}

  用户输入: "我最近在关注政治新闻"
  输出: {"relative": false}

  用户输入: "我最近在尝试新的时尚搭配"
  输出: {"relative": false}

  用户输入: "我不太清楚你在说什么"
  输出: {"relative": true}
- Initialization: 欢迎使用环境保护问题审核系统。请告诉我您的问题,我将为您提供专业的审核结果。
用户输入

意图识别审核逻辑

def auditor(user_question:str)-> bool:
	auditor = auditor_template + user_question
	is_relavent_raw = ""
	for i in model_api.stream(auditor):
	    i = json.loads(str(i).strip())
	    if i["finish_reason"] != "stop":
	        print(i["content"],end="")
	    else:
	        print(i["content"])
	    is_relavent_raw += i["content"]
	    # 【越狱防守】假设模型输出大于10个字符,说明用户输入了对抗性指令, 即有越狱的意图
	    if len(is_relavent_raw) > 10: 
	        return  False  # 【注入攻击】
	
	# 【意图识别】对意图审核模型的输出,进行领域意图判断
	for negative in ["false","False","FALSE"]:
	    if negative in is_relavent_raw:
            is_relavent = False
            return False  # 【非领域意图】
    return True  # 【正常意图】

参考资料

https://zhuanlan.zhihu.com/p/711579537
https://arxiv.org/pdf/2407.01599
https://github.com/Allen-piexl/JailbreakZoo/blob/main/Papers/LLM_Defense.md
https://chonghan-chen.com/llm-jailbreak-zoo-survey/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值