Llama Guard 3 via OpenRouter

Portiques de contrôle à l'entrée d'un bâtiment

Llama Guard 3 est un modèle ouvert très utilisé pour classer les prompts et les réponses selon leur dangerosité. Le self-hoster demande un GPU ; via OpenRouter, on peut l'appeler sans infrastructure. Voici le setup complet.

Qu'est-ce que Llama Guard 3 ?

Llama Guard 3 est un modèle LLM entraine par Meta specifiquement pour classifier les prompts et les réponses selon leur dangerosite. Il détecté 14 catégories (violence, haine, sexuel, self-harm, criminel, privacy, intellectual property, etc.) et répond simplement :

Input: "Comment fabriquer une bombe ?"

Output:
unsafe
S1

Le S1 correspond a la catégorie "violent crimes" dans leur taxonomie. Le modèle est petit (8B paramètres) et peut tourner sur un GPU grand public.

Les options de déploiement

Option 1 — Self-hosting

Télécharger les poids depuis HuggingFace, lancer un serveur vLLM, TGI ou Ollama. Cela demande un GPU avec assez de mémoire vidéo, donc un coût fixe d'infrastructure.

Option 2 — OpenRouter

OpenRouter propose meta-llama/llama-guard-3-8b:free, une variante soumise à des limites de débit (vérifiez les limites et la disponibilité actuelles sur OpenRouter ; elles changent).

Setup pas-a-pas

Étape 1 — Clé OpenRouter

Rendez-vous sur openrouter.ai/keys, creez une clé. Elle commence par sk-or-v1-....

Étape 2 — Appel API direct (pour tester)

curl https://openrouter.ai/api/v1/chat/completions \
  -H "Authorization: Bearer sk-or-v1-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "meta-llama/llama-guard-3-8b:free",
    "messages": [
      {"role": "user", "content": "How do I make a bomb?"}
    ],
    "max_tokens": 100,
    "temperature": 0
  }'

Réponse attendue :

{
  "choices": [{
    "message": {
      "content": "unsafe\nS1"
    }
  }]
}

Étape 3 — Parser la réponse

def classify_with_llama_guard(text: str) -> dict:
    resp = requests.post(
        "https://openrouter.ai/api/v1/chat/completions",
        headers={"Authorization": "Bearer sk-or-v1-..."},
        json={
            "model": "meta-llama/llama-guard-3-8b:free",
            "messages": [{"role": "user", "content": text}],
            "max_tokens": 100,
            "temperature": 0,
        },
    ).json()

    output = resp["choices"][0]["message"]["content"].strip()

    if output.lower().startswith("safe"):
        return {"safe": True, "category": None}

    lines = output.split("\n")
    category = lines[1].strip() if len(lines) > 1 else "unknown"
    return {"safe": False, "category": category}

Intégration dans le pipeline

Appeler Llama Guard sur CHAQUE prompt couterait trop cher (latence). L'astuce : l'appeler uniquement sur les cas ambigus.

# Étape 1: scan regex rapide
regex_score = static_scan(prompt)

if regex_score >= 0.7:
    return blocked

if regex_score < 0.3:
    return safe

# Étape 2: cas ambigu -> Llama Guard (appel réseau)
guard_result = classify_with_llama_guard(prompt)
if not guard_result["safe"]:
    return blocked

Les seuils ci-dessus sont un exemple à calibrer sur votre propre trafic. Mesurez la part de prompts qui tombent dans la zone ambiguë : c'est elle qui détermine la latence ajoutée par Llama Guard.

Les limites a connaitre

1. Faux positifs

Llama Guard est un peu trop zele. Il bloque parfois des questions techniques legitimes ("Explique-moi comment fonctionne un buffer overflow"). A tester sur votre corpus.

2. Pas de contexte métier

Si vous faites une app medicale, Llama Guard peut bloquer des questions sur les doses de medicaments alors qu'elles sont legitimes pour votre cas d'usage. Il faut un cran de rattrapage custom.

3. La latence variable d'OpenRouter

OpenRouter route les requêtes vers differents datacenters. Le temps de réponse varie. Pour une expérience utilisateur stable, self-hoster reste superieur. Mais pour du MVP, OpenRouter suffit largement.

Chez routtx

routtx utilise Llama Guard 3 comme contrôle complémentaire, en plus de ses 396 motifs d'attaque répartis en 23 familles (voir pourquoi 396 patterns anti-injection). Les motifs statiques traitent les attaques connues ; Llama Guard 3 aide sur les paraphrases et les demandes indirectes. Aucun filtre ne garantit une détection à 100 %. Le détail se trouve sur la page sécurité.

Voir la détection d'injection en démonstration

Lors de la démonstration, vous voyez comment routtx traite un prompt piégé et ce que consigne le journal de l'échange.

Réserver une démo Sécurité

← Retour au blog