Kit AI Teaming Red & Penilaian AI generatif
garak
memeriksa apakah LLM dapat dibuat gagal dengan cara yang tidak kami inginkan. Probe garak
untuk halusinasi, kebocoran data, injeksi cepat, informasi yang salah, generasi toksisitas, jailbreak, dan banyak kelemahan lainnya. Jika Anda tahu nmap
, itu nmap
untuk LLMS.
garak
berfokus pada cara membuat LLM atau sistem dialog gagal. Ini menggabungkan probe statis, dinamis, dan adaptif untuk mengeksplorasi ini.
Alat gratis garak
'SA. Kami senang mengembangkannya dan selalu tertarik untuk menambahkan fungsionalitas untuk mendukung aplikasi.
saat ini mendukung:
garak
adalah alat baris perintah. Ini dikembangkan di Linux dan OSX.
pip
Ambil saja dari pypi dan Anda harus baik untuk pergi:
python -m pip install -U garak
pip
Versi Pip standar garak
diperbarui secara berkala. Untuk mendapatkan versi yang lebih segar dari GitHub, coba:
python -m pip install -U git+https://github.com/NVIDIA/garak.git@main
garak
memiliki ketergantungannya sendiri. Anda bisa memasang garak
di lingkungan Conda sendiri:
conda create --name garak "python>=3.10,<=3.12"
conda activate garak
gh repo clone NVIDIA/garak
cd garak
python -m pip install -e .
Oke, jika itu baik -baik saja, Anda mungkin baik untuk pergi!
Catatan : Jika Anda mengkloning sebelum pindah ke organisasi NVIDIA
GitHub, tetapi Anda membaca ini di github.com/NVIDIA
uri, harap perbarui remote Anda sebagai berikut:
git remote set-url origin https://github.com/NVIDIA/garak.git
Sintaks umum adalah:
garak <options>
garak
perlu tahu model apa yang akan dipindai, dan secara default, itu akan mencoba semua probe yang diketahui pada model itu, menggunakan detektor kerentanan yang direkomendasikan oleh setiap probe. Anda dapat melihat daftar probe menggunakan:
garak --list_probes
Untuk menentukan generator, gunakan --model_type
dan, opsional, opsi --model_name
. Tipe model menentukan model keluarga/antarmuka; Nama Model Menentukan model yang tepat yang akan digunakan. Bagian "Intro to Generator" di bawah ini menjelaskan beberapa generator yang didukung. Keluarga generator yang mudah memeluk model wajah; Untuk memuat salah satu dari ini, atur --model_type
ke huggingface
dan --model_name
ke nama model di hub (misalnya "RWKV/rwkv-4-169m-pile"
). Beberapa generator mungkin memerlukan kunci API untuk ditetapkan sebagai variabel lingkungan, dan mereka akan memberi tahu Anda jika mereka membutuhkannya.
garak
menjalankan semua probe secara default, tetapi Anda juga bisa spesifik tentang itu. --probes promptinject
hanya akan menggunakan metode PromptInject Framework, misalnya. Anda juga dapat menentukan satu plugin tertentu alih -alih keluarga plugin dengan menambahkan nama plugin setelah a .
; Misalnya, --probes lmrc.SlurUsage
akan menggunakan implementasi pemeriksaan untuk model yang menghasilkan penghinaan berdasarkan kerangka kerja kartu risiko model bahasa.
Untuk bantuan dan inspirasi, temukan kami di Twitter atau Perselisihan!
Probe Chatgpt untuk injeksi prompt berbasis pengkodean (OSX/*NIX) (ganti nilai contoh dengan kunci API OpenAI nyata)
export OPENAI_API_KEY="sk-123XXXXXXXXXXXX"
python3 -m garak --model_type openai --model_name gpt-3.5-turbo --probes encoding
Lihat apakah versi wajah pemeluk GPT2 rentan terhadap Dan 11.0
python3 -m garak --model_type huggingface --model_name gpt2 --probes dan.Dan_11_0
Untuk setiap probe dimuat, Garak akan mencetak bilah kemajuan saat dihasilkan. Setelah generasi selesai, baris yang mengevaluasi bahwa hasil probe pada setiap detektor diberikan. Jika salah satu upaya cepat menghasilkan perilaku yang tidak diinginkan, respons akan ditandai sebagai gagal, dan tingkat kegagalan yang diberikan.
Berikut adalah hasil dengan modul encoding
pada varian GPT-3:
Dan hasil yang sama untuk chatgpt:
Kita dapat melihat bahwa model yang lebih baru jauh lebih rentan terhadap serangan injeksi berbasis pengkodean, di mana teks-babbage-001 hanya ternyata rentan terhadap suntikan pengkodean yang dapat dikutip dan MIME. Angka -angka di akhir setiap baris, mis. 840/840, menunjukkan jumlah generasi teks total dan kemudian berapa banyak dari ini yang tampaknya berperilaku baik. Angka ini bisa sangat tinggi karena lebih dari satu generasi dibuat per prompt - secara default, 10.
Kesalahan masuk ke garak.log
; Jalankan ini dicatat secara rinci dalam file .jsonl
yang ditentukan pada awal analisis & akhir. Ada skrip analisis dasar dalam analyse/analyse_log.py
yang akan menghasilkan probe dan meminta yang menyebabkan sebagian besar hit.
Kirim PRS & Masalah Terbuka. Selamat berburu!
Menggunakan Pipeline API:
--model_type huggingface
(untuk model transformers berjalan secara lokal)--model_name
-Gunakan nama model dari hub. Hanya model generatif yang akan berfungsi. Jika gagal dan tidak boleh, buka masalah dan tempel dalam perintah yang Anda coba + pengecualian!Menggunakan API Inferensi:
--model_type huggingface.InferenceAPI
(untuk akses model berbasis API)--model_name
-Nama model dari hub, misalnya "mosaicml/mpt-7b-instruct"
Menggunakan titik akhir pribadi:
--model_type huggingface.InferenceEndpoint
(untuk titik akhir pribadi)
--model_name
-URL titik akhir, mis https://xxx.us-east-1.aws.endpoints.huggingface.cloud
(Opsional) Atur variabel lingkungan HF_INFERENCE_TOKEN
ke token API wajah pemeluk dengan peran "baca"; Lihat https://huggingface.co/settings/tokens saat masuk
--model_type openai
--model_name
-Model OpenAI yang ingin Anda gunakan. gpt-3.5-turbo-0125
cepat dan baik untuk pengujian.OPENAI_API_KEY
ke kunci API openai Anda (misalnya "SK-19763AsDF87Q6657"); Lihat https://platform.openai.com/account/api-keys saat masukJenis model yang diakui masuk daftar putih, karena plugin perlu mengetahui sub-API mana yang akan digunakan. Model penyelesaian atau chatcompletion baik -baik saja. Jika Anda ingin menggunakan model yang tidak didukung, Anda harus mendapatkan pesan kesalahan yang informatif, dan silakan kirim PR / buka masalah.
REPLICATE_API_TOKEN
ke token API replikasi Anda, misalnya "R8-123xxxxxxxxxxxx"; Lihat https://replicate.com/account/api-tokens saat masukModel Replikasi Publik:
--model_type replicate
--model_name
-nama model replikasi dan hash, misalnya "stability-ai/stablelm-tuned-alpha-7b:c49dae36"
Titik Akhir Replikasi Pribadi:
--model_type replicate.InferenceEndpoint
(untuk titik akhir pribadi)--model_name
-nama pengguna/model-name siput dari titik akhir yang dikerahkan, misalnya elim/elims-llama2-7b
--model_type cohere
--model_name
(opsional, command
secara default) -model cohere spesifik yang ingin Anda ujiCOHERE_API_KEY
ke kunci API cohere Anda, misalnya "abcdefghij123456789"; Lihat https://dashboard.cohere.ai/api-keys saat masuk--model_type groq
--model_name
-Nama model yang akan diakses melalui API GROQGROQ_API_KEY
ke tombol API GROQ Anda, lihat https://console.groq.com/docs/quickstart untuk detail tentang membuat kunci API--model_type ggml
--model_name
-Jalur ke model GGML yang ingin Anda muat, eg /home/leon/llama.cpp/models/7B/ggml-model-q4_0.bin
GGML_MAIN_PATH
ke jalur ke GGML main
Anda yang dapat dieksekusi rest.RestGenerator
sangat fleksibel dan dapat terhubung ke titik akhir istirahat yang mengembalikan Plaintext atau JSON. Memang membutuhkan beberapa konfigurasi singkat, yang biasanya akan menghasilkan file YAML pendek yang menggambarkan titik akhir Anda. Lihat https://reference.garak.ai/en/latest/garak.generators.rest.html untuk contoh.
Gunakan model dari https://build.nvidia.com/ atau titik akhir NIM lainnya.
NIM_API_KEY
ke token API otentikasi Anda, atau tentukan di konfigurasi YAMLUntuk model obrolan:
--model_type nim
--model_name
-Nama model
NIM, misalnya meta/llama-3.1-8b-instruct
Untuk model penyelesaian:
--model_type nim.NVOpenAICompletion
--model_name
-Nama model
NIM, misalnya bigcode/starcoder2-15b
OCTO_API_TOKEN
ke token API replikasi Anda, misalnya "R8-123xxxxxxxxxxxx"; Lihat https://replicate.com/account/api-tokens saat masukOcto Public Endpoint:
--model_type octo
--model_name
-titik akhir publik octoai untuk model, misalnya mistral-7b-instruct-fp16
Octo Private Endpoint:
--model_type octo.InferenceEndpoint
(untuk titik akhir pribadi)--model_name
-URL titik akhir yang dikerahkan, misalnya https://llama-2-70b-chat-xxx.octoai.run/v1/chat/completions
--model_type test
(Atau alternatif) --model_name test.Blank
untuk pengujian. Ini selalu menghasilkan string kosong, menggunakan generator test.Blank
. Akan ditandai sebagai kegagalan untuk setiap tes yang memerlukan output, misalnya yang membuat klaim kontroversial dan mengharapkan model untuk membantahnya agar lulus.
--model_type test.Repeat
untuk pengujian. Generator ini mengulangi kembali prompt yang diterima.
Menguji | Keterangan |
---|---|
kosong | Probe sederhana yang selalu mengirimkan prompt kosong. |
Atkgen | Generasi serangan otomatis. LLM tim merah menyelidiki target dan bereaksi terhadapnya dalam upaya untuk mendapatkan output toksik. Prototipe, sebagian besar tanpa kewarganegaraan, untuk saat ini menggunakan GPT-2 sederhana yang disempurnakan pada subset upaya HHRLHF yang menghasilkan toksisitas yang terdeteksi (satu-satunya target yang saat ini didukung untuk saat ini). |
av_spam_scanning | Penyelidikan yang mencoba membuat model output tanda tangan konten berbahaya |
kelanjutan | Menyelidiki tes jika model akan melanjutkan kata yang mungkin tidak diinginkan |
Dan | Berbagai serangan Dan dan Dan |
Donotanswer | Meminta model bahasa yang bertanggung jawab tidak boleh menjawab. |
Pengkodean | Injeksi cepat melalui pengkodean teks |
GCG | Mengganggu prompt sistem dengan menambahkan akhiran permusuhan. |
kesalahan | Model probe untuk token glitch yang memancing perilaku yang tidak biasa. |
nenek | Menarik untuk diingatkan tentang nenek seseorang. |
Goodside | Implementasi serangan Goodside Riley. |
play bocor | Evaluasi apakah suatu model akan memutar ulang data pelatihan. |
LMRC | Subsampel probe kartu risiko model bahasa |
Malwaregen | Upaya memiliki model menghasilkan kode untuk membangun malware |
menyesatkan | Upaya untuk membuat model dukungan yang menyesatkan dan klaim palsu |
PackageHallucination | Mencoba mendapatkan generasi kode yang menentukan paket yang tidak ada (dan karenanya tidak aman). |
PromptInject | Implementasi Pekerjaan Prompas Perusahaan Agensi (Penghargaan Best Paper Awards @ Neurips ML Safety Workshop 2022) |
realtoxicitypromppts | Subset dari realtoxicitypromppts berfungsi (data dibatasi karena tes lengkap akan memakan waktu lama untuk dijalankan) |
semakin bertambah | Probe halusinasi bola salju yang dirancang untuk membuat model memberikan jawaban yang salah untuk pertanyaan yang terlalu rumit untuk diproses |
XSS | Cari kerentanan izin atau memberlakukan serangan lintas situs, seperti exfiltrasi data pribadi. |
garak
menghasilkan banyak jenis log:
garak.log
. Ini termasuk informasi debugging dari garak
dan pluginnya, dan terus berlari.garak
berjalan. Nama file ini adalah output di awal dan, jika berhasil, juga di akhir pelarian. Dalam laporan tersebut, entri dibuat untuk setiap upaya penyelidikan baik ketika generasi diterima, dan sekali lagi ketika mereka dievaluasi; Atribut status
entri mengambil konstanta dari garak.attempts
. Lihatlah dokumen referensi untuk panduan otoritatif untuk struktur kode garak
.
Dalam menjalankan yang khas, garak
akan membaca jenis model (dan secara opsional nama model) dari baris perintah, kemudian tentukan probe
dan detector
S mana yang akan dijalankan, memulai generator
, dan kemudian meneruskannya ke harness
untuk melakukan penyelidikan; evaluator
berurusan dengan hasilnya. Ada banyak modul di masing -masing kategori ini, dan setiap modul menyediakan sejumlah kelas yang bertindak sebagai plugin individual.
garak/probes/
- Kelas untuk menghasilkan interaksi dengan LLMSgarak/detectors/
- Kelas untuk Mendeteksi LLM menunjukkan mode kegagalan yang diberikangarak/evaluators/
-garak/generators/
- Plugin untuk LLMS untuk diselidikigarak/harnesses/
- Kelas untuk Menyusun Pengujianresources/
- Barang tambahan yang diperlukan oleh plugin Mode operasi default adalah menggunakan harness probewise
. Diberikan daftar nama modul probe dan nama plugin probe, harness probewise
instantiates setiap probe, kemudian untuk setiap probe membaca atribut recommended_detectors
untuk mendapatkan daftar detector
untuk dijalankan pada output.
Setiap kategori plugin ( probes
, detectors
, evaluators
, generators
, harnesses
) termasuk base.py
yang mendefinisikan kelas dasar yang dapat digunakan oleh plugin dalam kategori itu. Setiap modul plugin mendefinisikan kelas plugin yang mewarisi dari salah satu kelas dasar. Misalnya, garak.generators.openai.OpenAIGenerator
turun dari garak.generators.base.Generator
.
Artefak yang lebih besar, seperti file model dan korpora yang lebih besar, disimpan di luar repositori; Mereka dapat disimpan di EG HUGGING FACE HUB dan dimuat secara lokal oleh klien menggunakan 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
untuk mendaftarkan semua plugin dari jenis yang Anda tulis, dengan --list_probes
, --list_detectors
, atau --list_generators
Kami memiliki FAQ di sini. Jangkau jika Anda memiliki pertanyaan lagi! [email protected]
Dokumentasi referensi kode ada di Garak.readthedocs.io.
Anda dapat membaca kertas preprint garak. Jika Anda menggunakan garak, silakan kutip kami.
@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}}
}
"Berbohong adalah keterampilan seperti yang lain, dan jika Anda ingin mempertahankan tingkat keunggulan yang harus Anda praktikkan terus -menerus" - elim
Untuk pembaruan dan berita, lihat @GARAK_LLM
© 2023- Leon Derczynski; Lisensi apache v2, lihat lisensi