Promptfoo 与 NVIDIA Garak:大模型安全检测的两把开源利器
前言:本文介绍两个主流的开源大模型安全检测工具:Promptfoo(评测与红队测试一体化平台)与 NVIDIA Garak(大模型漏洞扫描器),覆盖其技术背景、核心能力、部署方式与典型使用方法,并给出选型建议。
一、背景:大模型安全为什么需要专门工具
大模型应用引入了一类传统安全工具难以覆盖的风险。以提示词注入(Prompt Injection)为例,攻击者可以通过构造输入篡改模型的系统指令,使 Agent 执行越权操作或泄露数据。与之并列的风险还包括越狱(Jailbreak)、有害内容生成、敏感信息泄露(PII)、幻觉(Hallucination)以及 Agent 场景下的过度授权(Excessive Agency)等。
传统安全扫描器的局限性在于:大模型输出是概率性、开放式的,无法用确定性规则完整判定"是否被攻破"。因此需要专门的工具,以自动生成攻击用例 + 自动判定结果的方式对大模型进行系统化检测。以下两个工具分别代表了这一领域的两条技术路线:
| 工具 | 定位 | 维护方 |
|---|---|---|
| Promptfoo | LLM 评测 + 红队测试一体化平台 | 开源社区(已并入 OpenAI) |
| Garak | 大模型漏洞扫描器 | NVIDIA |
二、Promptfoo:评测与红队测试一体化平台
- 项目地址:https://github.com/promptfoo/promptfoo
- 官方文档:https://www.promptfoo.dev
- 开源协议:MIT
- 技术栈:Node.js / TypeScript
2.1 背景与定位
Promptfoo 最初面向 LLM 应用的提示词评测(Prompt Evaluation),用于在多个 Prompt、模型与测试用例之间进行对比与回归测试。其后扩展出红队测试(Red Teaming)能力,可自动生成攻击性测试用例,探测模型的安全弱点。
2025 年底,Promptfoo 官方宣布加入 OpenAI,OpenAI 借此强化其在 Agentic AI 安全领域的布局。该工具用户规模已超过 10 万(见官方博客),并被多家 Fortune 500 企业采用。这一事件本身也表明:评测与安全测试工具已成为大模型基础设施的刚性需求。
2.2 核心能力
Promptfoo 的能力可以划分为相互配合的两部分:
(1)Eval:评测与回归测试
用于对提示词与模型输出进行系统化评估,核心要素包括:
- Test Cases(测试用例):定义输入与期望行为,支持精确匹配、包含关系、正则表达式、JSON Schema 校验等多种断言;
- Assertions(断言):将"输出必须拒绝有害请求"“不得包含邮箱格式字符串”"必须为合法 JSON"等规则形式化;
- Model-Graded Evaluation(模型评分):使用一个更强的基础模型作为评判者(Judge),对主观性指标(语气、专业性等)进行打分;
- 多 Provider 支持:同一套测试可同时针对 OpenAI、Anthropic、Google、Azure、本地模型以及自定义 HTTP 接口、Python 脚本执行。
(2)Red Team:红队测试
这是 Promptfoo 的核心能力。用户只需声明被测系统的用途(purpose),工具即可生成针对性攻击用例,并通过以下两类机制扩展攻击面:
- Plugins(插件):按攻击类别组织,多数与 OWASP LLM Top 10 对齐;
- Strategies(策略):对攻击载荷进行变异与加固,模拟更高级的攻击者。
主要插件类别如下:
| 插件类别 | 对应风险 | 说明 |
|---|---|---|
jailbreak | 越狱 | 绕过模型对齐护栏(如 DAN、角色扮演等手法) |
prompt-injection | 提示词注入 | 直接注入与间接注入 |
pii | 敏感信息泄露 | 诱导模型输出身份证号、邮箱、手机号等 |
harmful | 有害内容 | 暴力、仇恨、自残、违法指导等类别 |
hallucination | 幻觉 | 诱导模型编造事实或虚构引用 |
excessive-agency | 过度授权 | 针对具备工具调用能力的 Agent,测试越权操作 |
rbac | 访问控制 | 测试权限边界是否可被突破 |
其中 excessive-agency、rbac 等插件针对 Agent 的工具调用与权限模型设计,是 Agent 安全评估中需要重点关注的类别。
2.3 部署方式
Promptfoo 基于 Node.js 分发,安装轻量:
# 全局安装
npm install -g promptfoo
# 或使用 npx 临时运行(适用于 CI 环境)
npx promptfoo@latest --help
仅需 Node.js 18+ 运行环境,无需数据库或独立服务;执行结果支持本地查看与在线分享。
2.4 使用方法
初始化红队项目:
promptfoo redteam init
该命令以交互方式收集被测模型与用途信息,并生成配置文件 promptfooconfig.yaml。
配置示例:
# promptfooconfig.yaml
description: "客服 Agent 红队测试"
prompts:
- "You are a helpful customer service agent."
providers:
- openai:chat:gpt-4o # 亦可替换为 anthropic、本地 ollama 等
redteam:
purpose: "A customer service chatbot that can look up orders and send emails."
plugins:
- jailbreak
- prompt-injection
- pii
- harmful:violent-crime
- excessive-agency
strategies:
- jailbreak
- jailbreak:composite
执行与查看报告:
promptfoo redteam run # 运行红队测试
promptfoo view # 打开 Web 可视化报告
报告按风险类别展示失败率、严重程度,并列出失败的具体攻击用例与模型回复。
除红队外,标准评测流程如下:
promptfoo init # 生成评测配置
promptfoo eval # 执行评测
promptfoo view # 查看结果


