主流开源 LLM 安全护栏库 LLM Guard 已正式归档不再维护,近一年半内该领域头部厂商相继被大厂收购。文中对比了各替代方案的许可证与定价,对在项目中选型 AI 安全护栏有直接参考价值。
如果你现在去访问 protectai/llm-guard,GitHub 会向你展示一条只读公告。该仓库于 2026 年 7 月 9 日进入归档状态,最后一次提交发生在前一天,README 直言代码和 Hugging Face 模型都已不再维护。它在 MIT 协议下发布了 15 个输入扫描器和 20 个输出扫描器,收获了 3200 颗 star,至今仍位于大多数你能找到的"最佳 LLM 护栏"盘点前列。

在它被写入 requirements 文件之前值得先确认一下。我深入研究了它的替代品,并撰写了完整对比(所有许可证和价格均已在供应商官网核实),发布在 DevToolLab 上。以下是精简版。
Protect AI 维护着 LLM Guard,而 Palo Alto Networks 在 2025 年 7 月 22 日完成了对 Protect AI 的收购。看这个日期的两侧,一个模式很快浮现出来。Check Point 于 2025 年 9 月 16 日收购了 Lakera,据报道交易金额约 3 亿美元。Palo Alto 于 2026 年 4 月 30 日宣布收购 Portkey。OpenAI 于 2026 年 3 月 9 日收购了 promptfoo。
在约一年半的时间里,这个领域几乎每一个独立供应商都变成了某个更大安全平台的功能。LLM Guard 的能力并没有消失——它们迁移到了 Palo Alto 的商业 AI 安全模块中,而免费库则停止了提交。
"护栏"(Guardrails)一词被用在了三个不同的问题上,选错工具是大多数团队浪费一个冲刺周期的原因。
输入护栏位于模型前方,筛查到达的内容:注入攻击、越狱破解、超出许可的话题、你不想流出网络的个人数据。这是对抗性攻击面,因为攻击者可以任意选择这段文本。
输出护栏筛查返回的内容:有毒内容、泄露的个人数据、与检索来源不符的声明、格式错误的结构。完全不同的失败模式,因为这里是模型本身行为不当。
红队演练根本不是过滤器。它是你在发布前在 CI 中运行的对抗性测试套件。把它当作运行时控制来对待,就会得到一份干净的安全报告,而生产环境实际上没有任何保护。
预期会需要全部三个。预期它们是三个独立的工具。
2025 年版的 OWASP LLM 应用 Top 10 将提示注入列为 LLM01,连续第二次位居榜首。
它无法被修补掉有一个结构性的原因。指令和数据通过同一通道到达,没有任何标记区分哪个是哪个,所以内容可以被解读为命令。SQL 用绑定参数解决了这个问题。对于 prompt 来说,还没有等价的基础原语。
EchoLeak 是值得研读的真实案例。作为 CVE-2025-32711 追踪,CVSS 评分 9.3,由 Aim Security 于 2025 年 6 月发现,文档记载这是首个实际被利用于生产 LLM 产品的零点击提示注入。

