
garak v0.17.0
模块化LLM漏洞扫描器,利用静态、动态和自适应探测手段,跨多个模型提供商检测幻觉、数据泄露、提示注入、越狱及毒性内容。
garak,LLM 漏洞扫描器
生成式 AI 红队测试与评估工具包
garak 检查由 LLM 驱动的应用是否会被诱导以我们不希望的方式失败。garak 探测幻觉、数据泄露、提示注入、错误信息、毒性生成、越狱以及许多其他弱点。如果你了解 nmap 或 msf / Metasploit Framework,garak 对它们做的事情有些类似,但针对的是 LLM。
garak 专注于让 LLM 或对话系统失败的各种方式。它结合静态、动态和自适应探针来探索这一点。
garak 是一个免费工具。我们热爱开发它,并且始终有兴趣添加功能来支持各种应用。
快速开始
> 查看我们的用户指南!docs.garak.ai
> 加入我们的 Discord!
> 项目链接与主页:garak.ai
> Twitter:@garak_llm
> DEF CON 幻灯片!
LLM 支持
目前支持:
- hugging face hub 生成式模型
- replicate 文本模型
- openai api 聊天与续写模型
- aws bedrock 基础模型
- litellm
- 几乎任何可通过 REST 访问的模型
- 类似 llama.cpp 版本 >= 1046 的 gguf 模型
- ……以及更多 LLM!
安装:
garak 是一个命令行工具。它在 Linux 和 OSX 上开发。
使用 pip 进行标准安装
直接从 PyPI 获取即可,应该就能正常使用了:
python -m pip install -U garak
使用 pip 安装开发版本
garak 的标准 pip 版本会定期更新。如需从 GitHub 获取更新的版本,请尝试:
python -m pip install -U git+https://github.com/NVIDIA/garak.git@main
从源码克隆
garak 有自己的依赖项。你可以将 garak 安装在其独立的 Conda 环境中:
conda create --name garak "python>=3.11,<=3.14"
conda activate garak
gh repo clone NVIDIA/garak
cd garak
python -m pip install -e .
好的,如果一切顺利,你大概就可以开始了!
注意:如果你在迁移到 NVIDIA GitHub 组织之前克隆了仓库,但你现在是在 github.com/NVIDIA URI 下阅读本文档,请按如下方式更新你的远程仓库:
git remote set-url origin https://github.com/NVIDIA/garak.git
快速开始
通用语法为:
garak <options>
garak 需要知道要扫描哪个模型,默认情况下,它会尝试对该模型使用它所知道的所有探针,并使用每个探针推荐的漏洞检测器。你可以使用以下命令查看探针列表:
garak --list_probes
要指定生成器,请使用 --target_type 选项,以及可选的 --target_name 选项。模型类型指定模型系列/接口;模型名称指定要使用的确切模型。下面的“生成器简介”部分介绍了部分受支持的生成器。一个简单直接的生成器系列是 Hugging Face 模型;要加载其中之一,请将 --target_type 设置为 huggingface,并将 --target_name 设置为该模型在 Hub 上的名称(例如 "RWKV/rwkv-4-169m-pile")。某些生成器可能需要将 API 密钥设置为环境变量,如果需要,它们会告知你。
garak 默认运行所有探针,但你也可以具体指定。例如,--spec probes.promptinject 将仅使用 PromptInject 框架的方法。你也可以通过在 . 后添加插件名称来指定某个特定插件而非插件系列;例如,--spec probes.lmrc.SlurUsage 将使用基于 Language Model Risk Cards 框架的检查模型是否生成贬损性词汇的实现。
如需帮助和灵感,请在 Twitter 或 discord 上找到我们!
示例
探测商业模型是否存在基于编码的提示注入(OSX/*nix)(将示例值替换为真实的 OpenAI API 密钥)
export OPENAI_API_KEY="sk-123XXXXXXXXXXXX"
python3 -m garak --target_type openai --target_name gpt-5-nano --spec probes.encoding
看看 Hugging Face 版本的 GPT2 是否容易受到 DAN 11.0 的攻击
python3 -m garak --target_type huggingface --target_name gpt2 --spec probes.dan.Dan_11_0
读取结果
对于加载的每个探针,garak 在生成时会打印进度条。生成完成后,会给出评估该探针在每个检测器上结果的一行。如果任何提示尝试产生了不良行为,响应将被标记为 FAIL,并给出失败率。
以下是 encoding 模块在 GPT-3 变体上的结果:

以及 ChatGPT 的相同结果:

我们可以看到,较新的模型更容易受到基于编码的注入攻击,而 text-babbage-001 仅被发现易受 quoted-printable 和 MIME 编码注入的影响。每行末尾的数字,例如 840/840,表示文本生成总数以及其中有多少看起来表现正常。该数字可能相当高,因为每个提示会进行多次生成——默认情况下为 10 次。
错误会写入 garak.log;运行详情会记录在分析开始和结束时指定的 .jsonl 文件中。analyse/analyse_log.py 中有一个基础分析脚本,它会输出导致最多命中的探针和提示。
欢迎提交 PR 和开启 issue。祝狩猎愉快!
生成器简介
Hugging Face
使用 Pipeline API:
--target_type huggingface(用于在本地运行的 transformers 模型)--target_name- 使用 Hub 中的模型名称。仅生成式模型可用。如果失败且不应失败,请开启 issue 并粘贴你尝试的命令 + 异常信息!
使用 Inference API:
--target_type huggingface.InferenceAPI(用于基于 API 的模型访问)--target_name- Hub 中的模型名称,例如"mosaicml/mpt-7b-instruct"
使用私有端点:
-
--target_type huggingface.InferenceEndpoint(用于私有端点) -
--target_name- 端点 URL,例如https://xxx.us-east-1.aws.endpoints.huggingface.cloud -
(可选)将
HF_INFERENCE_TOKEN环境变量设置为具有 "read" 角色的 Hugging Face API token;登录后参见 https://huggingface.co/settings/tokens
OpenAI
--target_type openai--target_name- 你想使用的 OpenAI 模型。gpt-5-nano速度快,适合测试。- 将
OPENAI_API_KEY环境变量设置为你的 OpenAI API key(例如 "sk-19763ASDF87q6657");登录后参见 https://platform.openai.com/account/api-keys
可识别的模型类型在白名单中,因为插件需要知道使用哪个子 API。Completion 或 ChatCompletion 模型均可。如果你想使用不受支持的模型,你应该会收到一条信息丰富的错误消息,并且请提交 PR / 开启 issue。
Replicate
- 将
REPLICATE_API_TOKEN环境变量设置为你的 Replicate API token,例如 "r8-123XXXXXXXXXXXX";登录后参见 https://replicate.com/account/api-tokens
公共 Replicate 模型:
--target_type replicate--target_name- Replicate 模型名称和哈希,例如"stability-ai/stablelm-tuned-alpha-7b:c49dae36"
私有 Replicate 端点:
--target_type replicate.InferenceEndpoint(用于私有端点)--target_name- 已部署端点的 username/model-name slug,例如elim/elims-llama2-7b
Cohere
--target_type cohere--target_name(可选,默认为command)- 你想测试的特定 Cohere 模型- 将
COHERE_API_KEY环境变量设置为你的 Cohere API key,例如 "aBcDeFgHiJ123456789";登录后参见 https://dashboard.cohere.ai/api-keys
Groq
--target_type groq--target_name- 通过 Groq API 访问的模型名称- 将
GROQ_API_KEY环境变量设置为你的 Groq API key,有关创建 API key 的详细信息,参见 https://console.groq.com/docs/quickstart
ggml
--target_type ggml--target_name- 你想加载的 ggml 模型路径,例如/home/leon/llama.cpp/models/7B/ggml-model-q4_0.bin- 将
GGML_MAIN_PATH环境变量设置为你的 ggmlmain可执行文件路径
REST
rest.RestGenerator 高度灵活,可以连接任何返回纯文本或 JSON 的 REST 端点。它确实需要一些简要配置,通常会产生一个描述你的端点的简短 YAML 文件。示例请参见 https://reference.garak.ai/en/latest/garak.generators.rest.html。
NIM
使用来自 https://build.nvidia.com/ 或其他 NIM 端点的模型。
- 将
NIM_API_KEY环境变量设置为你的身份验证 API 令牌,或在配置 YAML 中指定它
对于聊天模型:
--target_type nim--target_name- NIM 的model名称,例如meta/llama-3.1-8b-instruct
对于补全模型:
--target_type nim.NVOpenAICompletion--target_name- NIM 的model名称,例如bigcode/starcoder2-15b
AWS Bedrock
--target_type bedrock--target_name- Bedrock 模型 ID 或别名,例如anthropic.claude-3-sonnet-20240229-v1:0或claude-3-sonnet- 将
BEDROCK_API_KEY环境变量设置为你的 AWS Bedrock API 密钥;设置说明请参见 https://docs.aws.amazon.com/bedrock/latest/userguide/api-keys-use.html - (可选)设置
BEDROCK_REGION环境变量以指定 AWS 区域(默认为us-east-1)
支持的模型系列包括 Anthropic Claude、Meta Llama、Amazon Titan、AI21 Labs、Cohere 和 Mistral AI 模型。该生成器使用 Converse API 实现对所有模型类型的统一访问。
示例用法: