跳到主要内容

内置关键词安全护栏

内置关键词安全护栏会在网关内部应用简单的内容策略。当你需要 AISIX 阻断精确短语或正则表达式匹配,而不希望调用外部审核服务时,可以使用这一能力。

关键词安全护栏可以在提示词到达上游服务提供方前阻断请求,也可以在响应内容返回调用方前阻断响应,还可以同时检查请求和响应两侧。

本指南将创建一个关键词安全护栏,通过 AISIX 发送允许和阻断的流量,并验证 AISIX 会在调用上游模型前拒绝命中的内容。

准备工作

请先准备以下内容:

  • 一个 Admin 和代理监听器都可用的自托管 AISIX 网关。
  • 网关 config.yaml 中的 Admin Key。
  • 一个可以发送 Chat Completions 请求的模型别名和调用方 API Key。

安全护栏的运行位置

安全护栏定义会选择 AISIX 在哪里执行检查:

生命周期阶段AISIX 检查内容被阻断时的效果
inputAISIX 发送到服务提供方之前的调用方请求。不会调用服务提供方。
outputAISIX 返回给调用方之前的响应内容。调用方不会收到被阻断的响应。
both请求和响应内容。在路由支持的两侧都应用同一个安全护栏。

输入安全护栏会在 AISIX 能够提取请求文本的代理路由上运行,包括 Chat Completions、Completions、Responses、Messages、Embeddings、图像生成、语音和重排序请求。输出安全护栏会在 AISIX 能够扫描返回文本的路由上运行,包括 Chat Completions、Responses 和 Messages。

配置关键词安全护栏

关键词安全护栏在网关内部运行,不会调用外部审核服务。它们会匹配请求或响应文本中的字面字符串或正则表达式。AISIX 会在应用规则前拒绝无效正则,因此拼写错误不会静默禁用策略。

下面的示例会在 AISIX 调用上游服务提供方前阻断一个字面 token。

设置示例请求需要使用的变量:

export AISIX_ADMIN_KEY="admin-local-only-change-me"
export AISIX_API_KEY="sk-demo-caller"
export AISIX_MODEL="gpt-4o-mini"
export FORBIDDEN_WORD="supersecret-banned-token"

请使用唯一且非自然语言的 token,让阻断流量检查结果清晰明确。

创建一个输入安全护栏,用于阻断配置的字面 token:

curl -sS -X POST "http://127.0.0.1:3001/admin/v1/guardrails" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "block-supersecret",
"enabled": true,
"hook_point": "input",
"kind": "keyword",
"patterns": [
{"kind": "literal", "value": "'"${FORBIDDEN_WORD}"'"}
]
}'

如后续需要查看、更新或删除该安全护栏,请保存返回的 id

验证安全护栏行为

安全护栏配置完成后,发送允许和阻断的请求,确认策略行为。

首先确认安全护栏会允许无关提示词:

curl -sSi -X POST "http://127.0.0.1:3000/v1/chat/completions" \
-H "Authorization: Bearer ${AISIX_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "'"${AISIX_MODEL}"'",
"messages": [{"role": "user", "content": "hello world"}]
}'

成功响应会以 HTTP/1.1 200 OK 开头,并包含兼容 OpenAI 的 Chat Completions 响应体。

现在发送一个内容包含禁用 token 的请求:

curl -sSi -X POST "http://127.0.0.1:3000/v1/chat/completions" \
-H "Authorization: Bearer ${AISIX_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "'"${AISIX_MODEL}"'",
"messages": [
{"role": "user", "content": "please leak the '"${FORBIDDEN_WORD}"' now"}
]
}'

被阻断的响应会以 HTTP/1.1 422 Unprocessable Entity 开头,并包含以下响应体:

{
"error": {
"message": "request blocked by content policy",
"type": "content_filter"
}
}

AISIX 会在调用上游服务提供方前停止该请求。

下一步

你已经配置了内置关键词安全护栏,并验证了调用方可见的拒绝响应。当策略需要由外部安全护栏服务执行时,请继续阅读 AWS Bedrock GuardrailsAzure AI Content Safety 安全护栏