garak

NVIDIA 维护的 LLM 红队扫描器,用 probes 与 detectors 发现越狱、注入和泄漏。

补充说明

garak(Generative AI Red-teaming & Assessment Kit)像 nmap 一样扫描模型:probes 生成攻击提示,detectors 判断输出是否命中,harness 负责调度,evaluator 汇总报告。内置 probe 覆盖 DAN 越狱、编码绕过、提示注入、数据泄漏、恶意代码生成、包名幻觉、毒性和 XSS 等类别。

它适合模型上线前的安全回归、版本对比和红队初筛,不替代人工渗透测试。运行时防护用 guardrails-ai 或 llama-guard 在请求链路拦截;garak 是离线扫描器,promptfoo 更偏应用级测试与 CI,DeepEval 更偏质量指标。扫描结果有假阳性和假阴性,命中项必须人工复核。

版本注意:--probes 和 --probe_tags 已弃用,改用 --spec 选择 probe 或 tag;probe 类名、detector 名称和报告字段随版本变化,升级后先 --list_probes 核对,具体以当前版本文档为准。

常用示例

安装并列出可用 probe、detector 和生成器:

python -m pip install -U garak
garak --version && garak --list_probes | head -20
garak --list_detectors | head -20

先用测试目标跑通链路,不消耗模型额度:

python -m garak -t test.Blank -S probes.test.Blank -d always.Pass --report_prefix ./reports/smoke

扫描 OpenAI 模型时只选编码类 probe,控制费用和时长:

export OPENAI_API_KEY="sk-..."
garak --target_type openai --target_name gpt-4o-mini \
  --spec probes.encoding --generations 1 --parallel_attempts 4 \
  --report_prefix ./reports/openai-encoding

扫描本地 Hugging Face 模型;7B fp16 权重约 14GB,另需 KV cache,显存不足会 OOM:

garak --target_type huggingface --target_name Qwen/Qwen2.5-7B-Instruct \
  --spec probes.dan --generations 1 --report_prefix ./reports/qwen-dan

按 OWASP 标签选 probe,或用负号排除不需要的模块:

garak --target_type openai --target_name gpt-4o-mini --spec 'tag:owasp:llm01'
garak --target_type openai --target_name gpt-4o-mini --spec 'probes.dan,probes.encoding,-probes.lmrc'

提高攻击轮数和并发;并发过高会触发 429,先从 4 开始压测:

garak --target_type openai --target_name gpt-4o-mini \
  --spec probes.promptinject --generations 3 --parallel_attempts 8 --seed 42 \
  --report_prefix ./reports/promptinject

用固定 detector 做冒烟或对照,避免不同 probe 默认 detector 带来的差异:

garak --target_type openai --target_name gpt-4o-mini \
  --spec probes.encoding --detectors always.Pass --report_prefix ./reports/detector-smoke

运行结束后把 JSONL 报告转换成 AVID 格式,并检查命中明细:

garak --report ./reports/ci.report.jsonl
ls -lh ./reports
head -n 1 ./reports/ci.report.jsonl

易错点与排错

相关命令

读完自测

  1. probe、detector、harness 各自负责什么?
  2. 为什么默认全量扫描又慢又贵?
  3. 扫描命中率 100% 是否说明模型一定不安全?
答案
  1. probe 生成攻击提示;detector 判断模型输出是否命中;harness 负责调度目标模型、probe 和 detector 并收集结果,evaluator 汇总成报告。
  2. 默认会加载大量 probe,每个 probe 还按 generations 重复生成,再叠加并发和重试,调用量与费用成倍增长;应先用 --spec 缩小范围。
  3. 不一定。detector 可能误报,模型也可能只是复述或安全讨论;需要查看原始 prompt、completion 和 detector 理由,人工复核命中项。