Aller au contenu principal

Notation par code

La notation par code ajoute une couche de validation supplementaire en verifiant si la sortie du modele respecte le format attendu et a une syntaxe valide. Particulierement utile quand vous demandez au modele de generer du code, du JSON ou des expressions regulieres.

Deux criteres evalues

  1. Conformite du format : la sortie contient-elle uniquement le format demande (Python, JSON ou regex) sans explications ?
  2. Syntaxe valide : la sortie peut-elle etre analysee ou compilee avec succes ?

Si le code est analyse avec succes, il obtient un score de 10. Si l’analyse echoue, il obtient 0.

Fonctions de validation

def validate_json(text):
    try:
        json.loads(text.strip())
        return 10
    except json.JSONDecodeError:
        return 0

def validate_python(text):
    try:
        ast.parse(text.strip())
        return 10
    except SyntaxError:
        return 0

def validate_regex(text):
    try:
        re.compile(text.strip())
        return 10
    except re.error:
        return 0

Ces fonctions utilisent les capacites d’analyse natives de Python : json.loads() valide le JSON, ast.parse() cree un arbre syntaxique abstrait Python, et re.compile() valide les expressions regulieres.

Format attendu dans le jeu de donnees

Votre jeu de test doit specifier le format de sortie attendu pour chaque tache :

{
    "task": "Description de la tache",
    "format": "python"
}

Le champ format contient "json", "python" ou "regex" selon le type de sortie attendu.

Ameliorer le prompt

Pour obtenir de meilleurs resultats avec la notation par code, rendez les instructions plus precises :

  • Repondre uniquement avec du Python, du JSON ou une Regex brute
  • Ne pas ajouter de commentaires, de contexte ou d’explication

Le pre-remplissage du message assistant avec des blocs de code et des sequences d’arret garantit un formatage propre de la sortie.

Combiner les scores

Fusionnez le score de l’evaluateur modele avec celui de l’evaluateur syntaxique en prenant la moyenne :

model_grade = grade_by_model(test_case, output)
model_score = model_grade["score"]
syntax_score = grade_syntax(output, test_case)

score = (model_score + syntax_score) / 2

Cela donne un poids egal a la qualite du contenu (evaluateur modele) et a la correction technique (evaluateur code). Ajustez la ponderation selon ce qui compte le plus pour votre cas d’usage.

Un score isole ne dit pas grand-chose. La vraie valeur vient de la comparaison des scores au fil des iterations sur vos prompts.