LLM Guard - LLM セキュリティツールキットチートシート
LLM Guard (Protect AIによる)は、LLMアプリケーション向けのオープンソースセキュリティツールキットです。入力スキャナー(モデルに到達する前にユーザープロンプトに適用) および出力スキャナー(モデルの応答にユーザーに到達する前に適用) のライブラリを提供し、プロンプト注入、ジェイルブレイク、毒性、PII漏洩、秘密、禁止されたトピック、その他多くを検出および軽減します。スキャナーはコンテンツをサニタイズ、リスクをスコアリング、安全でないリクエストをブロックでき、本番LLMアプリの実用的なガードレールレイヤーです。
インストール
| 方法 | コマンド |
|---|
| pip | pip install llm-guard |
| ONNX付き (高速) | pip install "llm-guard[onnxruntime]" |
| API サーバー (Docker) | 公式 llm-guard-api イメージを実行 |
| 初回実行 | スキャナーモデル (transformers) をダウンロード |
| 確認 | python -c "import llm_guard; print('ok')" |
2つのスキャニングステージ
| ステージ | 適用対象 | 目的 |
|---|
| 入力スキャナー | ユーザープロンプト | 悪質/安全でない入力がモデルに到達するのを防止 |
| 出力スキャナー | モデル応答 | 安全でない/漏洩する出力がユーザーに到達するのを防止 |
入力のスキャン
from llm_guard import scan_prompt
from llm_guard.input_scanners import PromptInjection, Toxicity, Secrets
scanners = [PromptInjection(), Toxicity(), Secrets()]
sanitized, results, risk = scan_prompt(scanners, user_prompt)
if any(not ok for ok in results.values()):
raise ValueError("Unsafe prompt blocked")
| リターン | 意味 |
|---|
sanitized | (修正される可能性がある) プロンプト |
results | スキャナーごとの合格/不合格 |
risk | スキャナーごとのリスクスコア (0–1) |
入力スキャナー
| スキャナー | 検出対象 |
|---|
PromptInjection | 注入/ジェイルブレイク試行 |
Toxicity | 有毒/虐待的な言語 |
Secrets | プロンプト内のAPIキー、トークン |
Anonymize | PII (レダクト、後で匿名解除) |
BanTopics | 禁止されたサブジェクト |
BanSubstrings / BanCompetitors | ブロックリスト |
Code | コードの存在 / 特定の言語 |
TokenLimit | 超大型プロンプト |
Language | 予期しない言語 |
出力のスキャン
from llm_guard import scan_output
from llm_guard.output_scanners import NoRefusal, Sensitive, Relevance
scanners = [NoRefusal(), Sensitive(), Relevance()]
sanitized_resp, results, risk = scan_output(scanners, prompt, model_response)
出力スキャナー
| スキャナー | チェック対象 |
|---|
Sensitive | 応答内のPII/秘密漏洩 |
NoRefusal | 拒否を検出 (品質/ガードレール信号) |
Relevance | 応答が実際にプロンプトに答えるか |
Toxicity | 有毒出力 |
Bias | バイアスのあるコンテンツ |
MaliciousURLs | 応答内の危険なリンク |
Deanonymize | 信頼できる表示用の匿名解除 |
FactualConsistency | コンテキストとの応答整合性 |
PII 匿名化 / 匿名解除フロー
from llm_guard.input_scanners import Anonymize
from llm_guard.output_scanners import Deanonymize
from llm_guard.vault import Vault
vault = Vault()
safe_prompt, _, _ = scan_prompt([Anonymize(vault)], user_prompt)
# ... safe_promptでモデルを呼び出す ...
final, _, _ = scan_output([Deanonymize(vault)], safe_prompt, model_response)
Vault はマッピングを保存するため、レダクトされたエンティティを最終的な回答で復元できます。
デプロイメント
| オプション | 注記 |
|---|
| インプロセスライブラリ | scan_prompt/scan_output をインポートおよび呼び出し |
| API サーバー | 言語に依存しないゲートウェイの llm-guard-api |
| ONNX ランタイム | スキャナーモデルのより高速なCPU推論 |
| Config | スキャナーごとのフェイルファスト、閾値、マッチ戦略 |
一般的なワークフロー
# あらゆるLLM呼び出しの周りのガードレールラッパー
def guarded_chat(user_input):
prompt, r_in, _ = scan_prompt(input_scanners, user_input)
if not all(r_in.values()):
return "Request blocked by safety policy."
resp = call_llm(prompt)
out, r_out, _ = scan_output(output_scanners, prompt, resp)
return out if all(r_out.values()) else "Response withheld by safety policy."
LLM Guardと関連ツール
| 側面 | LLM Guard | NeMo Guardrails | Garak |
|---|
| 役割 | 入出力スキャナー (ランタイム) | プログラム可能な会話レール | LLM脆弱性スキャナー (テスト) |
| フォーカス | 注入、PII、毒性、秘密 | 会話フロー制御 | レッドチーミング/プロービング |
| いつ使う | リクエストパス内 | リクエストパス内 | デプロイ前テスト |
| 最適用途 | ドロップイン型ガードレール | 複雑なルールベースのフロー | 弱点検出 |
リソース