gen-ai.fr

23 juin 2024
Chaine de pensée, le couteau suisse du Prompt Engineer

Une des techniques les plus efficace pour améliorer la performance d’un prompt est la Chaine de pensée (Chain of Thought ou CoT).

Cette technique peut s’appliquer dans toutes les situations du LLM Engineering:

  • Génération de contenu
  • Création d’entités structurées
  • Workflow d’Agents
  • Étape de Génération d’un RAG
  • Extraction de facettes
  • et bien d'autres!

Pour bien comprendre le fonctionnement de la Chaine de pensée et comment l'utiliser, il est nécessaire de comprendre le fonctionnement interne d'un LLM durant le processus d'inférence (génération).

Fonctionnement de la Chaine de pensée

Comme souvent avec les LLMs, on peut faire une analogie avec le raisonnement humain.

Pour mieux résoudre un problème, on peut par exemple le découper en plusieurs tâches ou bien résumer toutes les données disponible en amont.
Cela nous permet de mieux structurer notre pensée pour résoudre le problème.

La Chaine de pensée est une technique relativement similaire qui exploite les capacités probabilistes des LLMs afin de renforcer le champ sémantique de ce que l’on souhaite faire générer.

Concrètement, cela consiste la plupart du temps à donner des exemples ou faire générer des étapes intermédiaires au LLM pour mieux guider la génération de la réponse finale.

Boucle d'inférence

Pour bien comprendre les mécanismes sous-jacent de la Chaine de pensée, il faut comprendre le fonctionnement de l'inférence (la génération).

L'inférence, c'est le processus dans lequel un prompt est fourni à un LLM et une réponse est fournie à l'utilisateur.

Lors de l'inférence, l’ensemble des tokens du prompt est passé au LLM qui va ensuite proposer le token ayant le plus de probabilités d’apparaitre.

Puis l’ensemble du prompt + ce nouveau token sont à nouveau passés au LLM qui propose le token suivant et ainsi de suite.

Ce processus est répété jusqu’à ce que le LLM propose un token spécial qui indique la fin de la génération. À ce moment la, plutôt que de repartir pour un cycle d’inférence, le résultat est renvoyé à l’utilisateur du modèle.

Cela signifie que les tokens générés par le LLM sont aussi pris en compte dans la génération et c’est l’explication du mécanisme de la Chaine de pensée.

Un Prompt Engineer peut donc utiliser deux leviers lorsqu’il réfléchit à son inférence:

  • Le texte du prompt initial
  • Les étapes de génération intermédiaires

4 exemples concrets pour comprendre

Passons maintenant à la pratique avec 4 utilisations de la Chaine de pensée dans des cas concrets plutôt que des "Hello World Foobar" eux même générés par un LLM pour faire du SEO.

Chaque exemple présente un cas d'usage concret de LLM Engineering et est accompagné d'un exemple de génération avec GPT-4o.

Génération de contenu

Un des cas d’usage récurrent des LLM est la génération d’un résumé.

Plutôt que de demander directement au LLM de générer un résumé, nous pouvons d’abord lui demander de générer une table des matières puis un résumé.

Cela mettra l’accent sur les chapitres à résumer car ils seront listés dans les étapes de génération intermédiaires.

Le résultat final aura donc plus de chance d’être exhaustif sur le contenu du document initial.

Tu es doté d’un excellent esprit de synthèse.

Je vais te donner le contenu d’un document et tu auras deux tâches:
- Commence par écrire la table des matières de ce document en incluant tous les niveaux de titres
- Termine par écrire un résumé du contenu du document en t’aidant de la table des matières

# Begin Document
{{ document }}
# End Document

Dans ce exemple, la technique de Chaine de pensée nous permet de faire extraire des informations du texte (la table des matières) afin de guider la génération finale.

Voir la génération de contenu avec Chaine de pensée

Création d'entités structurés

La Chaine de Pensée est aussi très utile pour contrôler le format de génération d’entités structurées.

Ici, nous pouvons directement donner au LLM des exemples du format de réponse attendu:

Tu es un excellent pédagogue capable de créer des cours de qualité.

A partir du document suivant, extrait les messages clés ainsi que les 
changements attendus.


# Begin Document
{{ document }}
# End Document