2.5 特点与适用场景
优势:
- 功能一体化:评测、红队、报告与 CI/CD 集成集中在同一工具;
- 上手成本低:YAML 配置驱动,无需编写代码即可运行;
- 可扩展性强:支持 TypeScript 自定义插件、自定义 Provider 与断言;
- 面向 Agent:
excessive-agency、rbac等插件直接覆盖 Agent 安全风险; - 工程化友好:支持接入 GitHub Actions 等 CI/CD 流程,适合作为上线前安全门禁。
适用场景:
- LLM 应用与 Agent 的上线前安全回归测试;
- CI/CD 流水线中的自动化安全检测;
- 多模型、多提示词的对比评测。
局限性:
- 定位为评测框架而非深度漏洞扫描器:攻击面覆盖广,但单一攻击类别的深度不如专用工具;
- 大规模执行会消耗可观的模型 API 调用成本;
- 深度定制需编写 TypeScript 插件,存在一定学习成本。
三、NVIDIA Garak:大模型漏洞扫描器
- 项目地址:https://github.com/NVIDIA/garak
- 官方文档:https://docs.garak.ai / https://reference.garak.ai
- 开源协议:Apache 2.0
- 技术栈:Python
3.1 背景与定位
Garak 是 NVIDIA 推出的大模型漏洞扫描器,由安全研究员 Leon Derczynski(leondz)主导开发。与 Promptfoo 的评测定位不同,Garak 自设计之初即面向"攻击 + 判定",对模型系统性地发起大规模探测,并自动判定每次攻击是否得手,定位类似传统安全领域的 Nessus 或 Metasploit 之于大模型。
3.2 架构:四个解耦组件
Garak 的核心架构由四个组件构成:
Generators(被测模型)
↑ 攻击载荷输入
Probes(攻击生成器) —— 生成攻击 prompt
↓ 模型输出
Detectors(检测器) —— 判定攻击是否成功
↑ 可选
Buffs(变异器) —— 对攻击载荷做编码/变形以绕过防护
- Generators:被测模型后端,支持 HuggingFace 本地模型、OpenAI 兼容 REST 端点、Replicate、GGUF、NVIDIA NIM 等;
- Probes:攻击载荷生成器,按漏洞类别组织,如
promptinject(提示词注入)、dan(越狱)、encoding(编码绕过)、toxicity(毒性)、leakreplay/snowball(训练数据泄露)等,总数达数百个; - Detectors:判定器,如
mitigation.MitigationBypass、toxicity.ToxicCommentModel、knownbadsignatures(检测知名恶意回复签名)等; - Buffs:攻击变形器,如 Base64、ROT13、Unicode 变换等,用于测试模型对编码/混淆类绕过的抵抗能力。
该设计的价值在于组件间充分解耦,可自由组合:Probe 负责生成攻击,Detector 负责判定,Buffs 负责变形,Generator 负责接收攻击,扩展任一环节只需新增对应插件。
3.3 部署方式
# 推荐使用 pipx 隔离安装
pipx install garak
# 或直接使用 pip
python -m pip install -U garak
扫描远程 API 模型时安装即可运行;扫描本地模型需额外安装 transformers、torch 等依赖,并具备足够的显存/内存。
3.4 使用方法
查看支持的组件:
garak --list_probes # 攻击探针
garak --list_detectors # 检测器
garak --list_generators # 模型后端
garak --list_configs # 预设配置
扫描本地 HuggingFace 模型:
garak --model_type huggingface \
--model_name meta-llama/Meta-Llama-3-8B-Instruct \
--probes promptinject,dan,encoding \
--report_prefix mymodel_scan
扫描远程 API 模型:
# OpenAI 官方 API(通过 OPENAI_API_KEY 环境变量鉴权)
garak --model_type openai --model_name gpt-4o-mini
# 任意 OpenAI 兼容 REST 端点(自建 vLLM、Ollama 等)
garak --model_type rest \
--model_name my-model \
--generator_options '{"rest_uri":"http://localhost:8000/v1/chat/completions"}'
聚焦扫描特定漏洞类别:
# 仅扫描提示词注入
garak --model_type huggingface --model_name <model> --probes promptinject
# 仅扫描越狱
garak --model_type huggingface --model_name <model> --probes dan
# 使用预设配置执行完整扫描
garak --model_type huggingface --model_name <model> --configs scan.defaults

