Il s’agit d’un notebook interactif. Vous pouvez l’exécuter localement ou utiliser les liens ci-dessous :
Génération de code avec Weave et OpenAI

Pourquoi utiliser Weave ?
- Suivre votre pipeline LLM : consigner 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éer et comparer des évaluations de votre code généré à l’aide d’outils de débogage avancés et de visualisations.
Configurer l’environnement
Weave suit automatiquement les appels à l’API OpenAI, y compris les entrées, les sorties et les métadonnées. Vous n’avez donc pas besoin d’ajouter de code de journalisation pour vos interactions avec OpenAI : Weave s’en charge de façon transparente en arrière-plan.
Tirer parti des sorties structurées et des modèles Pydantic
- Sécurité des types : en définissant des modèles Pydantic pour nos sorties attendues, nous appliquons une structure stricte au code généré, aux exécutants de programme et aux tests unitaires.
- Analyse simplifiée : le mode de sortie structurée nous permet d’interpréter directement la réponse du modèle dans nos modèles Pydantic prédéfinis, ce qui réduit le besoin de post-traitements complexes.
- Fiabilité accrue : en spécifiant le format exact attendu, nous réduisons le risque d’obtenir des sorties inattendues ou mal formées du modèle de langage.
Implémenter un formateur de code
CodeFormatter à l’aide d’opérations Weave. Ce formateur applique diverses règles de linting et de style au code généré, au runner du programme et aux tests unitaires.
CodeFormatter propose plusieurs opérations Weave pour nettoyer et mettre en forme le code généré :
- Remplacement des retours à la ligne échappés par de vrais retours à la 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

weave.Model pour qu’il soit automatiquement versionné à chaque modification. Nous conservons également model_name comme attribut afin de pouvoir expérimenter avec et comparer facilement les différences dans Weave. Nous suivons les appels de notre fonction avec @weave.op afin que les entrées et les sorties soient enregistrées pour faciliter le suivi des erreurs et le débogage.
CodeGenerationPipeline encapsule notre logique de génération de code sous forme de Weave Model, offrant plusieurs avantages clés :
- Suivi automatique des expériences : Weave capture les entrées, les sorties et les paramètres pour chaque exécution du modèle.
- Gestion des versions : Les modifications apportées aux attributs ou au code du modèle sont automatiquement versionnées, ce qui crée un historique clair de l’évolution de votre pipeline de génération de code au fil du temps.
- Reproductibilité : La gestion des versions et le suivi permettent de reproduire facilement tout résultat ou toute configuration précédente de votre pipeline de génération de code.
- Gestion des hyperparamètres : Les attributs du modèle (comme
model_name) sont clairement définis et suivis d’une exécution à l’autre, ce qui facilite l’expérimentation. - Intégration avec l’écosystème Weave : L’utilisation de
weave.Modelpermet une intégration fluide avec d’autres outils Weave, tels que les évaluations et les fonctionnalités de serving.
Implémenter des métriques d’évaluation
weave.Scorer. Cette sous-classe exécutera score sur chaque model_output de notre jeu de données. model_output provient du résultat de la fonction predict dans notre weave.Model. prompt est extrait de notre jeu de données human-eval.

Créer un jeu de données Weave et effectuer une évaluation

Conclusion
- Créer des opérations Weave pour chaque étape du processus de génération de code
- Encapsuler le pipeline dans un Weave Model afin de faciliter le suivi et l’évaluation
- Implémenter des métriques d’évaluation personnalisées à l’aide d’opérations Weave
- Créer un jeu de données et lancer une évaluation du pipeline