L'atelier auquel nous avons assisté lors du salon JFTL était axé sur la mise en pratique du prompt engineering avec l'outil « Smartesting », un outil qui regroupe plusieurs des outils d'IA génératives (ou modèles LLM pour Large Language Model) pour la génération de tests et la priorisation de tests. Nous avons également présenté le modèle RAG (Retrieval-Augmented Generation), une technique qui permet d'améliorer encore davantage les résultats.
L'utilisation du prompt engineering et du modèle RAG peut avoir un impact significatif sur les tests, car ces techniques permettent notamment :
- L'interprétation des spécifications, des exigences, des images écrans, des cas de test, des rapports d’anomalies.
- La génération des conditions de test, des cas de tests et des codes de test.
- La synthèse automatique de rapports d’avancement, d’anomalies et de couverture.
- L'évaluation et la correction automatiques de la couverture de test et du code de test, ce qui permet d'améliorer la qualité des tests.
Qu’est ce que le prompt engineering ?
Le Prompt Engineering consiste à concevoir des requêtes de qualité qui guident les modèles LLM pour produire des sorties précises.
Pour cela, il est important de sélectionner le bon type de requêtes, d'optimiser leur longueur et leur structure, et de déterminer leur ordre et leur pertinence par rapport à la tâche.
La structure de base d'un prompt type contient 6 parties :
- Rôle : Le rôle assigné au LLM (par exemple, "concepteur de tests")
- Contexte : Décrire succinctement le contexte de la tâche.
- Instructions : Ce qu’il faut réaliser, éventuellement en plusieurs étapes, pour guider le LLM vers la sortie souhaitée.
- Format : Le format de sortie attendu, qui permet de structurer les données de sortie et de faciliter leur exploitation.
- Contraintes (éventuelles) : Les limitations ou exigences de réalisation, qui permettent de cadrer la tâche et d'éviter les erreurs.
- Données (éventuelles) : Des exemples de réponse et/ou des données de la tâche à réaliser, qui permettent de fournir des informations supplémentaires au LLM.
Quelles sont les techniques pour élaborer des prompts efficaces ?
Un exemple de prompt structuré que nous avons utilisé était le suivant :
Cette requête met en évidence la structure précisée précédemment. Elle montre aussi des aspects importants :
- La cohérence dans les termes utilisés, visible par le mot "exigence" rappelé plusieurs fois
- L'objectif "classe d'équivalence" également répété afin d'augmenter le focus
- L'intégration d'explication et d'auto-vérification, à travers les phrases « explique ton raisonnement » et « Assure-toi ».
Outre cette technique, le requêtage structuré, nous avons testé d'autres techniques de prompt :
- Le requêtage non-structuré en cascade : dans le style d’une conversation humaine avec une suite d’échange de questions / réponses et rebond sur la question suivante
- Le requêtage par étapes : découper la demande en étapes intermédiaires (Chain-of-Thoughts)
- Le méta-requêtage et évaluation : utiliser un LLM pour créer ou améliorer nos requêtes en demandant d’évaluer notre prompt
- Le prompt avec image : ajouter une image en entré, afin d'en extraire des scripts de test
- Le prompt avec document (voir RAG ci-après): ajouter un document en entré afin de prendre en compte certaines données (normes, sécurité, règles métier, ...)
Qu'est-ce que la technique RAG (Retrieval-Augmented Generation) ?
Cette technique consiste à donner du contexte à la requête en pré-intégrant des sources documentaires au LLM, et qui seront pris en compte lors des requêtes :
La technique RAG offre plusieurs avantages, tels que l'exploitation efficace des données d'entreprise, l'amélioration de l'exactitude des faits et la transparence des sources.
Cependant, elle nécessite une attention particulière à la complexité accrue de la chaîne LLM, à la qualité des données d'entrée et au réglage des paramètres pour optimiser ses performances.
Quelles sont les bonnes pratiques ?
Enfin, nous avons passé en revue les bonnes pratiques du prompting adaptées aux activités des tests logiciels :
- Des objectifs clairs etspécifiques, en précisant le contexte et en définissant le résultat attendu
- Le raffinement itératif du prompt, c'est à dire commencer général puis préciser. Utiliser l’auto-vérification, le méta-prompting, et la vérification humaine
- Des données de sortie structurées et détaillées, en définissant le formats (csv, xml, json, ...) et des exemples.
Il est possible d'outiller la création des prompts en créant des bibliothèques de template de prompts (via l'outil Smartesting) et/ou en utilisant un IDE de Prompt engineering (OpenAI, Playground, Anthropic Workbench, etc)
Sophie Marcerou - Testeur QA
Guillaume Brocero - Testeur QA