Passer au contenu principal
Il s’agit d’un notebook interactif. Vous pouvez l’exécuter localement ou utiliser les liens ci-dessous :

Les évaluateurs comme garde-fous

Les évaluateurs Weave sont des classes spéciales dotées d’une méthode score qui permet d’évaluer les performances d’un appel. Ils peuvent aller de règles très simples à des LLM complexes servant de juges. Dans ce notebook, nous allons explorer comment utiliser les évaluateurs comme garde-fous pour empêcher votre LLM de générer du contenu nuisible ou inapproprié.
%pip install weave --quiet
python
"""
Exemple illustrant comment implémenter des guardrails dans Weave.
Cet exemple montre un vérificateur de sécurité du contenu simple qui empêche
les réponses potentiellement nuisibles ou négatives.
"""

import weave

# Initialiser Weave avec un nom de projet descriptif
weave.init("content-safety-guardrails")

class ContentSafetyScorer(weave.Scorer):
    """Un scorer qui évalue la sécurité du contenu en fonction de la présence de phrases spécifiées."""

    unsafe_phrases: list[str]
    case_sensitive: bool = False

    @weave.op
    def score(self, output: str) -> bool:
        """
        Évalue la sécurité de la sortie en fonction de la présence de phrases non sécurisées.

        Args:
            output: La sortie textuelle à évaluer

        Returns:
            bool: True si la sortie est sûre, False si elle est non sécurisée
        """
        normalized_output = output if self.case_sensitive else output.lower()

        for phrase in self.unsafe_phrases:
            normalized_phrase = phrase if self.case_sensitive else phrase.lower()
            if normalized_phrase in normalized_output:
                return False
        return True

@weave.op
def generate_response(prompt: str) -> str:
    """Simule la génération d'une réponse par un LLM."""
    if "test" in prompt.lower():
        return "I'm sorry, I cannot process that request."
    elif "help" in prompt.lower():
        return "I'd be happy to help you with that!"
    else:
        return "Here's what you requested: " + prompt

async def process_with_guardrail(prompt: str) -> str:
    """
    Traite l'entrée utilisateur avec un guardrail de sécurité du contenu.
    Renvoie la réponse si elle est sûre, ou un message de repli si elle est non sécurisée.
    """
    # Initialiser le scorer de sécurité
    safety_scorer = ContentSafetyScorer(
        name="Content Safety Checker",
        unsafe_phrases=["sorry", "cannot", "unable", "won't", "will not"],
    )

    # Générer la réponse et obtenir l'objet Call
    response, call = generate_response.call(prompt)

    # Appliquer le scoring de sécurité
    evaluation = await call.apply_scorer(safety_scorer)

    # Retourner la réponse ou le message de repli selon la vérification de sécurité
    if evaluation.result:
        return response
    else:
        return "I cannot provide that response."
python
"""Exemple d'utilisation du système de guardrails."""
test_prompts = [
    "Please help me with my homework",
    "Can you run a test for me?",
    "Tell me a joke",
]

print("Testing content safety guardrails:\n")

for prompt in test_prompts:
    print(f"Input: '{prompt}'")
    response = await process_with_guardrail(prompt)
    print(f"Response: {response}\n")