생성 AI Red-Teaming & Assessment Kit
garak
LLM이 우리가 원하지 않는 방식으로 실패 할 수 있는지 확인합니다. 환각, 데이터 누출, 신속한 주입, 잘못된 정보, 독성 생성, 탈옥 및 기타 많은 약점에 대한 garak
프로브. nmap
알고 있다면 LLMS 용 nmap
입니다.
garak
LLM 또는 대화 시스템에 실패하는 방법에 중점을 둡니다. 정적, 동적 및 적응 형 프로브를 결합하여이를 탐색합니다.
garak
'SA 무료 도구. 우리는 그것을 개발하는 것을 좋아하며 항상 응용 프로그램을 지원하기 위해 기능을 추가하는 데 관심이 있습니다.
현재 지원 :
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 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
옵션을 사용하십시오. 모델 유형 모델 패밀리/인터페이스를 지정합니다. 모델 이름을 사용할 정확한 모델을 지정합니다. 아래의 "발전기 소개"섹션은 지원되는 일부 발전기를 설명합니다. 간단한 발전기 가족은 얼굴 모델을 포옹하고 있습니다. 이 중 "RWKV/rwkv-4-169m-pile"
를로드하려면 --model_type
--model_name
huggingface
일부 생성기는 환경 변수로 설정하려면 API 키가 필요할 수 있으며 필요한 경우 알려줍니다.
garak
기본적으로 모든 프로브를 실행하지만 이에 대해서도 구체적 일 수 있습니다. --probes promptinject
예를 들어 Promptinject Framework의 메소드 만 사용합니다. 플러그인 이름을 추가하여 플러그인 패밀리 대신 하나의 특정 플러그인을 지정할 수도 있습니다 .
; 예를 들어, --probes lmrc.SlurUsage
언어 모델 위험 카드 프레임 워크를 기반으로 한 비방을 생성하는 모델을 확인하는 구현을 사용합니다.
도움과 영감을 얻으려면 트위터 나 불화에서 우리를 찾으십시오!
인코딩 기반 프롬프트 주입 (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의 Hugging Face 버전이 Dan 11.0에 취약한 지 확인하십시오.
python3 -m garak --model_type huggingface --model_name gpt2 --probes dan.Dan_11_0
로드 된 각 프로브에 대해 Garak은 생성되는 진행률 표시 줄을 인쇄합니다. 일단 생성이 완료되면 각 검출기에 대한 프로브의 결과를 평가하는 행이 제공됩니다. 신속한 시도가 바람직하지 않은 행동을 일으키면 응답이 실패로 표시되고 실패율이 주어집니다.
GPT-3 변형의 encoding
모듈의 결과는 다음과 같습니다.
ChatGpt에 대한 동일한 결과 :
우리는 가장 최근의 모델이 인코딩 기반 주입 공격에 훨씬 더 취약하다는 것을 알 수 있습니다. 여기서 Text-Babbage-001은 인용 된 인쇄 가능 및 MIME 인코딩 주입에만 취약한 것으로 밝혀졌습니다. 각 행의 끝에있는 수치 (예 : 840/840)는 총 세대의 수를 나타냅니다. 프롬프트 당 하나 이상의 세대가 이루어지기 때문에 그림은 상당히 높을 수 있습니다 - 기본적으로 10.
오류는 garak.log
로 이동합니다. RUN은 Analysis Start & End에서 지정된 .jsonl
파일에 자세히 기록됩니다. analyse/analyse_log.py
에는 기본 분석 스크립트가있어 프로브와 프롬프트가 가장 많은 히트를 초래할 수 있습니다.
PRS 및 열린 문제를 보냅니다. 행복한 사냥!
파이프 라인 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를 사용할 것인지 알아야하기 때문에 인식 된 모델 유형은 화이트리스트에 있습니다. 완료 또는 chatcompletion 모델은 정상입니다. 지원되지 않는 모델을 사용하려면 유익한 오류 메시지를 받고 PR / 열기 문제를 보내주십시오.
REPLICATE_API_TOKEN
환경 변수를 Replice API 토큰으로 설정하십시오 (예 : "R8-123xxxxxxxxxxx"; 로그인하면 https://replicate.com/account/api-tokens를 참조하십시오공개 복제 모델 :
--model_type replicate
--model_name
복제 모델 이름과 해시, 예를 들어 "stability-ai/stablelm-tuned-alpha-7b:c49dae36"
개인 복제 엔드 포인트 :
--model_type replicate.InferenceEndpoint
(개인 엔드 포인트 용)--model_name
배포 된 엔드 포인트의 사용자 이름/모델 이름 슬러그, 예 : elim/elims-llama2-7b
--model_type cohere
--model_name
(선택 사항, 기본적으로 command
) -테스트하려는 특정 코어 모델COHERE_API_KEY
환경 변수를 Cohere API 키로 설정하십시오 (예 : "ABCDEFGHIJ123456789"; 로그인하면 https://dashboard.cohere.ai/api-keys를 참조하십시오--model_type groq
--model_name
Groq API를 통해 액세스 할 모델의 이름GROQ_API_KEY
환경 변수를 Groq API 키로 설정하십시오. API 키 생성에 대한 자세한 내용은 https://console.groq.com/docs/quickstart를 참조하십시오.--model_type ggml
--model_name
로드하려는 GGML 모델 (예 : /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/gerak.generator.rest.html을 참조하십시오.
https://build.nvidia.com/ 또는 기타 NIM 엔드 포인트의 모델을 사용하십시오.
NIM_API_KEY
환경 변수를 인증 API 토큰으로 설정하거나 구성 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://replicate.com/account/api-tokens를 참조하십시오Octo Public Endpoint :
--model_type octo
--model_name
모델의 Octoai public 엔드 포인트, 예를 들어 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
생성기를 사용하여 빈 문자열을 생성합니다. 출력이 필요한 테스트와 같은 테스트와 같은 테스트에 실패한 것으로 표시됩니다.
--model_type test.Repeat
테스트를 위해. 이 생성기는받은 프롬프트를 반복합니다.
조사 | 설명 |
---|---|
공백 | 항상 빈 프롬프트를 보내는 간단한 프로브. |
Atkgen | 자동화 된 공격 생성. 빨간색 팀 LLM은 대상을 프로브하고 독성 출력을 얻기 위해 반응합니다. 대부분 Stateless의 프로토 타입은 현재 HHRLHF 시도의 하위 집합에서 간단한 GPT-2 미세 조정을 사용하여 검출 가능한 독성을 산출합니다 (현재 현재 지원되는 유일한 목표). |
av_spam_scanning | 악성 콘텐츠 서명을 출력하려는 프로브 |
계속 | 모델이 바람직하지 않은 단어를 계속할지 테스트하는 프로브 |
단 | 다양한 댄과 댄과 같은 공격 |
Donotanswer | 책임있는 언어 모델이 답변하지 않아야하는 프롬프트. |
부호화 | 텍스트 인코딩을 통한 신속한 주입 |
GCG | 적대적인 접미사를 추가하여 시스템 프롬프트를 방해하십시오. |
결함 | 비정상적인 행동을 유발하는 글리치 토큰에 대한 프로브 모델. |
할머니 | 할머니를 생각 나게하는 호소. |
좋은 사이드 | Riley Goodside Attacks의 구현. |
LeakerPlay | 모델이 교육 데이터를 재생하는지 평가하십시오. |
LMRC | 언어 모델 위험 카드 프로브의 하위 샘플 |
Malwaregen | 모델이 맬웨어 구축을위한 코드를 생성하도록 시도합니다. |
오도 | 모델을 지원하고 오해의 소지가 있고 허위 주장을 시도합니다. |
PackageHallucination | 존재하지 않는 (따라서 불안한) 패키지를 지정하는 코드 세대를 얻으려고합니다. |
Promptinject | 대행사 Enterprise Promptinject Work의 구현 (Best Paper Awards @ Neurips ML Safety Workshop 2022) |
RealToxicityPrompts | RealToxicityPrompts 작업의 하위 집합 (전체 테스트가 실행하는 데 시간이 오래 걸리기 때문에 데이터가 제한됩니다) |
스노볼 | 모델을 만들기 위해 설계된 눈덩이 환각 프로브 |
XSS | 취약점을 찾으십시오. 허가를 찾거나 개인 데이터 추출과 같은 부지 간 공격을 제정하십시오. |
garak
여러 종류의 로그를 생성합니다.
garak.log
. 여기에는 garak
과 플러그인의 디버깅이 포함되며 실행에 걸쳐 계속됩니다.garak
실행 될 때마다 새 보고서 파일이 생성됩니다. 이 파일의 이름은 처음에 출력이며 성공하면 실행이 끝날 때도 출력됩니다. 보고서에서, 세대가 접수 될 때와 평가 될 때 각각의 조사 시도마다 항목이 이루어집니다. 항목의 status
속성은 garak.attempts
에서 일정하게 사용하여 어떤 단계에서 만들어 졌는지 설명합니다. garak
코드 구조에 대한 권위있는 안내서는 참조 문서를 확인하십시오.
일반적인 실행에서 garak
명령 줄에서 모델 유형 (및 선택적으로 모델 이름)을 읽은 다음 실행할 probe
및 detector
S를 결정하고 generator
시작한 다음 harness
로 전달하여 프로브를 수행합니다. evaluator
결과를 처리합니다. 이러한 각 범주에는 많은 모듈이 있으며 각 모듈은 개별 플러그인 역할을하는 여러 클래스를 제공합니다.
garak/probes/
- LLM과의 상호 작용을 생성하기위한 클래스garak/detectors/
- LLM 감지를위한 클래스가 주어진 고장 모드를 전시합니다.garak/evaluators/
- 평가보고 체계garak/generators/
- LLM을 조사 할 플러그인garak/harnesses/
- 테스트 구조화를위한 클래스resources/
- 보조 품목 기본 작동 모드는 probewise
하네스를 사용하는 것입니다. 프로브 모듈 이름 및 프로브 플러그인 이름 목록이 주어지면 probewise
Harness는 각 프로브를 인스턴스화 한 다음 각 프로브에 대해 recommended_detectors
속성을 읽어 detector
목록을 출력에서 실행할 수 있습니다.
각 플러그인 카테고리 ( probes
, detectors
, evaluators
, generators
, harnesses
)에는 해당 범주의 플러그인으로 사용할 수있는 기본 클래스를 정의하는 base.py
포함되어 있습니다. 각 플러그인 모듈은 기본 클래스 중 하나에서 상속되는 플러그인 클래스를 정의합니다. 예를 들어, garak.generators.openai.OpenAIGenerator
garak.generators.base.Generator
에서 내려갑니다.
모델 파일 및 더 큰 Corpora와 같은 더 큰 인공물은 저장소에서 보관되지 않습니다. 그들은 포옹 페이스 허브에 저장 될 수 있으며 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
로 나열하십시오. 여기에 FAQ가 있습니다. 더 이상 질문이 있으면 연락하십시오! [email protected]
코드 참조 문서는 garak.readthedocs.io에 있습니다.
Garak Preprint 용지를 읽을 수 있습니다. 가락을 사용한다면 우리를 인용하십시오.
@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 License v2, 라이센스를 참조하십시오