garak 项目介绍
项目概述
garak
是一个专为大规模语言模型(LLM)设计的漏洞扫描工具,旨在检测诸如幻觉、数据泄露、提示注入、错误信息传播、生成毒性内容以及其他潜在弱点。可以将其视作 LLMs 的 nmap
,着重于探索使对话系统或语言模型失败的方法,通过静态、动态和自适应的探测技术来实现这些目标。
garak
是一个免费工具,开发团队对它的开发充满热情,并且希望不断拓展其功能,以支持更多的应用场景。
支持的 LLM
目前,garak
支持以下生成模型和接口:
- hugging face hub 生成模型
- replicate 文本模型
- openai api 的聊天和续写模型
- litellm
- 通过 REST 接口访问的几乎所有内容
- 支持 gguf 模型,如 llama.cpp 版本 1046 及以上
安装指南
使用 pip
安装
标准安装通过 PyPI 完成,只需执行以下命令即可:
python -m pip install -U garak
从 GitHub 安装开发版本
如果希望获得更新的版本,可以通过以下命令从 GitHub 安装:
python -m pip install -U git+https://github.com/leondz/garak.git@main
源码克隆安装
garak
有其自身的依赖,可以在独立的 Conda 环境中安装:
conda create --name garak "python>=3.10,<=3.12"
conda activate garak
gh repo clone leondz/garak
cd garak
python -m pip install -e .
运行 garak
一般语法是:
garak <options>
garak
需要知道要扫描哪个模型,默认情况下,它会对该模型应用所有已知的探针,并使用每个探针推荐的脆弱性检测器。可以使用 garak --list_probes
查看探针列表。通过 --model_type
和(可选的)--model_name
来指定模型类型和名称。
例如,以下命令用于检查 ChatGPT 的基于编码的提示注入(需要设置 OPENAI_API_KEY):
export OPENAI_API_KEY="sk-123XXXXXXXXXXXX"
python3 -m garak --model_type openai --model_name gpt-3.5-turbo --probes encoding
探针概览
以下是 garak
支持的一些探针:
探针 | 描述 |
---|---|
blank | 总是发送空提示的简单探针。 |
atkgen | 自动攻击生成,红队 LLM 探针模拟目标并与其交互,尝试生成毒性输出。 |
encoding | 通过文本编码进行的提示注入。 |
dan | 各种DAN 和类似攻击。 |
日志信息
garak
生成多种日志:
garak.log
:包括调试信息,持续记录所有运行。- 当前运行报告,结构化为 JSONL,每次运行都会创建新的报告文件。
代码结构
garak
的代码结构模块化,主要包括以下几个部分:
garak/probes/
- 生成与 LLM 交互的类garak/detectors/
- 检测 LLM 是否出现给定失败模式的类garak/evaluators/
- 评估报告机制garak/generators/
- 要探测的 LLM 插件garak/harnesses/
- 结构化测试的类
如何参与开发
想要添加自己的插件?可以参考其他插件的实现,继承基类并尽量少进行覆盖。测试新代码可以通过交互式 Python 环境或运行扫描测试插件。
常见问题
详细的常见问题解答可在 FAQ 查看。
如何引用 garak
如果在使用 garak
,请参考我们的 前置论文 进行引用。