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 de Weave sont des classes dotées d’une méthode score qui évalue les performances d’un appel. Ils peuvent aller de règles de base à des LLM faisant office de juges. Ce notebook s’adresse aux utilisateurs de Weave qui souhaitent appliquer des évaluateurs à l’exécution pour bloquer ou filtrer les sorties de modèle indésirables. En le suivant, vous créerez un garde-fou de sécurité du contenu qui intercepte une réponse de LLM, l’évalue à l’aide d’un Scorer et renvoie un message de remplacement lorsque le Scorer signale que la réponse n’est pas sûre. Cette utilisation des évaluateurs vous permet de réutiliser la même logique d’évaluation que celle employée pour les expériences hors ligne afin d’appliquer des politiques de sécurité en production. À la fin de ce notebook, vous disposerez d’un ContentSafetyScorer opérationnel qui encapsule un appel LLM et renvoie soit la réponse d’origine, soit une réponse de remplacement sûre, selon le verdict du Scorer.
%pip install weave --quiet
python
"""
Example demonstrating how to implement guardrails in Weave.
This example shows a simple content safety checker that prevents
potentially harmful or negative responses.
"""

import weave

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

class ContentSafetyScorer(weave.Scorer):
    """A scorer that evaluates content safety based on presence of specified phrases."""

    unsafe_phrases: list[str]
    case_sensitive: bool = False

    @weave.op
    def score(self, output: str) -> bool:
        """
        Evaluate output safety based on presence of unsafe phrases.

        Args:
            output: The text output to evaluate

        Returns:
            bool: True if output is safe, False if unsafe
        """
        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:
    """Simulate an LLM response generation."""
    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:
    """
    Process user input with content safety guardrail.
    Returns the response if safe, or a fallback message if unsafe.
    """
    # 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 récupérer 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 le résultat de la vérification de sécurité
    if evaluation.result:
        return response
    else:
        return "I cannot provide that response."
python
"""Example usage of the guardrail system."""
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")