Garak Pro 是对 NVIDIA 开源项目 Garak 在生产安全评估场景中的专业运用。Garak 以 Probe(探测模块,负责生成攻击输入)和 Detector(检测模块,负责判断输出是否命中漏洞)为核心,将提示注入、越狱、数据泄露等测试自动化、标准化、可复现化。它提供命令行工具、Python 插件机制以及 HTML/JSON 报告输出,支持 OpenAI、Hugging Face、Replicate、SageMaker 等主流模型接入方式。本文以官方文档为基础,从安装配置、快速上手、核心能力、生产部署到选型对比逐步展开。需要说明的是,Garak Pro 不是独立的闭源商业产品,而是围绕 Garak 构建的 LLM 漏洞扫描专业工作流。
掌握 Garak,你就能用可复现的自动化扫描替代人工提示工程,建立大模型安全基线,成为 LLM 应用安全评估的关键角色。
速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。
为什么需要 Garak:人工测试不覆盖、不可复现
大模型上线前需要回答“这个模型能不能被提示注入、越狱、诱导泄露数据”。传统方式靠工程师手工构造 prompt,或散落使用临时脚本。这样做有三个问题:一是覆盖范围小,人工很难系统枚举编码绕过、多轮对话泄密等攻击面;二是结果不可复现,换个模型版本就要重测,且无法对比不同模型之间的安全性;三是输出没有统一格式,安全结论难以沉淀为团队基线。
Garak 将“攻击输入生成”和“漏洞结果判定”解耦成 Probe 与 Detector。运行时,Garak 自动生成多个类别的测试输入、发给目标模型、收集输出,再用 Detector 判断是否命中漏洞,最后生成结构化报告。整个流程由一条 CLI 命令或一个 YAML 配置驱动,天然适合 CI 和定时任务。与聚焦少数攻击脚本的自建工具相比,Garak 更像一套“安全测试框架”:插件化、可扩展,并有官方维护的探测集,适合作为团队统一的 LLM 安全基线上具。
安装与环境配置:3 步就绪
第一步,准备 Python 3.10 以上的虚拟环境,避免依赖冲突。第二步,通过 pip 安装 garak。第三步,配置目标模型的访问方式:云端模型需要设置环境变量或 API Key,本地 Hugging Face 模型则需确保模型可被 transformers 加载。安装后运行 garak --version 验证,再运行 garak --list_model_types 查看当前支持的模型接入类型。
python3 -m venv garak-venvsource garak-venv/bin/activatepip install -U garak # 配置 OpenAI 模型示例(按实际模型提供方设置)export OPENAI_API_KEY="your-api-key" # 验证安装garak --versiongarak --list_model_types
快速上手:5 分钟跑通第一次漏洞扫描
最小可用流程是:选择目标模型,选择探测类别,运行并查看报告。第一步,确定模型接入参数。以 OpenAI 为例,设置 --model_type openai 和 --model_name gpt-3.5-turbo;本地模型可使用 --model_type huggingface 并指定模型名。第二步,使用 --probes 指定探测类别,常用组合是 promptinject(提示注入)和 jailbreak(越狱),也可以不加该参数让 Garak 执行默认探测集。第三步,运行扫描。Garak 会在当前目录生成 garak_runs/<时间戳>/ 目录,其中包含 report.html、report.json 等报告文件。第四步,用浏览器打开 HTML 报告查看每个 probe 的通过率与被 Detector 标记为漏洞的具体输出样本。
进阶做法是将探测参数写进 garak.yaml,用 --config garak.yaml 运行,便于在 CI 中复用同一组测试标准。
export OPENAI_API_KEY="your-api-key" garak --model_type openai \ --model_name gpt-3.5-turbo \ --probes promptinject,jailbreak \ --seed 42 # 输出目录示例# garak_runs/<timestamp>/report.html# garak_runs/<timestamp>/report.json
核心能力详解:3 大支柱
支柱一,Probe 探测模块。Probe 负责生成攻击输入并发送给目标模型。内置探测类别覆盖提示注入、越狱、编码攻击、有害内容生成、数据泄露探测等常见 LLM 攻击面。每个 Probe 是一段可复用的 Python 插件,可以通过注册机制扩展新的探测方法,满足内部特定的安全测试需求。
支柱二,Detector 检测模块。Detector 负责分析模型输出,判断是否真的产生了漏洞。例如,提示注入探测器会检查模型是否在输出中遵从了攻击者注入的指令;越狱探测器会判断模型是否输出了本应被拒绝回答的内容。Detector 与 Probe 解耦,意味着同一个攻击输入可以用多个 Detector 从不同角度评估,降低误报和漏报。
支柱三,可复现报告与生态扩展。Garak 支持通过 --seed 固定随机种子,并自动保存运行配置与结果文件,保证同一配置下的扫描可复现。报告支持 HTML、JSON 等格式,便于归档、diff 和自动化解析。同时,Garak 提供 --list_probes、--list_detectors 等命令查看当前可用插件,并可通过 YAML 配置批量定义探测列表、模型参数和输出路径。
生产部署与监控:从上线到运维
CI/CD 集成。在 GitHub Actions 或 GitLab CI 中增加 Garak 扫描 Job:安装依赖、注入模型 API Key、运行 garak --config scan.yaml,随后将 garak_runs/ 下的报告作为构建产物上传。这样每次代码或模型更新都能自动触发安全回归。
定期扫描与告警。对已上线模型,通过 cron 或 Airflow 按天/按周执行扫描,重点对比新增探测类别的结果。将 report.json 中的严重结果解析后推送至告警系统,例如 Slack 或邮件,当失败用例数量超过阈值时自动创建安全工单。
可观测性。结构化 JSON 日志包含每个 probe 的运行状态、命中数量和响应延迟。将日志接入 ELK 或对象存储,方便回溯历史版本的安全趋势。扫描结果建议与模型版本号、Prompt 版本号一起存储,形成可查询的安全基线库。
<p class="para-label">避坑清单:</p>
<ul class="dash-list"><li>只跑单个 probe 就下结论:一次扫描至少覆盖提示注入、越狱等多类探测,并用固定种子保证可复现。</li><li>未授权扫描云端模型:在生产或公有云模型上运行前需获得授权,否则可能违反服务条款;优先在本地或沙箱模型中测试。</li><li>把“扫描通过”当作绝对安全:Garak 只能证明已测试攻击面未触发,不能穷尽未来威胁,需持续更新探测集。</li></ul>
| 维度 | Garak | PyRIT | ART(Adversarial Robustness Toolbox) | TextAttack |
|---|---|---|---|---|
| 定位 | LLM 漏洞扫描与安全评估 | 生成式 AI 红队自动化 | 通用对抗鲁棒性评估与防御 | NLP 文本对抗攻击与研究 |
| 编排范式 | 插件化 Probe-Detector,配置驱动 CLI | 组件化攻击管线,高度可编程 | 攻击、防御、训练统一 API | 攻击方法与数据集,偏学术研究 |
| 类型约束 | Python 插件与 YAML 配置,无强制继承 | 类与 Pipeline 对象 | Estimator 接口,面向 scikit-learn 类模型 | Attacker 与 Dataset 抽象 |
| 学习曲线 | 低,CLI 开箱即用 | 中,需要编程 | 高,需要 ML 基础 | 中,学术 API |
| 生态集成 | Hugging Face、OpenAI、Replicate、SageMaker 等 | 主要面向 Azure OpenAI 与微软生态 | TensorFlow、PyTorch、scikit-learn | PyTorch、Hugging Face Datasets |
| 生产部署 | CLI/CI 友好,生成 JSON/HTML 报告 | 适合嵌入红队工作流 | 多用于研究与模型加固 | 多用于论文实验 |
| License | Apache-2.0 | MIT | MIT | MIT |
| 适合谁 | LLM 应用安全工程师、SRE | AI 红队、安全研究员 | ML 工程师、算法安全团队 | NLP 研究者、学术评估 |
选型建议:需要快速、可复现的 LLM 安全基线测试时优先选 Garak;要做深度红队自动化并深度使用微软生态则选 PyRIT;需要同时考虑对抗训练与防御加固选 ART;纯 NLP 文本对抗研究场景选 TextAttack。
AI 应用场景
LLM 上线前的安全基线评估
阶段:模型安全评测 / 上线前红队
解决的问题:手工 prompt 测试覆盖不全、结论不可量化;Garak 通过统一 Probe-Detector 流程自动执行多类攻击,并生成可归档报告,将“安全性”变成可对比的基线指标。
具体案例:某 LLM 应用团队在发布聊天机器人前,用 Garak 对候选模型执行 promptinject、jailbreak、data-leak 三类探测,发现越狱成功率 12% 的高危问题,经过系统提示词加固后重新扫描,将越狱率降到 2% 以下,并保留 JSON 报告作为安全发布依据。
模型升级回归测试
阶段:持续集成 / 模型变更评估
解决的问题:基座模型或 Prompt 模板升级后,旧的安全问题可能回归;人工重测耗时且标准不一。Garak 支持固定 seed 与配置文件,可无缝嵌入 CI,每次升级自动执行同一套探测。
具体案例:一个 RAG 知识库系统每两周更新一次 Prompt 模板,团队在流水线中加入 garak --config scan.yaml,仅当全部探测器通过率高于阈值才允许合并。一次模板改动导致提示注入命中率上升 8%,流水线及时拦截并回滚。
多模型安全选型对比
阶段:模型选型 / 供应链安全
解决的问题:不同厂商模型在越狱、注入等维度的表现差异大,缺少统一量化工具。Garak 可用相同探测集和相同随机种子对不同模型执行扫描,直接对比报告中的命中率。
具体案例:某企业同时评估三个开源模型作为客服底座,使用 Garak 固定配置分别扫描,发现模型 A 的越狱率 5%、模型 B 为 0.3%、模型 C 为 1.1%,综合报告得出选型建议,并沉淀为采购安全评审材料。
常见误区
误区我觉得 Garak 就是给 OpenAI API 测越狱的工具,其他模型引擎都用不了。
正解Garak 支持多种模型接入类型,包括 Hugging Face 本地/远程模型、Replicate、SageMaker 等,也提供 test 模型用于功能验证。运行 garak --list_model_types 即可查看当前支持的接入方式。扫描云端模型时需要 API Key,本地模型则依赖 transformers 加载,并不限定 OpenAI 一家。
为何常见:大多教程和示例以 OpenAI 为例,且默认设置 API Key,容易让新手以为 Garak 只适配 OpenAI。
误区我听说 Garak 有 Probe 和 Detector,以为它们是一回事,都是发起攻击的模块。
正解两者职责完全不同。Probe 生成并发送攻击输入,Detector 分析模型输出是否命中漏洞。一次扫描中,一个 Probe 的输出可能会被多个 Detector 从不同角度评估。理解了这种解耦,才能正确解释报告里“probe 成功率”和“detector 命中”的关系。
为何常见:Garak 的 CLI 输出中同时出现两个词,且官方文档常将二者并列介绍,容易让人误以为是同义词。
误区只要 Garak 报告里显示没有命中,我就敢拍胸脯说模型完全安全了。
正解Garak 能证明的是“在当前探测集、当前 seed、当前模型版本下,未触发已知攻击模式”。LLM 安全是动态攻防,新越狱和注入方式不断出现,且探测集覆盖有限。生产环境应把 Garak 作为发现问题的基线工具,而不是最终安全承诺。
为何常见:漏洞扫描器在传统安全里常被当作“有没有漏洞”的判决书,这种心智容易迁移到 LLM 场景。
误区既然是开源工具,我拿它扫一下别人公开的聊天机器人,应当没什么限制。
正解Garak 会向目标模型发起大量攻击请求,可能违反模型服务提供商的 AUP(可接受使用政策),甚至触发风控封禁。合规做法是在自有模型、沙箱环境或模型提供商明确授权的评估环境中扫描。涉及第三方平台时,先核对安全测试豁免条款。
为何常见:Garak 作为免费开源工具,容易让人忽略“扫描是攻击行为”这一事实。
误区我 pip install 完 Garak,以为不填任何配置就能扫描本地下载的 Llama 模型。
正解Garak 需要知道模型类型和模型名称。对 Hugging Face 模型,要用 --model_type huggingface --model_name meta-llama/...,且本机需要满足 transformers 加载所需的显存/内存和依赖。没有指定模型接入参数时,Garak 无法自动发现本地模型。
为何常见:Garak 安装简单,默认示例又常是云端 API,容易让新手低估本地模型接入的前置条件。
面试题
Q1. Garak 的官方维护方是?
- A.OpenAI
- B.Microsoft
- C.NVIDIA← 正确答案
- D.Google
答案:C。Garak 是 NVIDIA 开源的 LLM 漏洞扫描器。A、B、D 均非其维护方,虽然 PyRIT 是 Microsoft 的红队工具,但它不是 Garak。
Q2. 在虚拟环境中安装 Garak 的推荐命令是?
- A.conda install garak
- B.pip install garak← 正确答案
- C.brew install garak
- D.apt install garak
答案:B。Garak 官方通过 PyPI 分发,推荐使用 pip install garak。conda、brew、apt 均不是官方支持的安装来源。
Q3. Garak 中负责生成攻击测试输入的是?
- A.Detector(检测器)
- B.Probe(探测器)← 正确答案
- C.Reporter(报告器)
- D.Harness(执行器)
答案:B。Probe 生成并发送攻击输入,Detector 分析输出。Reporter 负责产出报告,Harness 在 Garak 中不是独立组件。
Q4. 在 Garak 中扫描 Hugging Face 本地模型时,通常需要满足什么条件?
- A.OpenAI 的 API Key
- B.本地缓存且可被 transformers 加载← 正确答案
- C.已配置的 S3 对象存储
- D.云厂商提供的 GPU 集群
答案:B。Garak 的 huggingface 模型类型通过 transformers 加载模型,目标模型需要能在本地被加载。OpenAI Key 只用于 OpenAI 接入,GPU 和 S3 均非必要条件。
Q5. Garak 扫描完成后,默认将报告输出到哪个目录?
- A../results
- B../garak_runs← 正确答案
- C../runs
- D../logs
答案:B。Garak 默认会在当前目录下创建带时间戳的 garak_runs/<timestamp>/ 目录,其中包含 report.html、report.json 等文件。这不是固定 results 或 logs。
Q6. 下列选项中,关于 Probe 与 Detector 关系的描述正确的是?
- A.Detector 决定攻击输入,Probe 判断输出
- B.Probe 决定攻击输入,Detector 判断输出← 正确答案
- C.两者功能完全等同
- D.Probe 只在离线评测中使用
答案:B。Probe 负责生成攻击输入,Detector 负责判定输出是否命中漏洞。二者解耦,D 选项错误,Probe 同样适用于在线模型扫描。
Q7. 下列哪些属于 Garak 的常见探测类别?
- A.提示注入(Prompt Injection)← 正确答案
- B.越狱(Jailbreak)← 正确答案
- C.数据泄露(Data Exfiltration)← 正确答案
- D.吞吐量压力测试(Throughput Test)
答案:ABC。Garak 聚焦安全漏洞探测,提示注入、越狱、数据泄露均在探测范围内。吞吐量压力测试属于性能测试,不是 Garak 的安全探测类别。
Q8. 关于 Garak 的部署与集成,下列说法正确的有?
- A.可作为 CLI 工具在 CI/CD 流水线中运行← 正确答案
- B.只能通过 Python SDK 调用
- C.可输出 JSON 与 HTML 报告← 正确答案
- D.必须运行在 GPU 环境
答案:AC。Garak 的核心使用方式是 CLI,适合 CI 集成;报告支持 HTML、JSON 等格式。它也可作为 Python 库导入,但不是“只能”,且不强制要求 GPU。
Q9. 在红队评估场景下,使用 Garak 的正确做法包括?
- A.获得模型提供方授权后再扫描← 正确答案
- B.只对受控模型和测试环境发起探测← 正确答案
- C.将公开模型的漏洞结果直接用于恶意攻击
- D.结合 Detector 结果综合判定漏洞← 正确答案
答案:ABD。未授权扫描可能违反服务条款并带来法律风险,A、B 是合规要求。C 明显错误,漏洞结果应内部修复而非恶意利用。Detector 输出用于降低误报,属于正确实践。
Q10. Garak 设计中实现“可复现评估”的核心机制是?
- A.每次使用随机种子并主动丢弃日志
- B.固定种子并保留配置快照与结果文件← 正确答案
- C.依赖第三方在线排行榜动态调整
- D.每次运行前自动清除历史报告
答案:B。Garak 支持 --seed 固定随机种子,并在运行目录保留配置与结果文件,使同一配置可复现。A、D 与可复现相反,C 依赖外部排行榜并非 Garak 机制。