Chargement

Lors de la construction de workflows d'évaluation d'invites, les systèmes de notation fournissent des signaux objectifs sur la qualité des sorties. Un évaluateur prend la sortie du modèle et renvoie une forme de retour mesurable - généralement un nombre entre 1 et 10, où 10 représente une qualité élevée et 1 représente une qualité médiocre.

Types d'évaluateurs

Il existe trois approches principales pour évaluer les sorties des modèles :

  • Évaluateurs par code - Évaluent les sorties de manière programmatique à l'aide d'une logique personnalisée
  • Évaluateurs par modèle - Utilisent un autre modèle d'IA pour évaluer la qualité
  • Évaluateurs humains - Font appel à des personnes pour examiner et noter manuellement les sorties

Évaluateurs par code

Les évaluateurs par code vous permettent d'implémenter n'importe quelle vérification programmatique que vous pouvez imaginer. Les usages courants incluent :

  • Vérifier la longueur de la sortie
  • Vérifier que la sortie contient ou ne contient pas certains mots
  • Validation de la syntaxe pour JSON, Python ou les expressions régulières
  • Scores de lisibilité

La seule exigence est que votre code renvoie un signal utilisable - généralement un nombre entre 1 et 10.

Évaluateurs par modèle

Les évaluateurs par modèle transmettent votre sortie originale à un autre appel API pour évaluation. Cette approche offre une flexibilité considérable pour évaluer :

  • La qualité de la réponse
  • La qualité du respect des instructions
  • L'exhaustivité
  • L'utilité
  • La sécurité

Évaluateurs humains

Les évaluateurs humains offrent la plus grande flexibilité mais sont chronophages et fastidieux. Ils sont utiles pour évaluer :

  • La qualité générale de la réponse
  • L'exhaustivité
  • La profondeur
  • La concision
  • La pertinence

Définir les critères d'évaluation

Avant d'implémenter un évaluateur, vous devez disposer de critères d'évaluation clairs. Pour une invite de génération de code, vous pourriez vous concentrer sur :

  • Format - Ne devrait renvoyer que du Python, du JSON ou une expression régulière sans explication
  • Syntaxe valide - Le code produit devrait avoir une syntaxe valide
  • Respect de la tâche - La réponse devrait répondre directement à la tâche de l'utilisateur avec un code précis

Les deux premiers critères fonctionnent bien avec les évaluateurs par code, tandis que le respect de la tâche est mieux adapté aux évaluateurs par modèle en raison de leur flexibilité.

Implémenter un évaluateur par modèle

Voici comment construire une fonction d'évaluateur par modèle :

python
def grade_by_model(test_case, output):
    # Créer l'invite d'évaluation
    eval_prompt = """
    You are an expert code reviewer. Evaluate this AI-generated solution.
    
    Task: {task}
    Solution: {solution}
    
    Provide your evaluation as a structured JSON object with:
    - "strengths": An array of 1-3 key strengths
    - "weaknesses": An array of 1-3 key areas for improvement  
    - "reasoning": A concise explanation of your assessment
    - "score": A number between 1-10
    """
    
    messages = []
    add_user_message(messages, eval_prompt)
    add_assistant_message(messages, "```json")

    eval_text = chat(messages, stop_sequences=["```"])
    return json.loads(eval_text)

L'idée clé est de demander les points forts, les points faibles et le raisonnement en plus du score. Sans ce contexte, les modèles ont tendance à se rabattre par défaut sur des scores moyens autour de 6. ## Intégrer la notation dans votre workflow Mettez à jour votre exécuteur de cas de test pour appeler l'évaluateur : ``` def run_test_case(test_case): output = run_prompt(test_case) # Grade the output model_grade = grade_by_model(test_case, output) score = model_grade["score"] reasoning = model_grade["reasoning"] return \{ "output": output, "test_case": test_case, "score": score, "reasoning": reasoning \} ``` `` Enfin, calculez un score moyen sur l'ensemble des cas de test : ``` from statistics import mean def run_eval(dataset): results = [] for test_case in dataset: result = run_test_case(test_case) results.append(result) average_score = mean([result["score"] for result in results]) print(f"Average score: \{average_score\}") return results ``` ` Cela vous donne une métrique objective à suivre au fur et à mesure que vous itérez sur votre invite. Bien que les évaluateurs par modèle puissent être quelque peu capricieux, ils fournissent une base de référence cohérente pour mesurer les améliorations. ` ``