查看报告:
扫描完成后,Garak 在 garak_runs/ 目录下生成两类结果:.report.jsonl(逐条探测明细,便于机器处理与二次分析)与 .report.html(可视化报告,展示各探针成功率)。
3.5 特点与适用场景
优势:
- 专而深:数百个探针 + 自动判定,实现批量自动攻击;
- 架构清晰:四个组件解耦,扩展攻击面只需新增对应插件;
- 结果可机读:JSONL 报告便于接入分析流水线、复现研究结果;
- 研究友好:与 MITRE ATLAS(大模型攻防知识库)存在映射,探针具备明确的学术出处;
- 后端覆盖广:本地模型、远程 API、NVIDIA NIM 均可。
适用场景:
- 对单个模型进行系统性、全面的漏洞体检;
- 安全研究及特定攻击的复现;
- 需要机器可读结果以实现自动化闭环的场景。
局限性:
- 聚焦攻击扫描,不具备 Promptfoo 的评测、回归与 CI/CD 门禁等工程化能力;
- 覆盖范围受限于内置探针类别,业务相关的定制化攻击需自行编写插件;
- 全量扫描耗时较长,对本地计算资源要求较高。
四、对比与选型
| 维度 | Promptfoo | Garak |
|---|---|---|
| 维护方 | 开源社区(已并入 OpenAI) | NVIDIA |
| 定位 | LLM 评测 + 红队测试平台 | LLM 漏洞扫描器 |
| 技术栈 | Node.js / TypeScript | Python |
| 攻击面 | 覆盖广,含 Agent 专属插件 | 探针深,学术背景强 |
| 判定方式 | 断言 + 模型评分(Model-Graded) | 专用 Detector 自动判定 |
| 结果形态 | Web 报告、可分享 | JSONL + HTML |
| 工程化 | CI/CD 集成完善,适合安全门禁 | 偏扫描与研究,JSONL 便于二次开发 |
| 扩展方式 | TypeScript 自定义插件、自定义 Provider | Python 自定义 Probes / Detectors / Buffs |
| 最擅长 | 上线前回归与持续安全测试 | 单模型深度漏洞体检与攻击复现 |
选型建议:
- 面向产品/Agent 的上线前安全门禁与持续回归测试,优先选择 Promptfoo;
- 面向单个模型的深度漏洞扫描、攻击复现与研究,优先选择 Garak;
- 两者定位互补,可在生产实践中组合使用:以 Garak 进行阶段性深度摸底,以 Promptfoo 承担日常回归与 CI 门禁。
五、总结
大模型安全风险是上线即面临的问题,而非事后才需考虑的事项。本文介绍的两个工具分别代表了这一领域的两条成熟路线,两者结合,可覆盖"周期性深度检测"与"持续回归防护"两类需求:
- Promptfoo 将安全测试工程化、常态化,具备低上手成本与良好的 CI/CD 集成能力;
- Garak 提供深度、系统化的漏洞扫描能力,其解耦架构便于研究与扩展。
扩展阅读:
- Promptfoo:Red Team 快速上手 与 OWASP LLM Top 10 对照
- Garak:官方文档 与 CLI 参考
更多推荐
所有评论(0)