llamaguard
Metaが開発した70〜80億パラメータの特化型モデレーションモデルで、LLMの入出力フィルタリングに使用します。暴力・ヘイト、性的コンテンツ、武器、薬物、自傷、犯罪計画の6カテゴリに対応し、94〜95%の精度を実現。vLLM・HuggingFace・Sagemakerでのデプロイが可能で、NeMo Guardrailsとも統合できます。
description の原文を見る
Meta's 7-8B specialized moderation model for LLM input/output filtering. 6 safety categories - violence/hate, sexual content, weapons, substances, self-harm, criminal planning. 94-95% accuracy. Deploy with vLLM, HuggingFace, Sagemaker. Integrates with NeMo Guardrails.
SKILL.md 本文
LlamaGuard - AI コンテンツ モデレーション
クイックスタート
LlamaGuard は、コンテンツ安全分類に特化した 7-8B パラメータモデルです。
インストール:
pip install transformers torch
# HuggingFace にログイン (必須)
huggingface-cli login
基本的な使い方:
from transformers import AutoTokenizer, AutoModelForCausalLM
model_id = "meta-llama/LlamaGuard-7b"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
def moderate(chat):
input_ids = tokenizer.apply_chat_template(chat, return_tensors="pt").to(model.device)
output = model.generate(input_ids=input_ids, max_new_tokens=100)
return tokenizer.decode(output[0], skip_special_tokens=True)
# ユーザー入力をチェック
result = moderate([
{"role": "user", "content": "How do I make explosives?"}
])
print(result)
# 出力: "unsafe\nS3" (Criminal Planning)
一般的なワークフロー
ワークフロー1: 入力フィルタリング (プロンプト モデレーション)
LLM に送信する前にユーザー プロンプトをチェック:
def check_input(user_message):
result = moderate([{"role": "user", "content": user_message}])
if result.startswith("unsafe"):
category = result.split("\n")[1]
return False, category # ブロック
else:
return True, None # 安全
# 例
safe, category = check_input("How do I hack a website?")
if not safe:
print(f"Request blocked: {category}")
# ユーザーにエラーを返す
else:
# LLM に送信
response = llm.generate(user_message)
安全カテゴリ:
- S1: 暴力とヘイト
- S2: 性的コンテンツ
- S3: 銃と違法兵器
- S4: 規制物質
- S5: 自殺と自傷行為
- S6: 犯罪計画
ワークフロー2: 出力フィルタリング (応答 モデレーション)
ユーザーに表示する前に LLM の応答をチェック:
def check_output(user_message, bot_response):
conversation = [
{"role": "user", "content": user_message},
{"role": "assistant", "content": bot_response}
]
result = moderate(conversation)
if result.startswith("unsafe"):
category = result.split("\n")[1]
return False, category
else:
return True, None
# 例
user_msg = "Tell me about harmful substances"
bot_msg = llm.generate(user_msg)
safe, category = check_output(user_msg, bot_msg)
if not safe:
print(f"Response blocked: {category}")
# 一般的な応答を返す
return "I cannot provide that information."
else:
return bot_msg
ワークフロー3: vLLM デプロイ (高速推論)
本番環境対応のサービング:
from vllm import LLM, SamplingParams
# vLLM を初期化
llm = LLM(model="meta-llama/LlamaGuard-7b", tensor_parallel_size=1)
# サンプリングパラメータ
sampling_params = SamplingParams(
temperature=0.0, # 決定的
max_tokens=100
)
def moderate_vllm(chat):
# プロンプトをフォーマット
prompt = tokenizer.apply_chat_template(chat, tokenize=False)
# 生成
output = llm.generate([prompt], sampling_params)
return output[0].outputs[0].text
# バッチ モデレーション
chats = [
[{"role": "user", "content": "How to make bombs?"}],
[{"role": "user", "content": "What's the weather?"}],
[{"role": "user", "content": "Tell me about drugs"}]
]
prompts = [tokenizer.apply_chat_template(c, tokenize=False) for c in chats]
results = llm.generate(prompts, sampling_params)
for i, result in enumerate(results):
print(f"Chat {i}: {result.outputs[0].text}")
スループット: 単一 A100 で約 50-100 リクエスト/秒
ワークフロー4: API エンドポイント (FastAPI)
モデレーション API として提供:
from fastapi import FastAPI
from pydantic import BaseModel
from vllm import LLM, SamplingParams
app = FastAPI()
llm = LLM(model="meta-llama/LlamaGuard-7b")
sampling_params = SamplingParams(temperature=0.0, max_tokens=100)
class ModerationRequest(BaseModel):
messages: list # [{"role": "user", "content": "..."}]
@app.post("/moderate")
def moderate_endpoint(request: ModerationRequest):
prompt = tokenizer.apply_chat_template(request.messages, tokenize=False)
output = llm.generate([prompt], sampling_params)[0]
result = output.outputs[0].text
is_safe = result.startswith("safe")
category = None if is_safe else result.split("\n")[1] if "\n" in result else None
return {
"safe": is_safe,
"category": category,
"full_output": result
}
# 実行: uvicorn api:app --host 0.0.0.0 --port 8000
使い方:
curl -X POST http://localhost:8000/moderate \
-H "Content-Type: application/json" \
-d '{"messages": [{"role": "user", "content": "How to hack?"}]}'
# 応答: {"safe": false, "category": "S6", "full_output": "unsafe\nS6"}
ワークフロー5: NeMo Guardrails インテグレーション
NVIDIA Guardrails で使用:
from nemoguardrails import RailsConfig, LLMRails
from nemoguardrails.integrations.llama_guard import LlamaGuard
# NeMo Guardrails を設定
config = RailsConfig.from_content("""
models:
- type: main
engine: openai
model: gpt-4
rails:
input:
flows:
- llamaguard check input
output:
flows:
- llamaguard check output
""")
# LlamaGuard インテグレーションを追加
llama_guard = LlamaGuard(model_path="meta-llama/LlamaGuard-7b")
rails = LLMRails(config)
rails.register_action(llama_guard.check_input, name="llamaguard check input")
rails.register_action(llama_guard.check_output, name="llamaguard check output")
# 自動モデレーション付きで使用
response = rails.generate(messages=[
{"role": "user", "content": "How do I make weapons?"}
])
# LlamaGuard により自動的にブロック
使用時期と代替手段
LlamaGuard を使用する場合:
- 事前トレーニング済みのモデレーション モデルが必要
- 高精度 (94-95%) が必要
- GPU リソースがある (7-8B モデル)
- 詳細な安全カテゴリが必要
- 本番環境の LLM アプリケーションを構築している
モデルバージョン:
- LlamaGuard 1 (7B): オリジナル、6 カテゴリ
- LlamaGuard 2 (8B): 改善版、6 カテゴリ
- LlamaGuard 3 (8B): 最新 (2024 年)、強化版
代わりに代替手段を使用する場合:
- OpenAI Moderation API: よりシンプル、API ベース、無料
- Perspective API: Google の毒性検出
- NeMo Guardrails: より包括的な安全フレームワーク
- Constitutional AI: トレーニング時の安全性
一般的な問題
問題: モデルアクセスが拒否される
HuggingFace にログイン:
huggingface-cli login
# トークンを入力
モデルページでライセンスを承認: https://huggingface.co/meta-llama/LlamaGuard-7b
問題: レイテンシが高い (>500ms)
vLLM を使用して 10 倍高速化:
from vllm import LLM
llm = LLM(model="meta-llama/LlamaGuard-7b")
# レイテンシ: 500ms → 50ms
テンソル並列化を有効化:
llm = LLM(model="meta-llama/LlamaGuard-7b", tensor_parallel_size=2)
# 2 つの GPU で 2 倍高速化
問題: 誤検出が多い
しきい値ベースのフィルタリングを使用:
# "unsafe" トークンの確率を取得
logits = model(..., return_dict_in_generate=True, output_scores=True)
unsafe_prob = torch.softmax(logits.scores[0][0], dim=-1)[unsafe_token_id]
if unsafe_prob > 0.9: # 高信頼度しきい値
return "unsafe"
else:
return "safe"
問題: GPU で OOM エラー
8 ビット量子化を使用:
from transformers import BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
model = AutoModelForCausalLM.from_pretrained(
model_id,
quantization_config=quantization_config,
device_map="auto"
)
# メモリ: 14GB → 7GB
高度なトピック
カスタムカテゴリ: ドメイン固有の安全カテゴリで LlamaGuard をファインチューニングするには、references/custom-categories.md を参照してください。
パフォーマンス ベンチマーク: 他のモデレーション API との精度比較とレイテンシ最適化については、references/benchmarks.md を参照してください。
デプロイメントガイド: Sagemaker、Kubernetes、スケーリング戦略については、references/deployment.md を参照してください。
ハードウェア要件
- GPU: NVIDIA T4/A10/A100
- VRAM:
- FP16: 14GB (7B モデル)
- INT8: 7GB (量子化)
- INT4: 4GB (QLoRA)
- CPU: 可能ですが遅い (レイテンシ 10 倍)
- スループット: 50-100 リクエスト/秒 (A100)
レイテンシ (単一 GPU):
- HuggingFace Transformers: 300-500ms
- vLLM: 50-100ms
- バッチ処理 (vLLM): リクエストあたり 20-50ms
リソース
- HuggingFace:
- 論文: https://ai.meta.com/research/publications/llama-guard-llm-based-input-output-safeguard-for-human-ai-conversations/
- インテグレーション: vLLM、Sagemaker、NeMo Guardrails
- 精度: 94.5% (プロンプト)、95.3% (応答)
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- davila7
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/davila7/claude-code-templates / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。