Lakera Guard
Lakera 安全护栏使用 Lakera Guard 检查内容。Lakera Guard 是面向提示词注入、越狱、内容策略和 PII 的托管检测服务。AISIX 会把会话文本发送给 Lakera,并根据返回结果执行策略:
- 提示词注入、越狱或内容策略命中会以
422 Unprocessable Entity阻断请求或响应。 - 如果只命中 PII,AISIX 会进行脱敏而不是阻断:根据 Lakera 返回的 offset,将每个命中片段替换为
[MASKED EMAIL]这类脱敏占位符,然后继续处理流量。
你的 Lakera 策略会控制运行哪些检测器,以及什么情况算违规。AISIX 会执行所配置 project 或账号默认策略返回的结果。
本指南将介绍如何创建 Lakera 安全护栏,并验证注入阻断和 PII 脱敏。
前提条件
开始前请准备:
- 阅读安全护栏行为,了解钩子点、执行模式和远程故障处理方式。
- 以下配置路径之一:
- AISIX Cloud,其中包含环境、已接入的网关和具有写权限范围的 Admin Token。对于 On-Premises,请按照 AISIX Cloud 快速入门操作。如需申请混合云访问权限,请联系 API7。
- 加载声明式
resources.yaml文件的开源 AISIX 网关。
- 可发送 Chat Completions 请求的模型别名和调用方 API Key。
- 一个 Lakera API Key,以及可选的、其策略需要执行的 Project ID。
curl。AISIX Cloud 路径还会使用jq。
创建 Lakera 安全护栏
以下示例使用一个 Lakera Project 筛查调用方请求。请选择一种配置路径,再使用通用验证步骤。
导出两种路径都会使用的网关和模型服务提供方参数:
# AISIX_PROXY 不含尾部斜杠或端点路径
# 本地快速入门使用 http://127.0.0.1:3000。
export AISIX_PROXY="YOUR_AISIX_GATEWAY_URL"
export AISIX_API_KEY="YOUR_CALLER_API_KEY"
export AISIX_MODEL="gpt-4o-mini"
export LAKERA_API_KEY="YOUR_LAKERA_API_KEY"
AISIX Cloud
导出控制平面连接参数:
# AISIX_CP 包含 /api,且不含尾部斜杠
# 本地私有化部署快速入门使用 http://localhost:8080/api
export AISIX_CP="YOUR_AISIX_CLOUD_ADMIN_API_URL"
export AISIX_TOKEN="YOUR_ADMIN_TOKEN"
export ENV_ID="YOUR_ENVIRONMENT_ID"
在环境中创建一个输入安全护栏并获取其 ID:
GUARDRAIL_ID=$(curl -sS -X POST "$AISIX_CP/environments/$ENV_ID/guardrails" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "lakera-input-screen",
"enabled": false,
"hook_point": "input",
"fail_open": false,
"kind": "lakera",
"config": {
"api_key": "'"${LAKERA_API_KEY}"'",
"project_id": "project-xxxxxxxx"
}
}' | jq -r '.guardrail.id')
❶ input 会在 AISIX 把请求发送到上游前检查调用方请求,通常用于注入检测。可使用 output 或 both 同时检查模型响应。对于流式模型响应,请参见流式输出。
❷ fail_open: false 表示 Lakera 失败或超时时阻断请求。这是默认值。
❸ project_id 会将调用限定到某个 Lakera project,以应用选定策略。省略时使用账号默认策略。
该安全护栏默认调用 https://api.lakera.ai/v2/guard。如有需要,可在 config 中设置 endpoint,指向区域端点或自托管 Lakera 部署。
将安全护栏附加到环境,使其应用到环境中的所有流量:
curl -sS -X POST "$AISIX_CP/environments/$ENV_ID/guardrails/$GUARDRAIL_ID/attachments" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"scope_type": "env",
"enabled": true
}'
❶ env Scope 覆盖环境中的每个请求,并省略 scope_id。如需把安全护栏限定到单个资源,请使用 model、api_key 或 team,并提供对应的 scope_id。
Attachment 存在后启用安全护栏:
curl -sS -X PATCH "$AISIX_CP/environments/$ENV_ID/guardrails/$GUARDRAIL_ID" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{"enabled": true}'
启用后的配置会自动投射到已接入的网关。
开源 AISIX 网关
在已定义示例模型和调用方 API Key 的资源文件中添加安全护栏。示例从 LAKERA_API_KEY 读取凭证。已经运行的快速入门容器不会继承之后才在主机上导出的变量。
guardrails:
- name: lakera-input-screen
enabled: true
hook_point: input
fail_open: false
kind: lakera
api_key: ${LAKERA_API_KEY}
project_id: project-xxxxxxxx
guardrail_attachments:
- guardrail_id: lakera-input-screen
scope_type: env
priority: 100
模型服务提供方字段直接位于安全护栏条目下,而不是 config 下。省略 project_id 会使用账号默认策略。网关需要调用区域端点或自托管 Lakera 部署时,请设置 endpoint。
安全护栏只在 Attachment 指定的范围内生效:请添加 guardrail_attachments 条目引用它,否则它虽然会被加载,但不会检查任何流量。重新加载或重建网关前,请验证完整文件。扩展开源快速入门时,请按照重新加载资源文件操作,只在验证成功后重建容器,并传入额外凭证变量。