Skip to main content
Ceci est un notebook interactif. Vous pouvez l’exécuter localement ou utiliser les liens suivants :
Générer du code de qualité, correctement structuré, documenté et testé, n’a rien de simple. Ce guide s’adresse aux développeurs qui souhaitent créer un flux de travail de génération de code reposant sur un LLM et en mesurer la qualité de manière systématique. Ce notebook montre comment créer un pipeline de génération de code qui produit des fonctions Python, évaluées à l’aide de la suite de tests HumanEval. Le pipeline s’appuie sur Weave pour le suivi et la comparaison des évaluations, et sur les modèles GPT d’OpenAI pour générer du code avec des sorties structurées.
Tableau de bord d’évaluation Weave comparant des runs de génération de code

Pourquoi utiliser Weave

Ce tutoriel utilise Weave pour mettre en œuvre et évaluer un pipeline de génération de code. Vous apprendrez à :
  • Suivre votre pipeline LLM : journalisez les entrées, les sorties et les étapes intermédiaires de votre processus de génération de code.
  • Évaluer les sorties du LLM : créez et comparez des évaluations du code généré à l’aide d’outils de débogage et de visualisations.

Configurer l’environnement

Configurez votre environnement et importez les bibliothèques nécessaires. Ces dépendances fournissent les outils de mise en forme, le chargeur de dataset ainsi que les clients OpenAI et Weave utilisés tout au long du pipeline.
Weave suit automatiquement les appels d’API OpenAI, y compris leurs entrées, leurs sorties et leurs métadonnées. Vous n’avez besoin d’ajouter aucun code de journalisation supplémentaire pour vos interactions avec OpenAI : Weave s’en charge en arrière-plan.

Sorties structurées et modèles Pydantic

Ce pipeline de génération de code utilise le mode de sorties structurées d’OpenAI ainsi que des modèles Pydantic pour obtenir du modèle de langage des réponses cohérentes et bien formatées. Cette approche présente plusieurs avantages :
  • Sécurité des types : définir des modèles Pydantic pour les sorties attendues permet d’appliquer une structure stricte au code généré, aux runners de programmes et aux tests unitaires.
  • Analyse simplifiée : le mode de sorties structurées convertit directement la réponse du modèle en instances des modèles Pydantic prédéfinis, ce qui limite le recours à des post-traitements complexes.
  • Fiabilité accrue : en spécifiant précisément le format attendu, vous réduisez le risque que le modèle de langage produise des sorties inattendues ou mal formées.
L’exemple suivant définit des modèles Pydantic et les utilise avec les sorties structurées d’OpenAI :

Implémenter un formateur de code

Pour obtenir du code propre et cohérent, implémentez une classe CodeFormatter à l’aide d’opérations Weave. Ce formateur applique des règles de linting et de style au code généré, au runner du programme et aux tests unitaires.
Cette classe CodeFormatter fournit plusieurs opérations Weave permettant de nettoyer et de formater le code généré :
  • Remplacement des sauts de ligne échappés par de véritables sauts de ligne.
  • Suppression des imports et des variables inutilisés.
  • Tri des imports.
  • Application du formatage PEP 8.
  • Ajout des imports manquants.

Définir le CodeGenerationPipeline

Trace Weave d’un run de pipeline de génération de code
Une fois le formateur en place, l’étape suivante consiste à implémenter la logique principale de génération de code, qui relie le prompt, l’appel LLM et le formateur. Cet exemple utilise un weave.Model afin que le modèle soit automatiquement versionné à chaque modification. Le model_name est défini comme attribut : vous pouvez ainsi l’expérimenter, puis examiner ses différences et le comparer dans Weave. Les appels de fonctions sont suivis avec @weave.op : leurs entrées et leurs sorties sont ainsi journalisées, ce qui facilite le suivi des erreurs et le débogage.
Cette classe CodeGenerationPipeline encapsule la logique de génération de code sous la forme d’un Weave Model, ce qui présente plusieurs avantages :
  • Suivi automatique des expériences : Weave capture les entrées, les sorties et les paramètres de chaque run du modèle.
  • Gestion des versions : toute modification des attributs ou du code du modèle est automatiquement versionnée, ce qui constitue un historique de l’évolution de votre pipeline de génération de code au fil du temps.
  • Reproductibilité : grâce à la gestion des versions et au suivi, vous pouvez reproduire n’importe quel résultat ou configuration antérieurs de votre pipeline de génération de code.
  • Gestion des hyperparamètres : les attributs du modèle (comme model_name) sont définis et suivis d’un run à l’autre, ce qui facilite l’expérimentation.
  • Intégration à l’écosystème Weave : weave.Model relie votre pipeline aux autres outils Weave, comme les évaluations et les fonctionnalités de déploiement.

Implémenter des métriques d’évaluation

Pour évaluer la qualité du code généré, implémentez des métriques d’évaluation à l’aide d’une sous-classe de weave.Scorer. Celle-ci exécute score sur chaque model_output du dataset. model_output correspond à la sortie de la fonction predict de weave.Model. prompt provient du dataset human-eval.
Ces fonctions d’évaluation exécutent le code généré et renvoient une valeur booléenne indiquant si le code a réussi le test fourni par le dataset.
Trace Weave d’un scorer HumanEval évaluant du code généré

Créer un dataset Weave et exécuter l’évaluation

Une fois le pipeline et le scorer définis, la dernière étape consiste à constituer le dataset d’évaluation et à exécuter l’évaluation de bout en bout. Pour évaluer le pipeline, créez un dataset Weave et lancez une évaluation :
Ce code crée un dataset à partir des exemples de prompts, définit le scorer de test HumanEval et lance une évaluation du pipeline de génération de code. Une fois l’évaluation terminée, vous pouvez examiner les résultats dans l’interface de Weights & Biases et les comparer d’un run à l’autre.
Tableau de bord d’évaluation Weave affichant les résultats du scorer HumanEval

Conclusion

Cet exemple montre comment implémenter un pipeline de génération de code avec Weave et les modèles de langage d’OpenAI. Vous avez appris à :
  • Créer des opérations Weave pour chaque étape du processus de génération de code.
  • Encapsuler le pipeline dans un Weave Model pour simplifier le suivi et l’évaluation.
  • Implémenter des métriques d’évaluation personnalisées à l’aide d’opérations Weave.
  • Créer un dataset et lancer une évaluation du pipeline.
Weave suit les entrées, les sorties et les étapes intermédiaires tout au long du processus de génération de code, ce qui facilite le débogage, l’optimisation et l’évaluation de votre application LLM. Pour en savoir plus sur Weave et ses fonctionnalités, consultez la documentation Weave. Vous pouvez faire évoluer cet exemple pour traiter des datasets plus volumineux, implémenter des métriques d’évaluation plus sophistiquées ou l’intégrer à d’autres flux de travail LLM.
Dernière modification le 30 septembre 2026