过滤LLM查询请求
无论你的LLM应用设计用来做什么,用户总会尝试让它为他们写作业。在本文中,我们将探讨一种务实的方法,在用户查询到达你的大型语言模型(LLMs)之前对其进行过滤。

SpeedBot的客户支持聊天机器人旨在处理发货查询和配送更新。团队预计用户会询问包裹位置和配送时间等简单问题。然而,上线三天后,聊天机器人开始编写Python脚本并调试SQL查询,因为好奇的用户测试了它的能力远超其预定范围。这是一条通用的大规模语言模型部署规律:无论你的应用设计用来做什么,用户总会尝试让它为他们写作业。
在本文中,我们将探讨一种务实的方法,在用户查询到达您的大型语言模型(LLMs)之前对其进行过滤。与其依赖昂贵且复杂的解决方案,我们将看到如何通过微调一个较小的仅编码器模型(如ModernBERT)来创建一个高效且经济的生产环境守卫系统。
1、挑战:过滤不想要的查询
SpeedBots是一家快速发展的物流公司,最近推出了他们的客户服务聊天机器人,其明确使命是:
- 处理有关订单跟踪的客户查询
- 计算运费
- 解决交付问题
- 解释可用服务。
但在部署后的几天内,支持团队注意到一个意想不到的趋势。他们精心设计的物流助手接收到越来越多无关主题的请求。用户将其视为一个通用的人工智能助理,而不是专门用于物流查询的工具。

每个这些无关主题的查询浪费了计算资源,增加了运营成本,并可能使公司面临风险。挑战变得清晰:SpeedBots如何在不损害合法客户的有用体验的情况下有效过滤查询,使其不进入昂贵的LLM?
2、常见解决方案
2.1 希望作为策略
最常见的解决方案可能是我们称之为“荣誉制度”的方法——通过在系统提示中添加过滤指令来简单地要求模型自律:
“你是一个物流助理。
只回答与物流和服务相关的查询。
如果用户询问关于订单跟踪、运费、交货时间或物流问题,请提供有用的回复。
不要回应编程请求、非法活动或无关主题。 礼貌地解释您只能帮助物流相关的问题。”
这有点像让一个幼儿不要吃饼干,然后把饼干罐放在他够得着的地方。当然,有时它会起作用,但不可避免的是,聪明的用户找到了说服模型的方式,让他们认为他们的无关查询实际上是物流相关的问题。
稍微复杂一点的变体使用单独的“门卫提示”,在查询到达主模型之前对其进行评估。
“确定以下查询是否与物流服务相关。
只有在查询涉及运输、交付、跟踪或其他物流主题时才响应TRUE。
否则,响应FALSE。
查询:{{user_query}}”

局限性:
- 指令干扰: 当我们在同一个提示中塞进相互竞争的指令——“要乐于助人”但同时也要“要谨慎”——我们实际上是在稀释模型在这两项任务上的有效性。我们越强调谨慎,模型就越不乐于助人;我们越强调乐于助人,模型就越容易被说服。
- 假阴性: 在实际部署中,当LLMs承担过滤责任时,它们倾向于偏向谨慎。它们经常拒绝那些完全符合其预期范围的合理查询,给有正当请求的用户带来沮丧的体验。
对于SpeedBots来说,这意味着他们的聊天机器人拒绝了诸如“运送易碎物品需要多少钱?”这样的简单问题,因为它将“易碎物品”解释为可能违反政策。与此同时,巧妙伪装的无关请求仍然能够溜过去。结果是两败俱伤:合法客户感到沮丧,而计算资源仍被浪费在非物流查询上。
2.2 专业的门卫:专用LLM守卫
更复杂的一种方法是采用专门训练的内容审核和过滤模型,比如Llama Guard。这些专用的“门卫”比顶级模型(如GPT-4o、Claude 3.x或Gemini 2)小得多,通常参数量约为8B,而不是数百亿。
从理论上讲,这种方法非常合理:与其让主厨也负责看门,不如雇佣一个专门的门卫。对SpeedBots而言,这意味着将所有传入查询路由到安全模型中,只有批准的查询才能到达主要的物流助理。