Utilise le format YAML suivant pour répondre:
```yaml
granules:
  - keyMessage: “un message clé”
     desiredChange: “changement attendu lorsque l’apprenant aura compris le message clé”
  - keyMessage: “un autre message clé”
     desiredChange: “changement attendu lorsque l’apprenant aura compris le message clé”
```

Ici, ces exemples vont réduire fortement les chances d’avoir des hallucinations dans la réponse finale du LLM.

Voir la création d'entités structurés avec Chaine de pensée

Agent LLM

Dans le fonctionnement d’un Agent LLM, il est préférable de demander au LLM de générer explicitement un plan des actions qu’il doit réaliser pour accomplir sa tâche.

Tu es un Agent semi-autonome capable d’utiliser des outils pour accomplir une tâche.

Ta tâche est de réserver un créneau de réunion pour les personnes suivantes: 
- Adrien
- Hubert

Tu peux utiliser les outils suivants:
- listMeetings(name: string): liste les réunions à venir d’une personne
- bookMeeting(nameA: string, nameB: string, time: Date): réserve une réunion

Commence par faire un plan des actions que tu vas devoir réaliser pour résoudre ta tâche.

Ensuite répond avec les outils que tu veux utiliser dans un bloc YAML, exemple:
```yaml
tools:
  - name: listMeetings
    arguments: [“Aschen”]
```

A partir de ce prompt, le LLM devrait commencer par donner la liste des actions qu’il estime devoir utiliser et cela lui permettra d’utiliser les outils fournis à bon escient.

Exemple d'un Agent LLM avec chaine de pensée

Étape de génération d'un RAG

Dans un cas d’usage RAG, l’utilisation de la Chaine de pensée peut améliorer la qualité de la réponse générée tout en réduisant les hallucinations.

Le défi de cet étape est de faire utiliser au LLM le contenu des documents retrouvés pour répondre à la question.

Nous pouvons donc commencer par demander au LLM de faire un résumé des informations pertinentes contenues dans les documents:

Tu dois répondre à la question suivante d’un utilisateur: {{ userQuestion }}

Tu dois utiliser le contenu des documents suivants pour répondre:
# Begin Documents
{{ documents }}
# End Documents

Commence par lister les informations de chaque document qui sont pertinentes pour répondre à la question de l’utilisateur.

Ensuite, utilise ces informations pour générer une réponse directe à la question de l’utilisateur.

Utilise le format YAML suivant pour répondre:
```yaml
informations:
  - “extrait d’un document pertinent par rapport à la question”
  -  “un autre extrait d’un document”
  - “utilise autant d’extrait de document que nécessaire”

finalAnswer:  “réponse finale à la question de l’utilisateur en t’aidant des informations extraites des documents”
```

L’étape d’extraction des informations jugées pertinente permettra au LLM de renforcer ce champ sémantique lorsqu’il devra générer la réponse finale car tous les tokens précédemment générés seront aussi utilisés.

Exemple de génération RAG avec Chaine de pensée

Conclusion

La Chaine de pensée est une technique très efficace pour améliorer la performance des prompts.

Elle permet de renforcer le champ sémantique du résultat attendu de deux manières différentes:

  • Chaine de pensée explicite: en donnant des exemples du résultat attendu dans le prompt
  • Chaine de pensée interne: en indiquant au LLM de générer des étapes de “raisonnement” intermédiaire

La deuxième technique est particulièrement efficace car elle permet d’utiliser les capacités du LLM pour extraire des informations qu’il pourra lui même utiliser lors de l’étape finale de génération !

Finalement, la Chaine de pensée peut s’utiliser à l’intérieur d’un même prompt mais peut aussi être découpée dans une Chaine de prompt afin d’améliorer encore les performances.

Bien sur, cela augmente la latence et les coûts mais dans bien des situations le résultat est à la hauteur de l’investissement 😉


TAGS:

Adrien Maret
Architecte solution et expert backend. Mes sujets de prédilections sont le Prompt Engineering, les Agents LLMs et les différents cas d'usages de ces derniers pour augmenter la productivité des développeurs et des employés en général.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués *

DERNIERS POSTS

Chain of thought, the Swiss army knife of the Prompt Engineer
Chaine de pensée, le couteau suisse du Prompt Engineer
Le futur du métier d’UI Designer avec l’IA

TAGS

GenAI est un site français à propos des avancées technologiques dans le monde de l'intelligence artificielle.

Newsletter


© Copyright CC-BY-SA 2023-2024 gen-ai.fr