正文
Input Guardrails的一个例子
恶意Prompt防护
恶意Prompt的防护,更多的发生在模型层面,但是在应用侧也可以做一些防护辅助;在介绍具体防护前,简单看下几种常见的Prompt Attack(
现在的模型对这块防护能力基本都比较强
):
面向恶意Prompt的防护,可以通过优化系统Prompt结构或者是增强我们的Prompt Template来预防一些常见的攻击方式,比如我们可以在Prompt Template中,在用户query之后,通过重复或者增加系统约束的方式来避免用户恶意输入的Prompt的生效。
恶意Prompt的防护是一场持续的攻防,我们也可以借助一些benchmarks(比如PromptRobust,
PromptRobust: Towards Evaluating the Robustness of Large Language Models on Adversarial Prompts
)和工具(例如
Azure/PyRIT
)来持续增强系统使用的Prompt及模版的鲁棒性。
输出防护是为
质量
和
安全
两方面兜底;
输出内容质量
输出内容质量的问题比较常见的有:
1. 输出的内容格式不对或者错误; 2. 输出结果不实,即有幻觉;3. 输出的内容质量不高,比如文档总结的不好,写个篇偏离主题的小短文等。
面对输出内容质量问题,有一个非常简单有效的策略是
重试
,调用方式可以是
串行
或者是
并行
,比如对于输出延迟敏感的场景,需要针对同一个query并行调用多次,然后通过一定的对比评估方式(程序校验或AI Judge或人工介入)返回一个较优解;不过重试策略有两个弊端:
1. 多次调用模型会增加开销; 2. 针对流式结果输出的交互方式,没有啥效果;(
弊端1是权衡下的额外开销,人为决策即可;弊端2更多需要依赖模型自身的能力提升来解决高质量的输出问题,工程侧能做的不多)。
输出内容安全性
输出内容安全性问题主要有这么几种:
1. 回复内容包含性、暴力、违法内容; 2. 回复内容涉及用户隐私数据; 3. 回复的内容有可执行的恶意脚本; 4. 内容偏见,比如对竞对或其他公司存在有意抹黑或者明显负面的输出内容。
针对安全性问题,应用侧可以做一些辅助解决,方法包括做关键词拦截过滤、结果文案的涉黄涉暴检测等,对于包含在结果内容中可能需要被执行的指令,我们增加一步人为确认或者是开启一个沙箱环境做执行,输出内容安全性是LLM能力的一个核心指标,在LLM自身的训练和评测环节也得到越来越多的重视,作为LLM能力的使用方,更多是做一些防御性的二次保护。