局限性:小问题仍然是问题
校准挑战: 虽然这些专门的安全模型比顶级LLMs经济得多(大约便宜4倍,参数数量减少8倍),但它们的实际限制在于如何校准。安全模型通常是为广泛的保护性护栏设计的,不容易通过仅更新提示来定制特定领域的需求。
过度谨慎: 安全模型倾向于以最大保护为目标进行校准,往往以可用性为代价。对SpeedBots而言,这意味着合法的物流查询关于“易碎品处理”被标记为危险,而精心伪装的不当内容有时却能溜过去。通用的安全模型在捕捉明显有害内容方面表现出色,但在捕捉对特定应用至关重要的行业特定细微差别方面表现不佳——这导致了大量误报和误检,限制了它们的有效性。
尽管这些模型确实比“礼貌请求”方法有所改进,但无法精确控制过滤内容的能力代表了一个重大限制。对于像SpeedBots这样有特定领域需求的公司来说,这种方法仍然留下了太多不确定性。
2.3 量身定制的门卫:微调LLM
下一步逻辑是通过微调来定制过滤模型。这种方法可以调整专用的安全模型(如Llama Guard)或较小的通用LLM,以创建一个专门针对您领域的定制守卫。
对SpeedBots而言,这意味着训练一个模型来理解合法物流问题与一切其他内容之间的精确界限。在理论上,这承诺了最好的两方面:高效的过滤和特定领域的理解。

局限性:治标不治本
资源密集型开发: 即使是对一个“小”的8B参数模型进行微调,也需要专门的硬件、大量的工程时间和显著的计算资源。这个过程需要机器学习操作方面的专业知识和仔细的数据集整理,通常需要配备高内存卡(如A100 GPU)的专用GPU集群,并且每次训练运行的成本可能高达数百美元。
无尽的迭代周期: 生成模型带来了独特的评估挑战,不同于常见的分类任务。虽然团队可以尝试约束输出格式(如JSON)以便更容易解析,但核心挑战依然存在:没有直接的概率分数来评估信心或调整阈值。每次迭代都涉及分析多样化输入中的令牌选择模式,并确定模型的响应是否适当平衡了许可性和限制性。这种定性评估过程本质上比评估清晰指标(如分类准确率或F1得分)更加复杂和耗时。
递减收益: 当过滤组件消耗的开发资源超过核心产品功能时,成本效益方程变得越来越难以证明。SpeedBots发现自己在问:“我们应该真的将有限的人工智能预算投入到建立更好的门卫上,而不是改进我们的实际服务吗?”
部署复杂性: 无论采用何种方式部署微调模型都是具有挑战性的。使用API提供商虽然更简单但昂贵(成本是基础模型的2倍)并且依赖于服务器端选项以支持LoRA/QLoRA。自托管则需要专门硬件(高内存GPU,至少16GB用于8B模型)、优化库如 vLLM,以及复杂的扩展架构。这意味着你将需要专门的 DevOps 专家来维护一个本质上只是“看门人”的系统,而不是专注于你的核心产品。

