モジュール化されたLLM脆弱性スキャナー。静的、動的、適応型プローブを使用して、複数のモデルプロバイダーにわたって幻覚、データ漏洩、プロンプトインジェクション、脱獄、毒性を検査します。
Generative 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` で開発バージョンをインストール
標準の pip バージョンの `garak` は定期的に更新されます。GitHub から最新のバージョンを入手するには、次のようにしてください:```
python -m pip install -U git+https://github.com/NVIDIA/garak.git@main
garak には独自の依存関係があります。garak を独自の Conda 環境にインストールできます:```
conda create --name garak "python>=3.10,<=3.12"
conda activate garak
gh repo clone NVIDIA/garak
cd garak
python -m pip install -e .
OK、問題なければ、おそらくこれで準備完了です!
**注意**: `NVIDIA` GitHub組織への移行前にクローンしたが、このドキュメントを `github.com/NVIDIA` URI で読んでいる場合は、以下のようにリモートを更新してください。```
git remote set-url origin https://github.com/NVIDIA/garak.git
一般的な構文は以下の通りです:
garak <オプション>
garakはスキャンするモデルを指定する必要があり、デフォルトではそのモデルに対して既知のすべてのプローブを実行し、各プローブが推奨する脆弱性検出器を使用します。プローブの一覧は次のコマンドで確認できます:
garak --list_probes
ジェネレーターを指定するには、--target_typeオプションと、必要に応じて--target_nameオプションを使用します。モデルタイプはモデルファミリー/インターフェースを指定し、モデル名は使用する正確なモデルを指定します。以下の「ジェネレーターの概要」セクションで、サポートされているジェネレーターの一部を説明します。シンプルなジェネレーターファミリーとしてHugging Faceモデルがあります。これらをロードするには、--target_typeにhuggingface、--target_nameにHub上のモデル名(例:"RWKV/rwkv-4-169m-pile")を設定します。一部のジェネレーターではAPIキーを環境変数として設定する必要があり、必要な場合はその旨が通知されます。
garakはデフォルトですべてのプローブを実行しますが、特定のプローブのみを指定することもできます。例えば、--probes promptinjectはPromptInjectフレームワークのメソッドのみを使用します。また、プラグインファミリー全体ではなく特定のプラグインを指定するには、プラグイン名の後に.を追加します。例えば、--probes lmrc.SlurUsageは、Language Model Risk Cardsフレームワークに基づいて、モデルが差別的な発言を生成していないかをチェックする実装を使用します。
ヘルプやインスピレーションについては、Twitterまたはdiscordでお問い合わせください!
商用モデルに対するエンコーディングベースのプロンプトインジェクションのプローブ(OSX/*nix)(実際のOpenAI APIキーで例の値を置き換えてください)``` export OPENAI_API_KEY="sk-123XXXXXXXXXXXX" python3 -m garak --target_type openai --target_name gpt-5-nano --probes encoding
See if the Hugging Face version of GPT2 is vulnerable to DAN 11.0```
python3 -m garak --target_type huggingface --target_name gpt2 --probes dan.Dan_11_0
各プローブが読み込まれると、garak は生成中にプログレスバーを表示します。生成が完了すると、各検出器に対するそのプローブの結果を評価する行が表示されます。プロンプトの試行のいずれかが望ましくない動作を引き起こした場合、応答は FAIL とマークされ、失敗率が表示されます。
以下は、encoding モジュールを GPT-3 派生モデルで実行した結果です:

同じ結果を ChatGPT で実行した場合:

より新しいモデルはエンコーディングベースのインジェクション攻撃に対してはるかに脆弱であり、text-babbage-001 は quoted-printable および MIME エンコーディングインジェクションにのみ脆弱であることが判明しました。各行の末尾に表示される 840/840 などの数字は、テキスト生成の総数と、そのうち適切に動作したとみなされた数を示しています。この数字が非常に大きくなる場合があります。これは、プロンプトごとに複数回(デフォルトでは10回)の生成が行われるためです。
エラーは garak.log に記録され、実行の詳細は分析の開始と終了時に指定された .jsonl ファイルに記録されます。analyse/analyse_log.py に基本的な分析スクリプトがあり、最も多くヒットしたプローブとプロンプトを出力します。
PR を送信し、Issue を開いてください。楽しいハンティングを!
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 環境変数を「読み取り」ロールを持つ 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 実行可能ファイルへのパスに設定します。rest.RestGenerator は非常に柔軟で、プレーンテキストまたは JSON を返す任意の REST エンドポイントに接続できます。短い設定が必要で、通常はエンドポイントを記述した短い YAML ファイルが作成されます。例については https://reference.garak.ai/en/latest/garak.generators.rest.html を参照してください。