Aller au contenu principal

Ingenierie de prompt

L’ingenierie de prompt consiste a prendre un prompt existant et a l’ameliorer pour obtenir des sorties plus fiables et de meilleure qualite. Le processus est iteratif : ecrire un prompt initial, evaluer sa performance, appliquer une technique, puis re-evaluer.

Le processus iteratif

Le cycle est clair : definir un objectif, ecrire un prompt initial, l’evaluer, appliquer une technique d’ingenierie, puis re-evaluer pour verifier l’amelioration. Ce cycle se repete jusqu’a obtenir des resultats satisfaisants.

Pour cette serie de lecons, nous travaillons sur un exemple concret : creer un prompt qui genere des plans alimentaires d’une journee pour des athletes, bases sur leur taille, poids, objectifs physiques et restrictions alimentaires.

Configurer le pipeline d’evaluation

L’evaluation utilise une version amelioree du pipeline des modules precedents, encapsulee dans une classe PromptEvaluator qui gere la generation de jeux de donnees et la notation par modele :

evaluator = PromptEvaluator(max_concurrent_tasks=5)

Commencez avec une valeur de concurrence basse (3) pour eviter les erreurs de limites de debit.

Generer les donnees de test

La methode generate_dataset cree des cas de test. Specifiez :

  • Une description de la tache
  • Les entrees requises par le prompt
  • Le nombre de cas de test a generer
dataset = evaluator.generate_dataset(
    task_description="Ecrire un plan alimentaire compact d'une journee pour un athlete",
    prompt_inputs_spec={
        "height": "Taille de l'athlete en cm",
        "weight": "Poids de l'athlete en kg",
        "goal": "Objectif de l'athlete",
        "restrictions": "Restrictions alimentaires"
    },
    num_cases=3
)

Le prompt initial (baseline)

Commencez par un prompt simple et naif pour etablir une base de reference :

def run_prompt(prompt_inputs):
    prompt = f"""
    Que devrait manger cette personne ?

    - Taille : {prompt_inputs["height"]}
    - Poids : {prompt_inputs["weight"]}
    - Objectif : {prompt_inputs["goal"]}
    - Restrictions : {prompt_inputs["restrictions"]}
    """

    messages = []
    add_user_message(messages, prompt)
    return chat(messages)

Lancer l’evaluation

results = evaluator.run_evaluation(
    run_prompt_function=run_prompt,
    dataset_file="dataset.json",
    extra_criteria="""
    La sortie doit inclure :
    - Total calorique journalier
    - Repartition des macronutriments
    - Repas avec aliments precis, portions et horaires
    """
)

L’evaluation genere un fichier output.html avec les resultats detailles. Un score initial bas (2.3/10) est normal — c’est votre point de depart pour iterer.

Avec cette base etablie, vous pouvez maintenant appliquer systematiquement les techniques d’ingenierie de prompt qui suivent dans les prochaines lecons.