在大模型前的安检门
PromptSentinel 是一个纯开源、可自托管、数据不出域的 LLM 提示词安全防护平台:进模型前验输入、出模型前验输出,并对系统提示词做防泄露加固与逃逸检测。Python / Java / Go / JavaScript 四语言地道接入,业务端零额外依赖。
1.0
召回率 recall
0.0
误报率 FPR
0.05ms
p50 延迟
Apache-2.0
开源许可
四道防线 · 纵深互补
① 加固写法
构建期
指令层级 + 不复述条款 + 外部内容隔离 + 注入唯一 canary 哨兵。降低被套出概率。
② 输入检测
请求时
注入短语启发式 + 受保护标识符;不可信外部内容用更严阈值,正面应对间接注入。
③ canary 逃逸
返回前
输出含 canary = 系统提示词逐字泄露,确定性拦截、零误报。
④ 标识符检测
返回前
输出含 Action ID/schema 等 = 改写复述泄露;另加 PII/secrets。
方法论 · 三层纵深防御
提示词层(加固)
把安全规则写进系统提示词最高优先级段;概率性预防。
检测层(本服务)
输入/输出安检门 + canary;确定性兜底 + 可选 ML/LLM 语义增强。
架构层(平台)
最小权限、只读/RLS、egress 管控、HITL —— 硬边界,本服务不替代。
对齐 OWASP LLM Top 10 (2025)
| 编号 | 威胁 | 对应防线 |
|---|---|---|
| LLM01 | 提示词注入(直接/间接) | ② 输入检测 |
| LLM02 | 敏感信息泄露 | ④ 标识符 + 输出 PII |
| LLM05 | 不当输出处理 | 输出检测 |
| LLM06 | 过度代理 | 架构层兜底 |
| LLM07 | 系统提示泄露 | ① 加固 + ③ canary |
诚实边界:提示词层与检测层是纵深防御的概率性环节,可被语义改写/对抗后缀绕过,不能根治注入。受控语料指标 ≠ 真实对抗能力(本门户的 LLM 红队即实证可绕过)。越权与数据外泄等硬指标必须由架构层兜底。
① 构建期 · 加固系统提示词 + 种 canary
canary 会自动用于下方③输出检测
② 请求时 · 输入检测(进模型前)
② 输入
③ canary
④ 标识符
输出 PII
③④ 返回前 · 输出检测(canary 逃逸 + 标识符 + PII)
标准接入 · 三步流程
① 构建期
build → hardened + canary(存好)
→
② 请求时
screen/input → 不通过返 refusal,不调模型
→
调用大模型
system = hardened_system_prompt
→
③ 返回前
screen/output(带 canary) → 返回 text
五步上手(各团队各自部署)
复制工程
把
service/ 复制到你团队仓库改一个文件
sentinel.config.yaml 填团队名与受保护标识符自检
python -m app.selfcheck 全 PASS部署容器
docker compose up -d,改 yaml 后 restart 即生效接入链路
用 SDK 或纯 HTTP 三步调用
四语言一致的
guard() 三步 helper# pip install -e sdks/python from promptsentinel import Client c = Client("http://localhost:8000") out = c.guard( user_input="查设备状态", call_model=lambda system: my_llm(system, "查设备状态"), ) print(out.text) # 放行原文 或 拒绝话术
本门户的前端正是该模式的活样例:浏览器只调本 BFF 的
/api/*,由 BFF 服务端代理到 Guard —— Guard 地址与凭证不暴露给浏览器。实时 Benchmark · 在运行中的 Guard 上回放红蓝对抗语料
把内置语料(攻击 + 良性,含易误报控制样本)逐条发给运行中的 Guard,现场计算指标。数字真实、可复现。
威胁模型对齐评测 · 公开数据集按防线映射
关键:不要只看一个通用注入集。把公开集映射到 PromptSentinel 的各条防线——主线是"系统提示/密钥套取"(gandalf)。下表均为确定性基线(零 ML)在公开集上的真实召回,对照自家过拟合指标。
加载中…
公开评测数据集 · 用真实对抗数据替代自家语料
内置 36 条语料只用于冒烟/演示(规则按它手写 → 过拟合,不能当真实效力)。要评估真实防护力,应在下列公开数据集上跑分(自托管、可离线)。按防线分组:
| 数据集 | 侧重防线 | 规模(约) | 说明 |
|---|---|---|---|
| deepset/prompt-injections | ② 注入 | ~660 | 注入/良性二分类,多语言;最直接,适合 ② 分类评测 |
| Lakera PINT | ② 注入 | ~3k | 注入基准,含"硬良性"样本专测误报(防过拟合) |
| Lakera/gandalf | ②①③ 套取 | ~1k | 来自 Gandalf 游戏的"诱导无视指令/套取"提示 |
| TensorTrust | ② 注入攻防 | 数万 | 提示词提取 + 劫持的攻防对(众包游戏) |
| In-the-Wild Jailbreak | ② 越狱 | ~1.4k 越狱 | 真实世界收集的 DAN 类越狱(TrustAIRLab,"Do Anything Now") |
| JailbreakBench | ② 越狱基准 | 100 behaviors | 标准化越狱基准 + 产物/judge,可比对 |
| HarmBench | ② 自动红队 | 数百 behaviors | 标准化自动红队/拒答评测框架 |
| AdvBench (GCG) | ② 对抗后缀 | 520 | 有害行为 + 对抗后缀攻击源(测确定性规则的盲区) |
| HackAPrompt | ② 注入/越狱 | ~60 万 | 全球竞赛众包,规模最大、攻击花样最杂 |
| Meta CyberSecEval | ② 注入套件 | — | 含 prompt-injection 测试集(PurpleLlama) |
| garak | ② 漏洞扫描 | 探针套件 | 非数据集:直接对你的端点跑注入/泄露探针 |
| ai4privacy/pii-masking-200k | ④ 输出 PII | 20 万 | 评测输出端 PII 检测/脱敏(对应防线④) |
| ToxicChat | ②④ 越狱/毒性 | ~1 万 | 真实对话,带 jailbreak 标注 |
⚠️ 越狱/有害行为类数据集含有害内容,仅用于评测检测器,不得用于生成有害内容;务必遵守各数据集许可与使用条款。链接以各官方仓库为准,可能随上游更新而变化。
评测方法论(避免再次"自己考自己")
按防线分集
② 注入/越狱、④ 输出 PII/泄露、①③ 系统提示词提取分别取对应数据集。
回放 + 分集报指标
把样本过 Guard,报 per-dataset recall(攻击拦截)/FPR(良性误拦)/F1/延迟。
Shadow 量真实 FPR
先只记录不拦截,用真实良性流量量误报,再定阈值/精简词表(如去掉
schema 这类常见词)。勿在评测集上调参
规则/阈值不能按评测集 tune,否则又是过拟合;留出 holdout。
对比 ML 层
开
use_llm_guard(llm-guard / Prompt Guard 2),与确定性层同集对比,量语义鲁棒性增益。持续红队回灌
python -m redteam.llm_redteam 发现的绕过样本固化进语料,定期回归。落地建议:用
redteam/corpus.py 的同款 schema 写一个 load_dataset() 适配器,把上述数据集映射成 {label, surface, text},即可复用现有 benchmark/遥测管线在公开集上跑分。监控遥测 · 安检门的黄金信号(Golden Signals)
面板数据来自本 BFF 对每次 screen 调用的进程内埋点(只记判定元数据,绝不记录正文/凭证)。这是「如何在大模型前给安检门做可观测」的方法论范例 —— 生产应导出到 Prometheus/OpenTelemetry。
放行 vs 拦截
触发原因 Top(reason 分类)
最近全链路追踪 · 点击回放(追踪 → 指标闭环)
暂无追踪。去「实时 Demo」验输入/验输出会产生 trace。
判定时间线(最近 ·绿=放行 红=拦截)
近期事件(不含正文)
| 时间 | 阶段 | 来源 | 判定 | risk | 原因 | ms |
|---|