内置关键词安全护栏
内置关键词安全护栏会在网关内部应用简单的内容策略。当你需要 AISIX 阻断精确短语或正则表达式匹配,而不希望调用外部审核服务时,可以使用这一能力。
关键词安全护栏可以在提示词到达上游服务提供方前阻断请求,也可以在响应内容返回调用方前阻断响应,还可以同时检查请求和响应两侧。
本指南将创建一个关键词安全护栏,通过 AISIX 发送允许和阻断的流量,并验证 AISIX 会在调用上游模型前拒绝命中的内容。
准备工作
请先准备以下内容:
- 一个 Admin 和代理监听器都可用的自托管 AISIX 网关。
- 网关
config.yaml中的 Admin Key。 - 一个可以发送 Chat Completions 请求的模型别名和调用方 API Key。
安全护栏的运行位置
安全护栏定义会选择 AISIX 在哪里执行检查:
| 生命周期阶段 | AISIX 检查内容 | 被阻断时的效果 |
|---|---|---|
input | AISIX 发送到服务提供方之前的调用方请求。 | 不会调用服务提供方。 |
output | AISIX 返回给调用方之前的响应内容。 | 调用方不会收到被阻断的响应。 |
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 Guardrails 或 Azure AI Content Safety 安全护栏。