攻击载体是一封看起来普普通通的电子邮件,其中包含藏在 HTML 注释中或以白色文字写在白色背景上的指令。无需任何点击。当收件人之后向 Microsoft 365 Copilot 询问完全不同的事情时,检索将该消息拉入上下文,埋藏的文本被当作指令处理。成功达成目的需要堆叠多种绕过:穿透微软的跨提示注入分类器、绕过使用引用式 Markdown 的链接重定向、通过自动获取的图片、最后经由内容安全策略已经信任的 Teams 代理传出。微软在服务端修复了这个问题,报告称未发现野外利用。
注意有效载荷是从哪里进入的。不是聊天框。监控用户输入的分类器根本看不到它。
Simon Willison 于 2025 年 6 月 16 日提出了这个有用的心智模型:致命三要素。私有数据访问、不受信任内容暴露、外部通信。任意两个同时出现都还能存活。一个会话中三者齐备,意味着控制不受信任内容的人可以读取你的私有数据并将其发送到某处,完全不需要写一行漏洞利用代码。
这之所以能打败任何检测器,是因为它是确定性的。你可以保证一种架构,却无法保证一个概率。砍掉一条腿,你就消除了那种能力而不是降低了概率,而且零运行时成本。下面所有内容都建立在这个决策之后,而不是替代它。
这里有五个选项是真正开源并运行在你控制硬件上的。
NeMo Guardrails 截至 2026 年 7 月 1 日处于 v0.23.0 版本,Apache 2.0,约 6900 颗 star,提交仍在进行。需要提醒一下 URL:NVIDIA/NeMo-Guardrails 现在重定向到 NVIDIA-NeMo/Guardrails。这是其中设计最 opinionated 的,将执行拆分为输入、对话、检索、执行和输出多个阶段,策略通过名为 Colang 的 DSL 表达。那些检索护栏正是筛查 RAG chunk 的正确位置,而这正是 EchoLeak 突破的缺口。代价:Colang 是一门需要学习的语言,而且某些护栏类型每个请求都会触发一次 LLM 调用。如果某个盘点文章为它引用了"低于 100ms GPU 加速"的数字,要持怀疑态度,因为该仓库根本没有发布任何延迟基准。
Guardrails AI 于 2026 年 6 月 4 日达到 v0.10.2,Apache 2.0,约 7300 颗 star。这里的单元是验证器,每个风险一个,你可以将它们组合成围绕一次调用的 guard。适合字段级输出验证,且易于一次引入一个验证器。只是在部署前要阅读每个验证器,因为有好几个会向外调用模型而不是在本地计算。
Presidio 截至 2026 年 7 月 22 日为 2.2.364 版本,MIT,约 10400 颗 star,它只做 PII:在文本、图像和结构化数据中查找、屏蔽、匿名化,完全离线。

这个项目也迁移了,但走向与文中其他所有项目相反。microsoft/presidio 现在 301 重定向到 data-privacy-stack/presidio,因为该项目正在微软支持下成为一个供应商中立组织的社区拥有财产。许可证保持 MIT,版权行现在归于 Presidio Contributors。真正会破坏你构建的变更:镜像现在在 ghcr.io/data-privacy-stack/presidio-*,所以去 grep 一下硬编码的 mcr.microsoft.com 拉取。当这个市场的付费端被安全巨头吞并时,最好的开源 PII 工具逃离了(微软的掌控)。
Llama Prompt Guard 2 是你自己托管的分类器,对注入和越狱尝试两方面将提示标注为良性或恶意。86M 构建基于 mDeBERTa-base,22M 构建基于 DeBERTa-xsmall,延迟和计算量减少约 75%。把许可证搞正确:那些基础模型是 MIT 的,但 Meta 自身以 Llama 许可证在门控下载后面发布 Prompt Guard 权重,这不是一回事。我喜欢的是模型卡的诚实,它报告了在英语上 0.998 的 AUC 和在 1% 假阳性率下 97.5% 的召回率,然后承认实际攻击预防率是 81.2%(在 3% 效用损失下)。这个差距是文档中最有用的数字。它也plainly说明了它的局限性:512 token 窗口,22M 变体没有多语言预训练,并承认人们会专门构建攻击来击败它。
promptfoo 覆盖红队演练,MIT,约 24000 颗 star,提交每日进行。它的红队模式生成对抗性提示,涵盖注入、越狱、PII 泄露、SSRF、SQL 注入、过度代理和幻觉,然后告诉你哪些漏过了。把它放进 CI。OpenAI 的收购意味着路线图不再独立,尽管 MIT 和公共代码库控制住了风险。
Bedrock Guardrails 的定价令人耳目一新地简单,因为 AWS 单独发布每个策略,而且你只为开启的部分付费。文本单元上限为 1000 字符。
内容过滤器文本部分每 1000 文本单元 0.15 美元,图像每张 0.00075 美元。拒绝话题每 1000 单元 0.15 美元。敏感信息过滤器每 1000 单元 0.10 美元,用正则表达式表达则免费。单词过滤器免费。上下文 grounding 检查每 1000 单元 0.10 美元。Automated Reasoning 检查每个策略每 1000 单元 0.17 美元。
有两点很突出。在这个领域里,最便宜又有用的控制手段是手写的拒绝列表,因为词语过滤器和正则 PII 过滤器不计费。而接地检查(grounding checks)—— RAG 流水线捏造事实的直接解药——比内容过滤器更有性价比。
打开开关之前先算笔账。一百万请求/月,800 字符的提示词和 1,600 字符的回复,相当于每个请求 3 个文本单元。双向过滤的话就是 300 万单元,$450。输入侧仅加主题拒绝,$150。输出侧加 PII 过滤,$200。一个月 $800,具体是预算内还是意外超支,取决于有没有人提前做过这个乘法。
Azure 的定价方式不同,把文本审核、提示词护盾(Prompt Shields)、接地检查和受保护材料检测打包成一个费率。

