DEV Community

Guillaume Sere
Guillaume Sere

Posted on

Better – Un outil de révision de code basé sur l'IA

Les revues de code ont toujours été cruciales pour maintenir des normes élevées et renforcer les meilleures pratiques dans un projet de codage. Cet article ne porte pas sur la manière dont les développeurs doivent réviser le code, mais plutôt sur la délégation d'une partie de celui-ci à l'IA.

Je ne dis pas que l'IA doit être utilisée à la place des outils de formatage et des linters. Au lieu de cela, elle doit être utilisée en plus de cela, pour détecter des éléments triviaux qui pourraient être manqués par un humain. C'est pourquoi j'ai décidé de suivre une action GitHub créer par Murtuzaali Surti qui examine le code d'une demande d'extraction et génère des suggestions à l'aide de l'IA. Laissez-moi vous expliquer comment procéder.

🚨 REMARQUE :

  • Cette action GitHub est désormais disponible sur la place de marché GitHub

  • C'est une action JavaScript - apprenez-en plus sur la création d'actions JavaScript sur GitHub

Obtenir la différence

Pour interagir avec l'API github, j'ai utilisé octokit, qui est une sorte de SDK ou une bibliothèque cliente permettant d'interagir avec l'API github de manière automatique.

Pour obtenir la différence de la demande d'extraction soulevée, vous devez transmettre l' Accepten-tête avec la valeur application/vnd.github.diffainsi que les paramètres requis.

Image description

Si vous n'êtes pas du tout familier avec les actions GitHub, voici une série d'actions GitHub 101 par Victoria Lo et c'est un bon début:

Une fois que j'obtiens le diff, je l'analyse et supprime les modifications indésirables, puis je le renvoie dans un schéma illustré ci-dessous :

Image description

Ignorer les fichiers

Ignorer des fichiers est assez simple. La liste d'entrée utilisateur nécessite une chaîne de motifs glob séparés par des points-virgules. Elle est ensuite analysée, concaténée avec la liste par défaut des fichiers ignorés et dédupliquée.

Image description

La liste des fichiers ignorés est ensuite utilisée pour supprimer les modifications différentielles qui font référence à ces fichiers ignorés. Cela vous donne une charge utile brute contenant uniquement les modifications souhaitées.

Générer des suggestions

Une fois que j'obtiens la charge utile brute après avoir analysé la différence, je la transmets à l'API de la plateforme. Voici une implémentation de l'API OpenAI.

Image description

Vous remarquerez peut-être l'utilisation du format de réponse dans l'implémentation de l'API. Il s'agit d'une fonctionnalité fournie par de nombreuses plateformes LLM, qui vous permet d'indiquer au modèle de générer la réponse dans un schéma/format spécifique. C'est particulièrement utile dans ce cas, car je ne veux pas que le modèle hallucine et génère des suggestions pour des fichiers ou des positions incorrects dans la demande d'extraction, ou ajoute de nouvelles propriétés à la charge utile de la réponse.

L'invite système est là pour donner au modèle plus de contexte sur la manière dont il doit effectuer la révision du code et sur les éléments à garder à l'esprit. Vous pouvez consulter l'invite système ici . L'invite utilisateur contient la différence réelle, les règles et le contexte de la demande d'extraction. C'est ce qui déclenche la révision du code.

Cette action GitHub prend en charge les modèles OpenAI et Anthropic. Voici comment elle implémente l'API Anthropic :

Image description

Ajout de commentaires

Enfin, après avoir récupéré les suggestions, je les nettoie et les transmets à l'API GitHub pour ajouter des commentaires dans le cadre de la révision.

J'ai choisi la méthode ci-dessous pour ajouter des commentaires car en créant un nouvel avis, vous pouvez ajouter tous les commentaires en une seule fois au lieu d'ajouter un seul commentaire à la fois. L'ajout de commentaires un par un peut également déclencher une limitation du débit, car l'ajout de commentaires déclenche des notifications et vous ne voulez pas spammer les utilisateurs avec des notifications.

Image description

Si cet article vous a plu, n'hésitez pas à me suivre pour plus de contenu ou à partager vos propres expériences dans les commentaires. 🙌

Top comments (0)