モジュール化されたLLM脆弱性スキャナー。静的、動的、適応型プローブを使用して、複数のモデルプロバイダーにわたって幻覚、データ漏洩、プロンプトインジェクション、脱獄、毒性を検査します。
生成 AI レッドチーミング&アセスメントキット
garak は、LLM を基盤とするアプリケーションが望ましくない形で失敗するかどうかをチェックします。garak はハルシネーション、データ漏洩、プロンプトインジェクション、誤情報、有害コンテンツの生成、ジェイルブレイク、その他多くの弱点をプローブします。nmap や msf / Metasploit Framework をご存知なら、garak はそれらと多少似たことを行いますが、対象は LLM です。
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 には独自の依存関係があります。garak を専用の Conda 環境にインストールできます:
conda create --name garak "python>=3.11,<=3.14"
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
ジェネレーターを指定するには、--target_type オプションと、任意で --target_name オプションを使用します。モデルタイプはモデルのファミリー/インターフェースを指定し、モデル名は使用する正確なモデルを指定します。以下の「Intro to generators」セクションでは、サポートされているジェネレーターの一部を説明しています。わかりやすいジェネレーターファミリーとしては Hugging Face のモデルがあります。これを読み込むには、--target_type を huggingface に、--target_name を Hub 上のモデル名(例: "RWKV/rwkv-4-169m-pile")に設定します。一部のジェネレーターでは、API キーを環境変数として設定する必要がある場合があり、その必要がある場合は通知されます。
garak はデフォルトですべてのプローブを実行しますが、これを具体的に指定することもできます。たとえば、--spec probes.promptinject は PromptInject フレームワークのメソッドのみを使用します。また、プラグイン名を . の後に追加することで、プラグインファミリーではなく特定のプラグインを 1 つ指定することもできます。たとえば、--spec probes.lmrc.SlurUsage は、Language Model Risk Cards フレームワークに基づいて、モデルがスラング(蔑称)を生成しているかどうかをチェックする実装を使用します。
ヘルプやヒントについては、Twitter または discord で私たちを見つけてください!
商用モデルに対してエンコーディングベースのプロンプトインジェクションをプローブする(OSX/*nix)(example の値を実際の OpenAI API キーに置き換えてください)
export OPENAI_API_KEY="sk-123XXXXXXXXXXXX"
python3 -m garak --target_type openai --target_name gpt-5-nano --spec probes.encoding
GPT2のHugging Face版がDAN 11.0に対して脆弱かどうかを確認する
python3 -m garak --target_type huggingface --target_name gpt2 --spec probes.dan.Dan_11_0
読み込まれた各プローブについて、garak は生成中にプログレスバーを表示します。生成が完了すると、各検出器でそのプローブの結果を評価する行が表示されます。プロンプトの試行のいずれかが望ましくない動作を引き起こした場合、その応答は FAIL としてマークされ、失敗率が示されます。
以下は GPT-3 のバリアントで encoding モジュールを実行した結果です:

そして ChatGPT での同じ結果です:

より新しいモデルの方がエンコーディングベースのインジェクション攻撃に対してはるかに脆弱であることがわかります。一方、text-babbage-001 は quoted-printable および MIME エンコーディングのインジェクションに対してのみ脆弱であることが判明しました。各行の末尾にある数値(例:840/840)は、テキスト生成の総数と、そのうち何件が問題なく動作したように見えたかを示しています。プロンプトごとに複数回(デフォルトでは 10 回)の生成が行われるため、この数値はかなり大きくなることがあります。
エラーは garak.log に記録されます。実行の詳細は、分析の開始時と終了時に指定された .jsonl ファイルに記録されます。analyse/analyse_log.py には基本的な分析スクリプトがあり、最も多くのヒットを引き起こしたプローブとプロンプトを出力します。
PR の送信や issue の作成をお待ちしています。Happy hunting!
Pipeline API を使用する場合:
--target_type huggingface(transformers モデルをローカルで実行する場合)--target_name - Hub のモデル名を使用します。生成モデルのみが動作します。動作すべきなのに失敗する場合は、issue を作成し、試したコマンドと例外を貼り付けてください!Inference API を使用する場合:
--target_type huggingface.InferenceAPI(API ベースのモデルアクセスの場合)--target_name - Hub のモデル名(例:"mosaicml/mpt-7b-instruct")プライベートエンドポイントを使用する場合:
--target_type huggingface.InferenceEndpoint(プライベートエンドポイントの場合)
--target_name - エンドポイント URL(例:https://xxx.us-east-1.aws.endpoints.huggingface.cloud)
(任意)HF_INFERENCE_TOKEN 環境変数に "read" ロールを持つ Hugging Face API トークンを設定します。ログイン時に https://huggingface.co/settings/tokens を参照してください
--target_type openai--target_name - 使用したい OpenAI モデル。gpt-5-nano は高速でテストに適しています。OPENAI_API_KEY 環境変数に OpenAI API キー(例:"sk-19763ASDF87q6657")を設定します。ログイン時に https://platform.openai.com/account/api-keys を参照してください認識されるモデルタイプはホワイトリストに登録されています。これはプラグインがどのサブ API を使用すべきかを知る必要があるためです。Completion モデルまたは ChatCompletion モデルは問題ありません。サポートされていないモデルを使用したい場合は、情報を含むエラーメッセージが表示されるはずですので、PR を送信するか issue を作成してください。
REPLICATE_API_TOKEN 環境変数に Replicate API トークン(例:"r8-123XXXXXXXXXXXX")を設定します。ログイン時に https://replicate.com/account/api-tokens を参照してください公開 Replicate モデル:
--target_type replicate--target_name - Replicate のモデル名とハッシュ(例:"stability-ai/stablelm-tuned-alpha-7b:c49dae36")プライベート Replicate エンドポイント:
--target_type replicate.InferenceEndpoint(プライベートエンドポイントの場合)--target_name - デプロイされたエンドポイントのユーザー名/モデル名スラッグ(例:elim/elims-llama2-7b)--target_type cohere--target_name(任意、デフォルトは command) - テストしたい特定の Cohere モデルCOHERE_API_KEY 環境変数に Cohere API キー(例:"aBcDeFgHiJ123456789")を設定します。ログイン時に https://dashboard.cohere.ai/api-keys を参照してください--target_type groq--target_name - Groq API 経由でアクセスするモデルの名前GROQ_API_KEY 環境変数に Groq API キーを設定します。API キーの作成方法の詳細については https://console.groq.com/docs/quickstart を参照してください--target_type ggml--target_name - 読み込みたい ggml モデルへのパス(例:/home/leon/llama.cpp/models/7B/ggml-model-q4_0.bin)GGML_MAIN_PATH 環境変数に ggml の main 実行ファイルへのパスを設定します