Skip to main content
La génération augmentée par récupération (RAG, Retrieval Augmented Generation) est une approche courante pour créer des applications d’IA générative capables d’accéder à des bases de connaissances personnalisées. Ce tutoriel vous accompagne dans la création d’une application RAG et vous montre comment utiliser Weave pour suivre ses étapes de récupération et évaluer ses réponses avec un juge LLM, afin de mesurer et d’améliorer la qualité des réponses renvoyées par votre application. Ce guide s’adresse aux développeurs qui créent des applications RAG et souhaitent doter leurs pipelines d’observabilité et d’une évaluation systématique. Evals hero

Ce que vous allez apprendre

Ce guide vous montre comment :
  • Construire une base de connaissances.
  • Créer une application RAG dotée d’une étape de récupération qui trouve les documents pertinents.
  • Suivre les étapes de récupération avec Weave.
  • Évaluer des applications RAG à l’aide d’un juge LLM pour mesurer la précision du contexte.
  • Définir des fonctions de score personnalisées.

Prérequis

  • Un compte CoreWeave Forge
  • Python 3.10+ ou Node.js 18+
  • Les paquets requis installés :
    • Python : pip install weave openai
    • TypeScript : npm install weave openai
  • Une clé API OpenAI définie dans une variable d’environnement.

Créer une base de connaissances

La base de connaissances est le corpus dans lequel votre application RAG effectue ses recherches au moment de la requête. Dans cette section, vous calculez des embeddings vectoriels pour un petit ensemble d’articles afin de pouvoir ensuite récupérer l’article le plus pertinent pour une question donnée. Commencez par calculer les embeddings des articles. En général, cette opération n’est effectuée qu’une seule fois sur vos articles, puis les embeddings et les métadonnées sont stockés dans une base de données. Ici, par souci de simplicité, elle est répétée à chaque exécution du script.

Créer une application RAG

Une fois la base de connaissances en place, vous pouvez créer l’application RAG proprement dite. Cette section associe l’étape de récupération à un appel LLM, puis encapsule l’ensemble avec Weave afin que chaque entrée et chaque sortie soient suivies automatiquement. Ensuite, encapsulez la fonction de récupération get_most_relevant_document avec un décorateur weave.op() et créez une classe Model. En encapsulant la fonction de récupération avec weave.op(), vous permettez à Weave de capturer ses entrées et ses sorties à chaque appel, ce qui vous permettra ensuite d’inspecter l’étape de récupération. Appelez weave.init('<team-name>/rag-quickstart') pour commencer à suivre toutes les entrées et sorties de vos fonctions afin de les inspecter ultérieurement. Si vous ne spécifiez pas de nom d’équipe, Weave enregistre la sortie dans votre équipe ou entity W&B par défaut.

Évaluer avec un juge LLM

Maintenant que votre application RAG est en cours d’exécution et suivie par Weave, l’étape suivante consiste à évaluer la qualité de ses réponses. Cette section explique comment utiliser un LLM comme juge automatique afin de noter les réponses de votre application sans avoir à les étiqueter manuellement. Lorsqu’il n’existe pas de moyen simple d’évaluer votre application, vous pouvez confier l’évaluation de certains de ses aspects à un LLM. Voici un exemple dans lequel un juge LLM mesure la précision du contexte : un prompt lui demande de vérifier si le contexte a été utile pour aboutir à la réponse donnée. Ce prompt est une version enrichie de celui du célèbre framework RAGAS.

Définir une fonction de score

Comme dans le tutoriel Créer un pipeline d’évaluation, définissez un ensemble de lignes d’exemple sur lesquelles tester votre application, ainsi qu’une fonction de score. La fonction de score reçoit une ligne et l’évalue. Les arguments d’entrée doivent correspondre aux clés de votre ligne : ici, question est donc extrait du dictionnaire de la ligne. output correspond à la sortie du modèle. L’entrée du modèle est extraite de l’exemple d’après son argument d’entrée, c’est-à-dire ici aussi question. Cet exemple utilise des fonctions async afin qu’elles s’exécutent en parallèle. Pour une brève introduction à la programmation asynchrone, consultez la documentation Python sur asyncio.

Facultatif : définir une classe Scorer

La fonction de score de la section précédente convient aux cas simples, mais une classe Scorer s’avère utile lorsque vous souhaitez réutiliser le même juge dans plusieurs évaluations ou personnaliser la manière dont les scores sont agrégés. Les étapes suivantes indiquent quand et comment en définir une. Dans certaines applications, vous pouvez avoir besoin de créer des classes d’évaluation personnalisées (par exemple, une classe LLMJudge standardisée avec des paramètres tels que le modèle de chat et le prompt), de personnaliser le scoring de chaque ligne ainsi que le calcul d’un score agrégé. Weave propose une liste de classes Scorer prêtes à l’emploi et facilite également la création d’un Scorer personnalisé. L’exemple suivant montre comment créer une class CorrectnessLLMJudge(Scorer) personnalisée. Dans les grandes lignes, voici les étapes pour créer un Scorer personnalisé :
  1. Définissez une classe personnalisée qui hérite de weave.flow.scorer.Scorer.
  2. Redéfinissez la fonction score et ajoutez un @weave.op() si vous souhaitez suivre chaque appel de la fonction.
    • Cette fonction doit définir un argument output qui reçoit la prédiction du modèle. Déclarez-le avec le type Optional[dict] au cas où le modèle renverrait « None ».
    • Les autres arguments peuvent être de type général Any ou dict, ou bien sélectionner des colonnes spécifiques du dataset utilisé pour évaluer le modèle avec la classe weave.Evaluate. Leurs noms doivent correspondre exactement aux noms de colonnes ou aux clés d’une ligne après son passage dans preprocess_model_input, si cette fonction est utilisée.
  3. Facultatif : redéfinissez la fonction summarize pour personnaliser le calcul du score agrégé. Si vous ne définissez pas de fonction personnalisée, Weave utilise par défaut la fonction weave.flow.scorer.auto_summarize.
    • Cette fonction doit comporter un décorateur @weave.op().
Pour utiliser cette classe comme évaluateur, initialisez-la et transmettez-la à l’argument scorers de votre Evaluation, comme suit :

Assembler le tout

Cette section regroupe tout ce qui a été vu dans les étapes précédentes en un seul exemple de bout en bout, afin que vous puissiez voir comment les différents éléments s’articulent et les adapter à votre propre application RAG. Pour obtenir le même résultat avec vos applications RAG :
  • Encapsulez les appels LLM et les fonctions de l’étape de récupération avec weave.op().
  • Facultatif : créez une sous-classe de Model avec une fonction predict et les détails de l’application.
  • Rassemblez des exemples à évaluer.
  • Créez des fonctions de score qui évaluent un exemple à la fois.
  • Utilisez la classe Evaluation pour exécuter des évaluations sur vos exemples.
REMARQUE : l’exécution asynchrone des évaluations peut parfois déclencher une limite de débit sur les modèles d’OpenAI, d’Anthropic et d’autres fournisseurs. Pour l’éviter, vous pouvez définir une variable d’environnement qui limite le nombre de workers parallèles, par exemple WEAVE_PARALLELISM=3. Voici le code complet.

Conclusion

Ce tutoriel vous a montré comment intégrer l’observabilité aux différentes étapes de vos applications, comme l’étape de récupération dans cet exemple. Vous avez également appris à concevoir des fonctions de score plus complexes, comme un juge LLM, pour évaluer automatiquement les réponses de vos applications.
Dernière modification le 30 septembre 2026