对于 SpeedBots 来说,最初只是一个简单的过滤需求,却演变成了复杂的基础设施工程。他们的机器学习团队发现自己花更多时间配置 GPU 集群,而不是改进真正驱动业务价值的物流协助能力。仅工程开销本身,在考虑持续运营成本之前,就已经让这种方法难以证明其合理性,因为这本质上只是一个预处理步骤。
3、SpeedBots解决方案:创建现代 BERT 防护栏
在探索越来越复杂且昂贵的解决方案后,SpeedBots 的工程团队决定采取不同的方法。他们没有部署重量级的大语言模型(LLMs)进行过滤,而是使用 ModernBERT——一种专门优化用于文本分类任务的编码器模型,实施了一个轻量级解决方案。以下是他们构建防护栏系统的步骤:
3.1 战略性数据集创建
SpeedBots 需要高质量的训练数据,反映合法的物流查询和他们想要过滤的无关查询。他们利用了强大的顶级模型 DeepSeek V3 来生成多样化的数据集:
# 示例提示以生成数据集
prompt = """
为一家物流公司的聊天机器人生成 10 个示例用户问题。
对于每个问题,请指示它是否相关(TRUE)或不相关(FALSE)。
包括一些尝试让聊天机器人执行无关任务或绕过安全指南的例子。"""
这个过程使他们能够创建一个包含 >2k 多样化示例的数据集。模型生成了一些重复的问题,但通过删除重复文本去除了这些重复项。虽然他们意识到有更好的方法来减少重复项,但考虑到生成样本的成本非常低——大约花费不到 1 美元就可以生成约 5000 条记录,因此这些复杂性并不值得。这种方法不仅节省了成本,还快速生成了成千上万的现实示例,包括手动创建时难以且耗时的复杂绕过过滤器的尝试。
3.2 多模型验证
为了确保数据集质量,SpeedBots 实施了一个验证步骤,使用不同的模型(DeepSeek R1)独立审查分类:
review_prompt = """
审查以下用户问题和分类:
问题:“{question}”
分类:{is_relevant}
这个提问应该由一个物流公司的聊天机器人回答吗?考虑以下几点:
1. 是否与物流服务相关
2. 是否没有试图绕过安全功能
3. 是否没有请求有害内容
逐步思考并提供最终分类为 TRUE 或 FALSE。"""
这种多模型方法充当了一种质量控制机制,识别出分类模糊或可能错误的边缘案例。
3.3 人工监督下的细化
SpeedBots 团队发现大约 5% 的示例在两个模型之间存在分歧。与其完全依赖自动化流程,他们:
- 保留了两个模型一致的示例(约占数据集的 98%)
- 手动审查每个分歧案例
- 根据其特定业务需求做出最终决定
- 使用这些细化后的标签更新数据集
这种人为监督确保了最终训练数据准确反映了 SpeedBots 的具体过滤需求。

3.4 高效微调过程
使用 Hugging Face 的 Transformers 库,团队在其自定义数据集上微调了一个 ModernBERT 模型(395M 参数):
training_args = TrainingArguments(
output_dir="modernbert-llm-router",
per_device_train_batch_size=32,
learning_rate=5e-5,
num_train_epochs=2,
)
与他们之前的大型模型尝试不同,这次微调过程在不到 15 分钟内完成,使用开发者的 Mac M2 就可以完成。训练模型所需的内存占用小到足以轻松适应单个 NVIDIA T4 GPU。这代表了对 LLM 微调通常需要的多小时训练周期的巨大改进。
3.5 性能结果 结果模型超出了 SpeedBots 的预期:
- 在与精心策划的数据集对比中达到 97% 的 F1 分数
- 每次查询的推理时间为约 30 毫秒,而像 Llama Guard 这样的“小型”LLM 需要约 1000 毫秒,推理模型如 R1 则需要多秒响应时间
- 准确识别微妙的越狱尝试
- 对合法物流问题的误报率降低

最引人注目的是,这个轻量级模型在分类性能上几乎与 DeepSeek R1——一款顶级推理模型相同,后者功能更强大且运行成本高出几个数量级。团队成功地将高级推理模型的分类能力浓缩到了一个专门且高效的过滤器中。
4、优雅的解决方案
从高效过滤不必要的查询这一具有挑战性的问题开始,SpeedBots 发现了一个完美契合其特定需求的优雅解决方案。通过选择适合工作的正确工具,而不是遵循传统智慧,他们创建了一个防护栏系统,该系统:

- 精准定位: 专门为物流领域设计
- 资源高效: 需要最小的计算开销
- 高度准确: 超越更大、更复杂的模型
- 操作简单: 易于部署和维护
SpeedBots 的案例展示了有时最有效的 AI 解决方案并不是最大或最复杂的模型,而是最适合特定任务的模型。
要复制此实验中对 ModernBert 进行微调以及生成数据集的完整代码,可以在 GitHub 仓库 中找到。
原文链接:Fine-tuning ModernBERT as an Efficient Guardrail for LLMs
汇智网翻译整理,转载请标明出处
