模块化LLM漏洞扫描器,利用静态、动态和自适应探测手段,跨多个模型提供商检测幻觉、数据泄露、提示注入、越狱及毒性内容。
生成式AI红队与评估套件
garak 检查 LLM 是否可能以我们不希望的方式失败。garak 探测幻觉、数据泄露、提示注入、虚假信息、毒性内容生成、越狱以及许多其他弱点。如果你熟悉 nmap 或 msf / Metasploit 框架,garak 对 LLM 所做的与它们类似。
garak 专注于使 LLM 或对话系统失败的方法。它结合了静态、动态和自适应探测来探索这一点。
garak 是一个免费工具。我们热爱开发它,并始终有兴趣添加功能以支持应用程序。
当前支持:
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 有其自身的依赖项。您可以在自己的 Conda 环境中安装 garak:```
conda create --name garak "python>=3.10,<=3.12"
conda activate garak
gh repo clone NVIDIA/garak
cd garak
python -m pip install -e .
OK, if that went fine, you're probably good to go!
**Note**: if you cloned before the move to the `NVIDIA` GitHub organisation, but you're reading this at the `github.com/NVIDIA` URI, please update your remotes as follows:```
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 默认运行所有探针,但你也可以指定具体探针。例如,--probes promptinject 将仅使用 PromptInject 框架的方法。你也可以通过添加插件名称(在 . 之后)来指定一个具体的插件,而不是整个插件系列;例如,--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 --probes encoding
检查 Hugging Face 版本的 GPT2 是否容易受到 DAN 11.0 的攻击```
python3 -m garak --target_type huggingface --target_name gpt2 --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。狩猎愉快!
使用 Pipeline API:
--target_type huggingface(用于本地运行 transformers 模型)--target_name - 使用 Hub 中的模型名称。仅支持生成式模型。如果失败且不应失败,请提交 issue 并粘贴您尝试的命令和异常!使用推理 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 环境变量设置为具有“读取”角色的 Hugging Face API 令牌;登录后请参见 https://huggingface.co/settings/tokens
--target_type openai--target_name - 您想要使用的 OpenAI 模型。gpt-5-nano 速度快,适合测试。OPENAI_API_KEY 环境变量设置为您的 OpenAI API 密钥(例如 "sk-19763ASDF87q6657");登录后请参见 https://platform.openai.com/account/api-keys已知的模型类型已列入白名单,因为插件需要知道使用哪个子 API。Completion 或 ChatCompletion 模型都是可以的。如果您想使用不受支持的模型,您会收到一条信息性错误消息,请发送 PR 或提交 issue。
REPLICATE_API_TOKEN 环境变量设置为您的 Replicate API 令牌,例如 "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 - 来自已部署端点的用户名/模型名称段,例如 elim/elims-llama2-7b--target_type cohere--target_name(可选,默认为 command) - 您要测试的特定 Cohere 模型COHERE_API_KEY 环境变量设置为您的 Cohere API 密钥,例如 "aBcDeFgHiJ123456789";登录后请参见 https://dashboard.cohere.ai/api-keys--target_type groq--target_name - 通过 Groq API 访问的模型名称GROQ_API_KEY 环境变量设置为您的 Groq API 密钥,有关创建 API 密钥的详细信息请参见 https://console.groq.com/docs/quickstart--target_type ggml--target_name - 您要加载的 ggml 模型路径,例如 /home/leon/llama.cpp/models/7B/ggml-model-q4_0.binGGML_MAIN_PATH 环境变量设置为您的 ggml main 可执行文件的路径rest.RestGenerator 高度灵活,可以连接到任何返回纯文本或 JSON 的 REST 端点。它需要一些简短的配置,通常会生成一个描述您端点的简短 YAML 文件。示例请参见 https://reference.garak.ai/en/latest/garak.generators.rest.html。
使用来自 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--target_type bedrock--target_name - Bedrock 模型 ID 或别名,例如 anthropic.claude-3-sonnet-20240229-v1:0 或 claude-3-sonnetBEDROCK_API_KEY 环境变量设置为您的 AWS Bedrock API 密钥;设置说明请参见 https://docs.aws.amazon.com/bedrock/latest/userguide/api-keys-use.htmlBEDROCK_REGION 环境变量设置为指定 AWS 区域(默认为 us-east-1)支持的模型系列包括 Anthropic Claude、Meta Llama、Amazon Titan、AI21 Labs、Cohere 和 Mistral AI 模型。该生成器使用 Converse API 跨所有模型类型提供统一访问。