llm-guard
LLM 交互的安全护栏,Input/Output 双扫描过滤有害内容
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
LLM 交互的安全护栏,Input/Output 双扫描过滤有害内容
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下这个场景:你的 AI 客服正和用户愉快地聊天,突然——它把你们公司的 API 密钥、内部邮箱格式、甚至某个竞品的名字给"吐"了出来。这种"数据泄漏"轻则尴尬,重则让攻击者直接登堂入室。
这就是 LLM Guard 要解决的问题。
LLM Guard 由 Protect AI(AI 安全领域知名公司,ModelScan 等安全工具的作者)打造,是一个专为 LLM 交互设计的安全工具包。它的核心理念很简单:在用户输入到达模型之前、以及模型输出返回给用户之前,分别架设"安检门"。

图1:Protect AI 团队标识
2023 年大模型井喷式爆发后,行业普遍关注的是"模型有多强",而非"模型有多安全"。直到两件事改变了行业认知:
Prompt Injection(提示词注入)成为真实威胁。 攻击者通过在输入中嵌入恶意指令,让模型绕过内置限制、执行未授权操作。早期案例中,甚至有人通过 injection 把 ChatGPT 变成了"钓鱼邮件生成器"。
数据泄漏问题频发。 苹果、三星等大厂相继禁止员工使用 ChatGPT,理由是员工可能无意中将内部代码或文档粘贴给 AI,泄漏到第三方服务器。
LLM Guard 正是在这一背景下由 Protect AI 推出,旨在为所有基于 LLM 构建的应用提供一个标准化、可插拔的安全层。
LLM Guard 的设计哲学是分层过滤。它将安全检查分为两类:
在用户输入进入 LLM 之前,对其进行多维度检查:
| 扫描器 | 功能 |
|---|---|
| PromptInjection | 检测提示词注入攻击,识别隐藏在正常文本中的恶意指令 |
| Anonymize | 自动检测并匿名化 PII(人名、邮箱、手机号、身份证等),使用 Presidio 引擎 |
| Secrets | 识别 API 密钥、密码、私钥等机密信息,防止通过 Prompt 泄漏 |
| BanCompetitors | 屏蔽竞争对手名称,避免客服系统"好心推荐"竞品 |
| BanTopics | 屏蔽敏感话题(政治、暴力等),符合合规要求 |
| Toxicity | 毒害性语言检测,净化对话环境 |
| TokenLimit | 控制 Token 数量,防止恶意超长输入导致服务拒绝 |
| Gibberish | 检测乱码/随机文本,过滤刷屏/洪水攻击 |
| InvisibleText | 检测零宽字符、Unicode 混淆等隐写攻击 |
| Language | 语种检测,可限制仅接受特定语言输入 |
| Sentiment | 情绪极性分析,检测负面/敌意情绪 |
在 LLM 返回内容之后、呈现给用户之前,进行二次检查:
| 扫描器 | 功能 |
|---|---|
| Sensitive | 检测输出中的敏感数据(PII、商业机密等) |
| BanCompetitors / BanSubstrings / BanTopics | 与输入侧对称,防止模型"嘴瓢"提及敏感内容 |
| Deanonymize | 还原 Anonymize 造成的匿名化,便于内部处理后恢复原始信息 |
| JSON | 检测并修复输出中的格式错误 JSON,防止解析失败 |
| FactualConsistency | 检验输出内容的事实一致性(基于 NLI 模型) |
| Bias | 检测输出中的偏见内容 |
| NoRefusal | 识别模型过度保守的"拒答"行为(如本该正常回答却推脱) |
| URLReachability | 验证输出中链接的有效性 |
| MaliciousURLs | 检测输出中的恶意链接 |
| Relevance | 检验回答与问题的相关性 |
LLM Guard 的核心是 llm_guard/evaluate.py 中的评估引擎。它支持:
from llm_guard import Scanner
from llm_guard.input_scanners import PromptInjection, Anonymize
scanner = Scanner([
PromptInjection(),
Anonymize(),
])
# 返回 (sanitized_prompt, is_valid, risk_score)
sanitized, valid, score = scanner.scan(prompt)
LLM Guard 坚持纯 Python 实现,核心依赖轻量可控:
项目使用 pytest + pytest-cov 做测试覆盖,pre-commit 强制代码风格(ruff + pyright),版本规范遵循语义化版本(目前 0.3.x,属于 Beta 阶段)。
pip install llm-guard
基础包仅需约 10 个轻量依赖,高级 Scanner(如 ONNX 优化版)按需安装 llm-guard[onnxruntime]。
项目内置了 llm_guard_api 模块,提供 FastAPI 驱动的 REST 接口:
POST /v1/moderation/input — 扫描用户输入POST /v1/moderation/output — 扫描模型输出GET /health — 健康检查通过 docker-compose up 可一键启动:
services:
llm_guard_api:
build: ./llm_guard_api
ports:
- "8000:8000"
volumes:
- ./config/scanners.yml:/home/user/app/config/scanners.yml
支持通过 scanners.yml 配置文件定制 Scanner 组合,无需修改代码即可调整安全策略。
LLM Guard 也有自己的局限:
误报率是双刃剑。 Anonymize Scanner 在专业术语密集的场景(如医疗、法律)中容易误伤。Presidio 的默认模型对中文支持有限,需要额外训练或调参。
性能开销不可忽视。 每个深度学习 Scanner(如 FactualConsistency、Bias)都需要加载模型推理。在高并发场景下,GPU 是必需的。
版本仍处于 Beta。 官方将当前版本标记为 Beta,API 可能存在非兼容变更。生产环境使用时建议锁定版本号。
LLM Guard 代表了 LLM 应用安全的工程化方向——从"让模型自己学会守规矩",转向"在模型外层构建可靠的安全层"。随着 AI 安全法规趋严(EU AI Act 等),这类安全工具的市场需求会持续增长。
截至目前,该项目在 GitHub 获得超过 3000 颗星,是 LLM 安全领域最受欢迎的开源工具之一,也推动了整个行业对 AI 安全工程化的重视。
快速上手建议:如果你在构建任何面向用户的 LLM 应用(客服、助手、聊天机器人),强烈建议在输入输出两侧都集成 LLM Guard。生产环境推荐使用 Docker 部署,并按业务场景裁剪 Scanner 列表以平衡安全与性能。