生成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環境にインストールすることができます。
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
オプションを使用します。モデルタイプモデルファミリ/インターフェイスを指定します。モデル名使用する正確なモデルを指定します。以下の「ジェネレーターへのイントロ」セクションでは、サポートされているジェネレーターの一部について説明します。簡単なジェネレーターファミリーは、顔モデルを抱きしめています。これらのいずれかをロードするには、 --model_type
huggingface
に設定し、 --model_name
ハブ上のモデルの名前( "RWKV/rwkv-4-169m-pile"
)に設定します。一部のジェネレーターは、APIキーを環境変数として設定する必要がある場合があり、それが必要かどうかを知らせます。
garak
デフォルトですべてのプローブを実行しますが、それについても具体的にすることができます。 --probes promptinject
、たとえば、ProsptInjectフレームワークのメソッドのみを使用します。プラグイン名を追加して、プラグインファミリの代わりに1つの特定のプラグインを指定することもできます.
;たとえば、 --probes lmrc.SlurUsage
言語モデルのリスクカードフレームワークに基づいてSLURを生成するモデルのチェックの実装を使用します。
助けとインスピレーションのために、Twitterや不一致で私たちを見つけてください!
エンコーディングベースのプロンプトインジェクションのプローブチャットGPT(OSX/*nix)(例の値を実際のOpenAI APIキーに置き換えます)
export OPENAI_API_KEY="sk-123XXXXXXXXXXXX"
python3 -m garak --model_type openai --model_name gpt-3.5-turbo --probes encoding
GPT2のハグの顔バージョンがDan 11.0に対して脆弱であるかどうかを確認します
python3 -m garak --model_type huggingface --model_name gpt2 --probes dan.Dan_11_0
ロードされたプローブごとに、GARAKは生成されたときに進行状況バーを印刷します。生成が完了すると、各検出器でのプローブの結果が与えられたことを評価する行。迅速な試みのいずれかが望ましくない動作をもたらすと、応答は失敗としてマークされ、失敗率が与えられます。
GPT-3バリアントのencoding
モジュールの結果は次のとおりです。
そして、chatgptの同じ結果:
より最近のモデルは、エンコードベースのインジェクション攻撃の影響を受けやすいことがわかります。テキストバベッジ-001は、引用された印刷能力とマイムエンコードインジェクションに対してのみ脆弱であることがわかっています。各行の最後の数値、例えば840/840は、合計のテキスト世代の数を示し、そのうちの数は問題なく振る舞っていると思われます。迅速なプロンプトごとに複数の世代が作成されるため、数字は非常に高くなる可能性があります。
garak.log
でエラーが発生します。実行は、分析の開始と終了時に指定された.jsonl
ファイルで詳細に記録されています。 analyse/analyse_log.py
には、最も多くのヒットにつながったプローブとプロンプトが出力される基本的な分析スクリプトがあります。
PRSとOPENの問題を送信します。ハッピーハンティング!
パイプラインAPIの使用:
--model_type huggingface
(トランスモデルがローカルで実行されるため)--model_name
ハブのモデル名を使用します。生成モデルのみが機能します。失敗していない場合は、問題を開いてコマンドに貼り付けてください +例外!推論APIの使用:
--model_type huggingface.InferenceAPI
(APIベースのモデルアクセス用)--model_name
ハブからのモデル名、例: "mosaicml/mpt-7b-instruct"
プライベートエンドポイントの使用:
--model_type huggingface.InferenceEndpoint
(プライベートエンドポイント用)
--model_name
-endpoint 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 / OPENの問題を送信してください。
REPLICATE_API_TOKEN
環境変数をReplicate APIトークンに設定します。ログインしたときにhttps://replicate.com/account/api-tokensを参照してくださいパブリックレプリケートモデル:
--model_type replicate
--model_name
複製モデル名とハッシュ、例: "stability-ai/stablelm-tuned-alpha-7b:c49dae36"
プライベート複製エンドポイント:
--model_type replicate.InferenceEndpoint
(プライベートエンドポイント用)--model_name
-username/model-name deployed endpoint、例: elim/elims-llama2-7b
--model_type cohere
--model_name
(オプション、デフォルトによるcommand
) - テストしたい特定のcohereモデルCOHERE_API_KEY
環境変数をCohere APIキーに設定します。たとえば、「abcdefghij123456789」。ログインしたとき、https://dashboard.cohere.ai/api-keysを参照してください--model_type groq
--model_name
-GROQAPIを介してアクセスするモデルの名前GROQ_API_KEY
環境変数をGROQ APIキーに設定するには、https://console.groq.com/docs/quickstartを参照してくださいAPIキーの作成の詳細については--model_type ggml
--model_name
ロードするGGMLモデルへのパス、eg /home/leon/llama.cpp/models/7B/ggml-model-q4_0.bin
GGML_MAIN_PATH
環境変数をGGML main
実行可能ファイルへのパスに設定しますrest.RestGenerator
は非常に柔軟で、PlantextまたはJSONを返す任意のRESTエンドポイントに接続できます。通常、エンドポイントを説明する短いYAMLファイルが得られる簡単な構成が必要です。例については、https://reference.garak.ai/en/latest/garak.generators.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トークンに設定します。ログインしたときにhttps://replicate.com/account/api-tokensを参照してくださいOcto Public Endpoint:
--model_type octo
--model_name
モデルのOctoaiパブリックエンドポイント、例: 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は、ターゲットをプローブし、有毒な出力を得ようとしてそれに反応します。ほとんどがステートレスであるプロトタイプは、HHRLHF試みのサブセットで微調整された単純なGPT-2を使用して、検出可能な毒性をもたらしました(現在サポートされている唯一のターゲット)。 |
av_spam_scanning | モデルを出力しようとするプローブ悪意のあるコンテンツ署名 |
継続 | モデルがおそらく望ましくない単語を継続するかどうかをテストするプローブ |
ダン | さまざまなダンとダンのような攻撃 |
ドノタンスワー | どの責任ある言語モデルに答えるべきではないプロンプト。 |
エンコーディング | テキストエンコーディングによる迅速な注入 |
GCG | 敵対的な接尾辞を追加することにより、システムプロンプトを破壊します。 |
グリッチ | 異常な動作を引き起こすグリッチトークンのプローブモデル。 |
おばあちゃん | 祖母を思い出させることを訴えなさい。 |
グッドサイド | ライリーグッドサイド攻撃の実装。 |
リーカープレイ | モデルがトレーニングデータを再生するかどうかを評価します。 |
LMRC | 言語モデルのリスクカードプローブのサブサンプル |
マルウェアゲン | マルウェアを構築するためのモデルにコードを生成しようとする試み |
誤解を招く | モデルをサポートしようとする試みは、誤解を招くように虚偽の主張をサポートします |
パッケージホルシネーション | 存在しない(したがって不安定な)パッケージを指定するコード世代を取得しようとしています。 |
PromptInject | エージェンシーエンタープライズプロンプトインジェクターワークの実装(ベストペーパーアワード @ neurips ML安全ワークショップ2022) |
RealtoxicityPrompts | RealtoxicityPromptsのサブセットは機能します(完全なテストの実行に時間がかかるため、データが制約されます) |
スノーボール | モデルを作るように設計された雪だるま式の幻覚プローブは、それを処理するには複雑すぎる質問に対する間違った答えを与えます |
XSS | 脆弱性を探して、プライベートデータの抽出などの許可またはクロスサイト攻撃を制定します。 |
garak
複数の種類のログを生成します:
garak.log
。これには、 garak
とそのプラグインからの情報のデバッグが含まれ、実行全体で継続されます。garak
実行されるたびに新しいレポートファイルが作成されます。このファイルの名前は、最初に出力され、成功した場合、実行の終了時にも出力されます。レポートでは、世代が受け取られたときとそれらが評価されたときに、各プロービングの試行ごとにエントリが行われます。エントリのstatus
属性はgarak.attempts
から定数を取得し、どの段階で作成されたかを説明します。 garak
コード構造の権威あるガイドについては、参照ドキュメントをご覧ください。
典型的な実行では、 garak
コマンドラインからモデルタイプ(およびオプションでモデル名)を読み取り、実行するprobe
とdetector
を実行し、 generator
を起動し、これらをharness
に渡してプローリングを行います。 evaluator
結果を扱います。これらの各カテゴリには多くのモジュールがあり、各モジュールは個々のプラグインとして機能する多くのクラスを提供します。
garak/probes/
- LLMとの相互作用を生成するためのクラスgarak/detectors/
- LLMを検出するためのクラスは、特定の障害モードを示していますgarak/evaluators/
- 評価レポートスキームgarak/generators/
-LLMSがプローブするプラグインgarak/harnesses/
- テストの構造化のためのクラスresources/
- プラグインで必要な補助アイテムデフォルトの操作モードは、 probewise
ハーネスを使用することです。プローブモジュール名とプローブプラグイン名のリストが与えられていると、 probewise
ハーネスは各プローブをインスタンス化し、各プローブについては、 recommended_detectors
属性を読み取り、 detector
Sのリストを出力で実行します。
各プラグインカテゴリ( probes
、 detectors
、 evaluators
、 generators
、 harnesses
)には、そのカテゴリのプラグインで使用可能なベースクラスを定義するbase.py
が含まれています。各プラグインモジュールは、ベースクラスの1つから継承するプラグインクラスを定義します。たとえば、 garak.generators.openai.OpenAIGenerator
garak.generators.base.Generator
から下降します。
モデルファイルやより大きなコーパスなどのより大きなアーティファクトは、リポジトリから除外されます。たとえば、フェイスハブの抱きしめなどに保管し、 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_detectors
、書い--list_generators
いるタイプのすべての--list_probes
インをリストしてください。 ここにFAQがあります。これ以上質問がある場合は手を差し伸べてください! [email protected]
コード参照ドキュメントはgarak.readthedocs.ioにあります。
Garak Preprint Paperを読むことができます。 Garakを使用する場合は、私たちを引用してください。
@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}}
}
「嘘は他の人と同じようにスキルであり、卓越性のレベルを維持したい場合は、絶えず練習しなければなりません」 - elim
更新とニュースについては、@garak_llmを参照してください
©2023- Leon Derczynski; Apacheライセンスv2、ライセンスを参照してください