프로젝트 소개

garak(Generative AI Red-teaming & Assessment Kit)은 대규모 언어 모델과 대화 시스템의 실패 모드를 탐색하기 위한 명령줄 도구다. NVIDIA가 개발했으며 Apache 2.0 라이선스로 배포된다. 기능 - 환각, 데이터 유출, 프롬프트 인젝션, 잘못된 정보, 독성 생성, 탈옥 및 기타 약점을 포함해 LLM이 바람직하지 않은 방식으로 실패하도록 만들 수 있는지 확인한다. - 이러한 실패 모드를 탐색하기 위해 정적, 동적, 적응형 프로브를 결합한다. - README는 그 역할을 nmap 또는 Metasploit Framework에 비유하지만 LLM에 적용한 것으로 설명한다. 지원 대상 - 로컬 transformers 파이프라인, Inference API, 비공개 Inference Endpoints를 포함한 Hugging Face Hub 생성 모델. - OpenAI 채팅 및 완성 모델. - Replicate 텍스트 모델 및 비공개 Replicate 엔드포인트. - Converse API를 통한 AWS Bedrock 파운데이션 모델로, Anthropic Claude, Meta Llama, Amazon Titan, AI21 Labs, Cohere, Mistral AI 등의 제품군을 포함한다. - Cohere, Groq, litellm, NVIDIA NIM 엔드포인트, ggml/llama.cpp 모델, 그리고 REST 엔드포인트를 통해 접근 가능한 사실상 모든 대상. - 플러그인 개발을 위한 내장 테스트 생성기(test.Blank, test.Repeat). 설치 및 사용법 - pip로 PyPI에서, GitHub 메인 브랜치에서, 또는 소스를 Conda 환경(Python 3.11~3.13)에 클론하여 설치한다. - 일반 구문은 `garak <options>`이며, 대상 모델이 필요하고 기본적으로 각 프로브의 권장 탐지기와 함께 알려진 모든 프로브를 실행한다. - `--list_probes`는 사용 가능한 프로브를 나열하고, `--target_type`과 `--target_name`은 모델을 선택하며, `--spec`은 실행 범위를 프로브 제품군이나 단일 플러그인으로 좁힌다. - 호스팅 제공업체의 API 키는 OPENAI_API_KEY, HF_INFERENCE_TOKEN, REPLICATE_API_TOKEN, COHERE_API_KEY, GROQ_API_KEY, NIM_API_KEY, BEDROCK_API_KEY 등의 환경 변수를 통해 제공된다. README에 설명된 프로브 예시 - blank, atkgen(자동 공격 생성), badchars(감지하기 어려운 유니코드 교란), av_spam_scanning, continuation, dan(DAN 및 DAN 유사 공격), donotanswer, encoding(텍스트 인코딩을 통한 프롬프트 인젝션), gcg(적대적 접미사), glitch(글리치 토큰), grandma, goodside, leakreplay(학습 데이터 재생), lmrc(Language Model Risk Cards), malwaregen, misleading, packagehallucination, promptinject, realtoxicityprompts, snowball(눈덩이식 환각), xss. 결과 및 로깅 - 각 프로브에 대해 garak은 진행 표시줄을 출력한 다음 탐지기별로 결과를 평가하는 행을 표시하며, 바람직하지 않은 동작이 발생하면 응답을 FAIL로 표시하고 실패율을 함께 나타낸다. - 로그에는 디버깅용 garak.log, 프로빙 시도마다 항목이 있는 실행별 JSONL 보고서, 취약점을 초래한 시도를 상세히 기록하는 히트 로그가 포함된다. - analyse/analyse_log.py의 기본 분석 스크립트는 가장 많은 히트를 생성한 프로브와 프롬프트를 출력한다. 아키텍처 및 확장성 - 코드는 프로브, 탐지기, 평가기, 생성기, 하네스로 구성되며, 각각 플러그인 기본 클래스를 정의하는 base.py를 갖는다. - 기본 작동 모드는 probewise 하네스를 사용하며, 이는 각 프로브를 인스턴스화하고 primary_detector 및 extended_detectors 속성을 읽어 실행할 탐지기를 결정한다. - 개발자는 garak.probes.base.TextProbe와 같은 기본 클래스를 상속하여 새 플러그인을 작성하고, 대화식으로 또는 테스트 생성기와 탐지기로 테스트하며, --list_probes, --list_detectors 또는 --list_generators를 통해 나열할 수 있다. 프로젝트 자료 - docs.garak.ai 및 reference.garak.io/readthedocs의 문서, Discord 커뮤니티, garak.ai 프로젝트 홈, arXiv 프리프린트(2406.11036), 학술용 인용 항목.