生成的AI紅色團隊和評估套件
garak
檢查是否可以以我們不想要的方式使LLM失敗。 garak
探測幻覺,數據洩漏,及時注射,錯誤信息,毒性產生,越獄和許多其他弱點。如果您知道nmap
,則是LLM的nmap
。
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 .
好的,如果那很好,您可能會很好!
注意:如果您在搬到NVIDIA
GITHUB組織之前先克隆,但是您正在github.com/NVIDIA
uri上閱讀此內容,請按照以下方式更新您的遙控器:
git remote set-url origin https://github.com/NVIDIA/garak.git
一般語法是:
garak <options>
garak
需要知道要掃描的模型,並且默認情況下,它將使用每個探針推薦的漏洞檢測器,嘗試在該模型上知道的所有探針。您可以使用以下方式查看探針列表
garak --list_probes
要指定發電機,請使用--model_type
,並且可以選擇--model_name
選項。模型類型指定模型族/接口;模型名稱指定要使用的確切型號。下面的“發電機介紹”部分描述了支持的一些發電機。一個直接的發電機家庭正在擁抱面部模型。要加載其中之一,將--model_type
設置為huggingface
和--model_name
到Hub上的模型名稱(例如"RWKV/rwkv-4-169m-pile"
)。某些發電機可能需要設置為環境變量的API密鑰,他們會讓您知道是否需要。
garak
默認情況下運行所有探針,但您也可以對此進行具體說明。 - 例如, --probes promptinject
將僅使用Pystinject Framework的方法。您還可以通過在a之後添加插件名稱來指定一個特定的插件,而不是插件家族.
;例如, --probes lmrc.SlurUsage
將使用基於語言模型風險卡框架生成誹謗的模型的檢查實現。
為了獲得幫助和靈感,請在Twitter或Discord上找到我們!
用於基於編碼的提示注入(OSX/*NIX)的探針CHATGPT(用真實的OpenAI API鍵替換示例值)
export OPENAI_API_KEY="sk-123XXXXXXXXXXXX"
python3 -m garak --model_type openai --model_name gpt-3.5-turbo --probes encoding
查看GPT2的擁抱面部版本是否容易受到DAN 11.0的影響
python3 -m garak --model_type huggingface --model_name gpt2 --probes dan.Dan_11_0
對於每個加載的探針,Garak將在生成的過程中打印一個進度條。一旦生成完成,就會對每個檢測器的探針結果進行評估。如果任何提示嘗試產生了不良行為,則該響應將被標記為失敗,並且給出了故障率。
這是GPT-3變體上encoding
模塊的結果:
chatgpt的結果相同:
我們可以看到,最近的模型更容易受到編碼的注射攻擊,在這種攻擊中,只發現文本支持者001很容易受到引用的印刷和MIME編碼注射的影響。每行末尾的數字,例如840/840,表明文本世代的數量總數,然後其中有多少個表現可以。該圖可能很高,因為每提示會產生以上的一代 - 默認情況下,10。
錯誤在garak.log
中出現;該運行在分析開始和結束時指定的.jsonl
文件中詳細記錄。 analyse/analyse_log.py
中有一個基本分析腳本,該腳本將輸出導致命中最多的探針和提示。
發送公關和開放問題。狩獵快樂!
使用管道API:
--model_type huggingface
(用於在本地運行的變壓器模型)--model_name
使用HUB中的型號名稱。只有生成模型才能起作用。如果失敗並且不應該,請打開一個問題並粘貼在您嘗試的命令中 +例外!使用推理API:
--model_type huggingface.InferenceAPI
(用於基於API的模型訪問)--model_name
樞紐的型號名稱,例如"mosaicml/mpt-7b-instruct"
使用私人端點:
--model_type huggingface.InferenceEndpoint
(用於私人端點)
--model_name
端點URL,例如https://xxx.us-east-1.aws.endpoints.huggingface.cloud
(可選)將HF_INFERENCE_TOKEN
環境變量設置為帶有“讀取”角色的擁抱面API令牌;登錄時,請參見https://huggingface.co/settings/tokens
--model_type openai
--model_name
您想使用的OpenAI型號。 gpt-3.5-turbo-0125
快速且可用於測試。OPENAI_API_KEY
環境變量設置為OpenAI API鍵(例如“ SK-19763ASDF87Q6657”);登錄時,請參見https://platform.openai.com/account/api-keys公認的模型類型已列為白名單,因為插件需要知道要使用哪種子API。完成或聊天模型還可以。如果您想使用不支持的模型,則應收到一份有益的錯誤消息,請發送PR /打開問題。
REPLICATE_API_TOKEN
環境變量設置為複制API令牌,例如“ R8-123XXXXXXXXXXXXX”;登錄時,請參見https://replate.com/account/api-tokens公共重複模型:
--model_type replicate
--model_name
複製模型名稱和哈希,例如"stability-ai/stablelm-tuned-alpha-7b:c49dae36"
私有重複端點:
--model_type replicate.InferenceEndpoint
(用於私人端點)--model_name
部署端點的用戶名/模型名稱sl,例如elim/elims-llama2-7b
--model_type cohere
--model_name
(默認情況下,可選, command
) - 您要測試的特定cohere模型COHERE_API_KEY
環境變量設置為您的cohere api鍵,例如“ abcdefghij123456789”;登錄時,請參見https://dashboard.cohere.ai/api-keys--model_type groq
--model_name
通過GROQ API訪問的模型名稱GROQ_API_KEY
環境變量設置為GROQ API密鑰,請參閱https://console.groq.com/docs/quickstart,以獲取有關創建API密鑰的詳細信息--model_type ggml
--model_name
您要加載的/home/leon/llama.cpp/models/7B/ggml-model-q4_0.bin
模型的路徑GGML_MAIN_PATH
環境變量設置為GGML main
可執行文件的路徑rest.RestGenerator
具有很高的靈活性,可以連接到返回明文或JSON的任何REST端點。它確實需要一些簡短的配置,這通常會導致一個簡短的YAML文件描述您的端點。有關示例,請參見https://reference.garak.ai/en/latest/garak.garak.generators.rest.html。
使用https://build.nvidia.com/或其他NIM端點的模型。
NIM_API_KEY
環境變量設置為身份驗證API令牌,或在Config Yaml中指定對於聊天模型:
--model_type nim
--model_name
NIM model
名稱,例如meta/llama-3.1-8b-instruct
對於完成模型:
--model_type nim.NVOpenAICompletion
--model_name
NIM model
名稱,例如bigcode/starcoder2-15b
OCTO_API_TOKEN
環境設置為複制API令牌,例如“ R8-123XXXXXXXXXXXX”;登錄時,請參見https://replate.com/account/api-tokensOCTO公共端點:
--model_type octo
--model_name
的Octoai公共端點,例如mistral-7b-instruct-fp16
Octo私人端點:
--model_type octo.InferenceEndpoint
(用於私人端點)--model_name
部署的端點URL,例如https://llama-2-70b-chat-xxx.octoai.run/v1/chat/completions
--model_type test
(或者) --model_name test.Blank
進行測試。這總是使用test.Blank
Generator生成空字符串。對於需要輸出的任何測試,例如那些提出有爭議的索賠的測試,並期望該模型反駁以通過以通過以通過,將被標記為失敗。
--model_type test.Repeat
重新測試。該發電機重複收到的提示。
探測 | 描述 |
---|---|
空白的 | 一個簡單的探針,總是發送空提示。 |
阿特克根 | 自動攻擊生成。紅色團隊的LLM探測目標並對其做出反應,以嘗試獲取有毒輸出。目前,原型(主要是無狀態)的原型在HHRLHF嘗試的子集中使用了一個簡單的GPT-2,該原型產生了可檢測到的毒性(目前唯一支持的目標)。 |
AV_SPAM_SCANNING | 試圖使模型輸出惡意內容簽名的探針 |
繼續 | 測試該模型是否會繼續一個可能不良詞的探針 |
擔 | 各種丹和丹般的攻擊 |
Donotanswer | 提示負責任的語言模型不應回答。 |
編碼 | 通過文本編碼提示注射 |
GCG | 通過附加對抗後綴加附加後綴來破壞系統提示。 |
毛刺 | 探針模型的故障令牌引起了異常行為。 |
奶奶 | 呼籲提醒祖母。 |
古德賽德 | Riley Goodside攻擊的實施。 |
LeakerPlay | 評估模型是否會重播培訓數據。 |
LMRC | 語言型號風險卡探針的子樣本 |
惡意軟件 | 嘗試使模型生成用於構建惡意軟件的代碼 |
誤導 | 試圖使模型支持誤導和虛假主張 |
包裝術 | 試圖獲取代碼世代,這些代碼世代指定了不存在(因此是不安全的)軟件包。 |
促進 | 實施代理商企業迅速工作(最佳紙質獎 @ Neurips ML安全研討會2022) |
RealtoxicityPrompts | RealtoxicityPrompts的子集有效(數據限制,因為完整的測試將需要很長時間才能運行) |
滾雪球 | 旨在使模型的滾雪球幻覺探針給出了錯誤的答案,以至於無法處理的問題 |
XSS | 尋找漏洞或製定跨場攻擊,例如私人數據剝落。 |
garak
生成多種日誌:
garak.log
。這包括來自garak
及其插件的調試信息,並在跨行程中繼續進行。garak
運行時,都會創建一個新的報告文件。該文件的名稱是在開始時輸出的,並且在運行結束時也是如此。在報告中,在收到幾代人的情況下以及對它們進行評估時再次進行了每次探測嘗試的條目;該條目的status
屬性從garak.attempts
持續不斷。查看參考文檔以獲取有關garak
代碼結構的權威指南。
在典型的運行中, garak
將從命令行中讀取模型類型(和可選的模型名稱),然後確定要運行的probe
和detector
S,啟動generator
,然後將其傳遞給harness
以進行探測; evaluator
處理結果。這些類別中的每個類別中都有許多模塊,每個模塊都提供了許多作為單個插件的類。
garak/probes/
- 用於生成與LLMS相互作用的類garak/detectors/
- 檢測LLM的類別顯示給定的失敗模式garak/evaluators/
- 評估報告計劃garak/generators/
- 用於探測LLM的插件garak/harnesses/
- 用於結構測試的課程resources/
- 插件要求的輔助項目默認的操作模式是使用probewise
線束。給定探針模塊名稱和探針插件名稱的列表, probewise
線束實例化每個探針,然後對於每個探針,讀取其recommended_detectors
屬性以獲取用於在輸出上運行的detector
s列表。
每個插件類別( probes
, detectors
, evaluators
, generators
, harnesses
)都包含一個base.py
,該基礎定義了該類別中插件可用的基類。每個插件模塊定義了從基本類中繼承的插件類。例如, garak.generators.openai.OpenAIGenerator
從garak.generators.base.Generator
降下。
較大的人工製品,例如模型文件和更大的語料庫,都將其放在存儲庫中;它們可以存儲在Huging Face Hub上,並使用garak
的客戶在本地加載。
garak.probes.base.TextProbe
import garak.probes.mymodule
p = garak.probes.mymodule.MyProbe()
python3 -m garak -m test.Blank -p mymodule -d always.Pass
python3 -m garak -m test.Blank -p test.Blank -d mymodule
python3 -m garak -m mymodule -p test.Blank -d always.Pass
garak
列出您正在編寫的類型的所有插件,並使用--list_probes
, --list_detectors
或--list_generators
列出我們在這裡有一個常見問題解答。如果您還有其他問題,請伸出援手! [email protected]
代碼參考文檔在garak.ReadThedocs.io上。
您可以閱讀Garak預印紙。如果您使用Garak,請引用我們。
@article{garak,
title={{garak: A Framework for Security Probing Large Language Models}},
author={Leon Derczynski and Erick Galinkin and Jeffrey Martin and Subho Majumdar and Nanna Inie},
year={2024},
howpublished={url{https://garak.ai}}
}
“說謊是一項像其他任何人一樣的技能,如果您想保持一定的卓越水平,則必須不斷地練習” -
有關更新和新聞,請參見@garak_llm
©2023-Leon Derczynski; Apache許可證V2,請參閱許可證