跳到主要内容

利用 AI 网关护栏(Guardrails)在网关层面强制执行内容策略

·阅读时长 6 分钟
Tomu Hirata
Databricks 软件工程师

随着生成式 AI (GenAI) 应用进入生产阶段,问题从“我们能构建它吗?”转变为“我们可以信任它的输出吗?”大语言模型 (LLM) 功能强大但不可预测:它们可能会产生有害内容、泄露个人身份信息,或以难以预料且事后难以补救的方式违反组织政策。将安全检查强行附加到各个应用程序意味着逻辑重复、执行不一致,并且在新的服务绕过规则时会出现监管漏洞。

MLflow AI 网关在即将发布的 3.12 版本中支持护栏 (Guardrails):这是一种在网关层执行的可配置内容策略,在请求到达 LLM 之前或响应到达用户之前生效。由于护栏在网关中运行,它们可以一致地应用于通过该网关的所有应用程序,且无需更改任何应用程序代码。

护栏的工作原理

每个护栏都会根据一套自然语言指令评估传入的请求或传出的响应。当护栏判定内容违反策略时,网关要么拦截 (Block) 该请求,要么在允许内容通过之前对其进行清洗 (Sanitize/脱敏)

流水线流程如下所示

Request  →  Before Guardrails  →  LLM  →  After Guardrails  →  Response

前置 (Before) 护栏:筛选传入请求。它们非常适合在消耗任何 Token 之前捕获提示词注入 (Prompt Injection)、用户输入中的个人身份信息 (PII) 或离题查询。

后置 (After) 护栏:在 LLM 的响应到达调用方之前对其进行评估。可用于毒性过滤、检测生成的输出中的 PII,或执行品牌和语气要求。

同一端点上的多个护栏按顺序执行。如果某个护栏拦截了请求,则同一阶段中的后续护栏将被跳过。

护栏类型

内置护栏类型预置了说明,以便您快速上手。由于指令是纯文本,您可以随时对其进行编辑,以收紧或放宽策略、添加特定领域的上下文或处理您用例中特有的极端情况——无需更改代码,只需更新提示词即可。

类型描述默认阶段
安全性 (Safety)检测有害、冒犯性或有毒内容后置 (筛选 LLM 响应)
PII 检测检测姓名、电子邮件、电话号码和其他个人信息前置 (筛选传入请求)
自定义护栏空白模板:编写您自己的名称和指令您的选择

选择内置类型会在创建向导中预填名称和指令。您可以由此进一步优化提示词,以匹配贵组织的具体政策——例如,将 PII 护栏限制为仅标记病历号码,或调整安全护栏以允许某些通用分类器通常会拦截的技术术语。

创建护栏

护栏按端点进行配置。导航至 AI Gateway > Endpoints,打开一个端点,然后选择 Guardrails 选项卡。

Guardrails tab showing empty state

点击 Create Guardrail 打开向导。第一步要求您选择类型。

Create Guardrail modal showing type picker with Safety, PII Detection, and Custom options

第二步允许您配置护栏的各个方面。

Create Guardrail configuration step showing Name, Stage, Instructions, Guardrail Model, and Action fields

名称 (Name):描述性标签,显示在护栏表格中,并在护栏拦截请求时包含在错误响应中。

阶段 (Stage):前置或后置。切换阶段会自动更新指令编辑器中的内容变量引用 ({{ inputs }}{{ outputs }}),确保其正确无误,无需手动编辑。

指令 (Instructions):用自然语言描述要查找的内容以及如何响应。引用 {{ inputs }} 代表传入请求,引用 {{ outputs }} 代表 LLM 响应。指令必须至少包含一个内容变量。以下是后置阶段自定义毒性检查的示例:

You are a toxicity detector. Review the LLM response below for any harmful,
offensive, or hateful language. Reply with a JSON object:

{
"rationale": "Brief explanation of your decision.",
"result": "yes if the content is safe, no if it is harmful"
}

<response>{{ outputs }}</response>

护栏模型 (Guardrail Model):用于评估护栏的 AI 网关端点。您可以使用更便宜、更快的模型进行策略执行,并将您的主模型留给实际工作负载。当前端点将从列表中排除,以防止循环依赖。

操作 (Action):护栏触发时发生的操作。

  • 拦截 (Block):请求被拒绝,返回 HTTP 400 响应。响应体包含护栏名称和理由,以便调用方确切知道原因。
  • 清洗 (Sanitize):被标记的内容被脱敏或屏蔽,随后清洗后的请求或响应继续通过流水线。

点击 Create Guardrail 保存。护栏将立即对该端点的所有流量生效。

拦截的效果

当护栏的操作设置为“拦截”且检测到违规时,调用方会收到一个 HTTP 400 响应,其中包含结构化的错误体,内含护栏名称和理由:这些可操作的上下文信息供客户端进行记录、展示给用户或用于触发替代处理逻辑。

Query endpoint dialog showing a PII Detection guardrail blocking a request containing a phone number, returning a 400 Bad Request with a detailed rationale

管理护栏

点击护栏表格中的任意一行将打开详细信息面板,您可以在其中更新阶段、指令、护栏模型或操作。更新是原子化保存的:更改将注册为新的评分器版本,并替换端点上的护栏,而不会中断任何正在进行的请求。

要删除单个护栏,请打开其详细信息面板并点击 Delete。要同时移除多个护栏,请勾选表格中的复选框,并使用工具栏中的 Delete 按钮。

入门

护栏功能包含在 MLflow 中,可通过 AI 网关 UI 使用。

pip install mlflow
mlflow server

打开 MLflow UI,导航至 AI Gateway > Endpoints,并将护栏添加到任何统一端点。有关完整的配置详细信息,请参阅 网关文档


护栏是 MLflow AI 网关治理层的最新补充,与预算策略使用情况跟踪一道,为团队提供对其 LLM 流量的完全可见性和控制力。如果您遇到任何问题或有反馈,请在 MLflow GitHub Issues 上提交报告。

在 GitHub 上为我们点星 — 支持该项目!