免费额度每月 5,000 条文本记录和 5,000 张图片,超额后直接停止而不是悄悄计费。标准版 $0.38/千条文本记录,$0.75/千张图片,在美国中部以美元计费。每条记录最多覆盖 1,000 个 Unicode 码点。
哪个更便宜取决于你的策略数量,因为 Azure 的 $0.38 已经包含了 Bedrock 需分别计费的 $0.15 + $0.10 + $0.10 的全部内容。一两项策略的话 Bedrock 划算。策略一多就可能 Azure 更合算。费率因区域而异,请自行核查。
商业侧,Lakera Guard 仍是最知名的专用提示词防火墙,现已被整合进 Check Point(2025 年 9 月交易),所以在假定旧定价仍然有效之前先问清楚打包方式。Protect AI 的 Guardian 和 Recon 及其红队层现已在 Palo Alto 的 Prisma AIRS 中——LLM Guard 的商业功能归宿。
默认配置会破坏你的脱敏
PII 剥离是所有护栏中规格最不模糊的一项,所以这是我真的去测量而不是凭信任的一项。每个人的第一个版本都是一堆正则表达式。以下是 Presidio 2.2.364 配合 spaCy 3.8.15 处理一条合成工单的效果,开箱即用:
from presidio_analyzer import AnalyzerEngine
from presidio_analyzer.nlp_engine import NlpEngineProvider
from presidio_anonymizer import AnonymizerEngine
TICKET = (
"Hi, this is Marcus Delgado from Cleveland. My order never arrived. "
"You can reach me at marcus.delgado@northgate-supply.com or (216) 555-0142. "
"I paid with card 4111 1111 1111 1111 and my SSN on file is 401-55-9302. "
"The request came from 198.51.100.24 if that helps."
)
provider = NlpEngineProvider(nlp_configuration={
"nlp_engine_name": "spacy",
"models": [{"lang_code": "en", "model_name": "en_core_web_sm"}],
})
analyzer = AnalyzerEngine(nlp_engine=provider.create_engine(), supported_languages=["en"])
anonymizer = AnonymizerEngine()
results = analyzer.analyze(text=TICKET, language="en")
print(anonymizer.anonymize(text=TICKET, analyzer_results=results).text)
正则表达式能抓到五个结构化标识符:邮箱、电话、SSN、卡号、IP。Presidio 全部抓到了,还额外识别出了 PERSON 类型的 "Marcus Delgado" 和 LOCATION 类型的 "Cleveland"——这才是用真实引擎的原因,因为没有任何模式能识别出人名。
它还会返回你没有要求的东西。marcus.de 以 0.5 的置信度被标记为 URL,因为 .de 是一个藏在邮件地址里的真实 TLD。数字 1111 被分类为 DATE_TIME,置信度 0.85。字面量 token "SSN" 被标记为 ORGANIZATION,置信度也是 0.85。最后这个不是小问题,因为它把输出搞坏了:
Hi, this is <PERSON> from <LOCATION>. My order never arrived. You can reach me
at <EMAIL_ADDRESS> or <PHONE_NUMBER>. I paid with card <CREDIT_CARD> and my
<ORGANIZATION> on file is <US_SSN>. The request came from <IP_ADDRESS> if that helps.
"My <ORGANIZATION> on file" 是客户会读到的 bug。用两个参数修复它:指名你真正想要的实体,并设置一个置信度门槛:
ENTITIES = [
"PERSON", "LOCATION", "EMAIL_ADDRESS",
"PHONE_NUMBER", "CREDIT_CARD", "US_SSN", "IP_ADDRESS",
]
results = analyzer.analyze(
text=TICKET, language="en", entities=ENTITIES, score_threshold=0.4,
)
七条发现,全部正确,文本干净。两条注意事项:我用的是 en_core_web_sm 以保持下载体积小,而 Presidio 真正想要的是 en_core_web_lg;另外 PHONE_NUMBER 得分恰好是 0.4,正好在临界线上——这是你自己的信号,应该用你自己的数据来调优这个门槛,而不是照搬我的。完整报告里有两次运行的并排对比和每条分数。
可迁移的教训:任何用默认配置且没有设置阈值的护栏都会产生误报,而在脱敏路径上,误报是一个交付的 bug,不是安全收益。
对话型应用配合话题规则,选 NeMo Guardrails 并使用检索护栏(retrieval rails)。字段级输出验证,选 Guardrails AI,一次一个验证器。硬性要求个人数据绝不离开你的网络,用自托管的 Presidio 配合显式实体列表。想要自己的注入分类器,Llama Prompt Guard 2 选一个延迟预算内能接受的尺寸,让负责审合同的人过一遍许可协议。已经在 Bedrock 上的,先把免费的词语和正则过滤器打开,量过之后再加付费策略。完全没有对抗测试的话,在 CI 里跑 promptfoo,因为知道哪些攻击能成功,比拥有一个无法评估的过滤器要强。如果 LLM Guard 已经在你的 requirements 文件里,Guardrails AI 加上 Presidio 能覆盖大部分你原本在用的功能。
一个有效的推行顺序
先从审计致命三要素开始,因为砍掉一条腿胜过这里列出的所有工具,而且运行时零成本。然后把文本进入上下文窗口的每条路径写下来,不只是提示词字段,还要记住 EchoLeak 是通过检索到的邮件进来的。
在检查之前先规范化,因为payload 会藏在零宽字符里,再用 base64 编码来绕过明文匹配。隐形字符移除器(Invisible Character Remover)去除隐藏字符,Base64 编码器解码器展示模型真正会看到什么。在进入请求路径之前,在一个正则表达式测试器里用对抗性输入测试每条拒绝列表模式,因为一个坏模式要么挡住真实用户,要么放行所有攻击。
之后加上 PII 脱敏,用显式实体列表而不是默认配置;在 CI 里跑起 promptfoo,让系统提示词回归问题打断构建;记录每一次拦截以及导致它的输入。无法审计的护栏是无法调优的护栏。
总结
十八个月的整合:Lakera 去了 Check Point,Protect AI 和 Portkey 去了 Palo Alto,promptfoo 去了 OpenAI,LLM Guard 进了档案。在信任任何对比文章之前先查一下仓库自己的状态页,这篇文章也不例外。
开源层仍然状态良好。两个 Apache 2.0 框架在活跃开发中,一个 MIT 协议的 PII 引擎刚转交给社区维护,还有一个自托管分类器,其官方文档公开了基准分数与实际命中率之间的差距。
没有任何一样能真正关闭提示词注入,因为指令和数据仍在共享一个通道。Presidio 在上面的测试中用默认配置搞坏了自己的输出,Meta 的数据表明大约五分之一的真实攻击能穿透一个训练良好的分类器。把你的第一个小时花在架构上,花在你能砍掉三要素中的哪一条上。把其余的当作在那个决策之后的纵深防御。
Original article on DevToolLab
OWASP Top 10 for LLM Applications 2025
EchoLeak: The First Real-World Zero-Click Prompt Injection Exploit in a Production LLM System
The lethal trifecta for AI agents, Simon Willison
Presidio and its transition to community ownership
Llama Prompt Guard 2 model card
Amazon Bedrock pricing
Azure AI Content Safety pricing
Palo Alto Networks completes acquisition of Protect AI
Check Point acquires Lakera
Palo Alto Networks to acquire Portkey