在开发一个用于一级 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 的聊天机器人,欢迎试用并告诉我体验如何。
来源与参考
- Cheshire Cat AI,官方网站。
- Cheshire Cat AI,1.9.2 版本仓库(本插件针对该版本开发)。
- RAG Guardrails,GitHub 仓库。
- Llama Prompt Guard 2,用于 prompt injection 的模型之一,托管于 Hugging Face。
- Uptime Kuma Connector for the big cat,我在本博客中介绍的另一个 Cheshire Cat 插件。
*** 注意:本文是通过使用 n8n 和 OpenAI 自动翻译生成的。原文版本为意大利语。


