RAG Guardrails 为大猫保驾护航

在开发一个用于一级 ICT 支持的 聊天机器人 时,我遇到了必须以某种方式过滤输入问题和输出回答的需求。

该聊天机器人基于 Cheshire Cat AI(即“大猫”)和一个使用服务卡片及网站上发布的 FAQ 作为数据源的 RAG 系统。实际上,它是从官方文档中为用户提供答案,而不是在网络或基础知识库中搜索。

然而,公共聊天机器人就像一个对所有人开放的窗口:迟早会有人粘贴一篇小说代替问题,有人试图让它忘记指令(所谓的 prompt injection),有人写下自己的身份证号或 IBAN,还有人只是用不太礼貌的语言发泄自己的沮丧。

于是诞生了 RAG Guardrails,这是一个插件,收集了一系列针对这些问题的过滤器(guard),每个都可以单独启用和配置。

换句话说,就是为大猫配备的保镖。

插件工作原理

该插件在问题处理的两个阶段介入,利用 Cheshire Cat AI 的两个 hook,即插件可以插入处理流程的点:

  • 输入阶段(hook fast_reply):这是拦截用户消息的第一个点。如果某个过滤器触发,聊天机器人会立即用一个礼貌的消息回复,消息内容可在后台配置,提示用户重新表述问题或联系帮助台。该问题不会进入文档搜索,不会消耗语言模型的 token,也不会存入聊天机器人的记忆中;
  • 输出阶段(hook before_cat_sends_message):生成的回答在发送前会被检查,如果包含个人数据,则会被替换为一个标准消息,该消息同样可在后台配置。

这些过滤器采用三种不同技术,智能程度和成本依次递增:

  • 纯代码:简单且确定性的检查,如消息最大长度限制;
  • 正则表达式和验证:识别已知模式,如电子邮件地址、电话号码、IBAN、身份证号或试图操纵聊天机器人的典型语句;
  • 分类模型:本地运行的小型 机器学习模型,评估文本含义,捕捉正则表达式无法识别的内容。它们更强大,但 需要更多内存和计算时间,因此默认关闭。

所有回复消息均为双语(意大利语和英语)且可自定义。

插件功能

可用的过滤器有五个,每个属于一个表示其防护风险类型的组:

过滤器 阶段 组别 技术 目的
message_length 输入 限制 代码 阻止超过设定长度(默认1000字符)的消息。
personal_data 输入 隐私 正则表达式和验证 阻止包含电子邮件、电话号码、IBAN或身份证号的消息。
prompt_injection 输入 安全 正则表达式和分类器(可选) 阻止试图修改聊天机器人指令或泄露系统提示的行为。
offensive_input 输入 语气 分类器 阻止侮辱性或暴力的消息。
output_personal_data 输出 隐私 正则表达式和验证 防止包含个人数据的回答发送给用户。

隐私过滤器有一个允许联系人列表,可在后台配置:公开联系方式(例如服务卡片中列出的办公室电话)可以安全地出现在问题和回答中而不会触发警报。帮助台地址始终被视为允许。

安装与配置

该插件已发布在 Cheshire Cat AI 官方插件库中,安装非常简单:只需打开管理面板的 插件 部分,在可用插件中搜索 RAG Guardrails,安装并激活即可。其余工作,包括 Python 依赖,由大猫自动处理。插件设置页面几乎可以配置所有内容:建议用户联系的帮助台地址、允许的公开联系人列表、消息最大长度、要阻止的个人数据类型、回复文本,以及基于模型的过滤器所用模型、激活阈值和运行设备(CPU 或 GPU)。

上线前,务必将占位符地址 helpdesk@example.org 替换为真实地址。

详细信息请参阅 项目 README。

模型管理

使用模型的两个过滤器是 prompt injection(其可选部分)和 侮辱性语言。模型可从菜单中选择,均可在 Hugging Face 上获得:例如,针对 prompt injection,有 Meta 的 Llama Prompt Guard 2,需要接受其许可并在设置中输入 Hugging Face 令牌。

插件本身不包含模型:模型会在首次请求时下载,因此首位用户可能需要等待。所需库(transformers 和 PyTorch)也会在插件激活时由 Cheshire Cat 自动安装,但体积不小。

因此建议准备一个包含插件依赖和(如使用)模型的 Docker 镜像;如果没有 GPU,建议使用仅 CPU 版本的 PyTorch,体积更小。启用 Preload classifiers on plugin activation 选项后,启用的模型将在系统启动时加载,用户无需等待。

最后一点:如果模型加载失败,过滤器会选择放行(fail open),而不是阻断所有请求。宁可让保镖偶尔疏忽,也不愿关闭场所。

 

使用示例

以下是个人数据过滤示例:

这是防止 prompt injection 的示例:

 

侮辱性内容示例:

结论

RAG Guardrails 让我们的虚拟帮助台更稳健:问题消息在进入语言模型前被拦截,个人数据被排除在系统之外,用户仍然能收到礼貌的回复并获知联系方式。

当然,这不是万能方案:它不会验证回答是否正确或基于文档,且足够有创意的用户总能找到绕过过滤的方法。但它是一个简单、经济且易于适应需求的第一道防线,未来还可以添加更多过滤器。

代码开源,采用 GPL v3 许可发布:如果你管理基于 Cheshire Cat AI 的聊天机器人,欢迎试用并告诉我体验如何。

 

来源与参考

*** 注意:本文是通过使用 n8n 和 OpenAI 自动翻译生成的。原文版本为意大利语。

2 days ago

Leave a Reply

Your email address will not be published. Required fields are marked *

评论审核已启用。您的评论可能需要一段时间后才能被显示。