# Prompt Chaining

import {Screenshot} from 'components/screenshot'
import PC1 from '../../img/prompt_chaining/prompt-chaining-1.png'

## Introduction au Prompt Chaining

Pour améliorer la fiabilité et les performances des LLMs, l'une des techniques de prompt engineering les plus importantes consiste à diviser les tâches en sous-tâches. Une fois les sous-tâches identifiées, le LLM est d'abord confronté à une sous-tâche puis la réponse générée est utilisée dans une autre prompt. Cette méthode est appelée prompt chaining, où une tâche est divisée en sous-tâches dans le but de créer une chaîne d'opérations de prompts.

Le prompt chaining est utile pour accomplir des tâches complexes qu'un LLM pourrait avoir du mal à traiter s'il lui était donné une prompt très détaillée. Dans le prompt chaining, les chaines de prompts effectuent des transformations ou des processus additionnels sur les réponses générées avant d'atteindre l'état final désiré. 

En plus d'atteindre de meilleures performances, le prompt chaining aide à rendre les LLM plus transparents, augmente leur contrôlabilité et leur fiabilité. Cela signifie que vous pouvez débugger des problèmes avec les réponses de ces modèles plus facilement ainsi qu'analyser et améliorer les performances dans les différentes étapes qui en ont besoin.  

Cette méthode est particulièrement utile lorsque l'on cherche à construire un assistant conversationnel basé sur un LLM afin d'améliorer la personnalisation et l'expérience utilisateur de votre application.


## Cas d'usages du Prompt Chaining

### Le Prompt Chaining pour questions/réponses sur documents

Le prompt chaining peut être utilisé dans différents scénarios pouvant impliquer plusieurs opérations ou transformations. Par exemple, l'un des cas d'utilisation courants des LLM consiste à répondre à des questions sur un document textuel volumineux. Il est utile de concevoir deux prompts différentes, la première étant chargée d'extraire les citations pertinentes pour répondre à une question et la seconde prenant en entrée les citations et le document original pour répondre à une question donnée. En d'autres termes, vous créerez deux prompts différentes pour répondre à une question à partir d'un document.

La première prompt ci-dessous extrait les citations pertinentes du document étant donné la question. Notez que pour des raisons de simplicité, nous avons abrégé le document par `{{document}}`. Pour tester la prompt, vous pouvez copier et coller un article de Wikipedia tel que cette page sur le [prompt engineering] (https://en.wikipedia.org/wiki/Prompt_engineering). En raison du contexte plus large utilisé pour cette tâche, nous utilisons le modèle `gpt-4-1106-preview` d'OpenAI. Vous pouvez utiliser l'invite avec d'autres LLM à contexte long comme Claude.

Prompt 1 : 
```
Tu es un assistant utile. Ta tâche est d'aider à répondre à une question étant donné un document. La première étape est d'extraire des citations du document, délimité par ###, pertinentes par rapport à la question. Génère la liste des citations en utilisant <quotes></quotes>. Répond avant "Aucune citation pertinente trouvée !" si aucune citation pertinente n'a été trouvé.


####
{{document}}
####
```

Voici une capture d'écran de la prompt incluant la question posée par l'utilisateur (`user`).

<Screenshot src={PC1} alt="Prompt Chaining Part 1" />

Sortie de la première prompt :
```
<quotes>
- Chain-of-thought (CoT) prompting[27]
- Generated knowledge prompting[37]
- Least-to-most prompting[38]
- Self-consistency decoding[39]
- Complexity-based prompting[41]
- Self-refine[42]
- Tree-of-thought prompting[43]
- Maieutic prompting[45]
- Directional-stimulus prompting[46]
- Textual inversion and embeddings[59]
- Using gradient descent to search for prompts[61][62][63][64]
- Prompt injection[65][66][67]
</quotes>
```

Les citations qui ont été renvoyées dans la première prompt peuvent maintenant être utilisées comme entrée dans la deuxième prompt ci-dessous. Notez que vous pouvez nettoyer un peu plus les citations, c'est-à-dire les supprimer. Ces citations pourraient être supprimées ou utilisées dans le cadre d'une autre prompt de la chaîne, mais vous n'en tenez pas compte pour l'instant. La deuxième prompt reprend les citations pertinentes extraites de la réponse à la première et prépare une réponse utile à la question en fonction du document et des citations extraites. La deuxième prompt peut être la suivante :

Prompt 2 :
```
Etant donné un ensemble de citations pertinentes (délimitées par <quotes></quotes>) extraites d'un document et du document original (délimité par ###), veuillez rédiger une réponse à la question. Veillez à ce que la réponse soit exacte, à ce que le ton soit amical et à ce qu'elle ait l'air utile.

####
{{document}}
####

<quotes>
- Chain-of-thought (CoT) prompting[27]
- Generated knowledge prompting[37]
- Least-to-most prompting[38]
- Self-consistency decoding[39]
- Complexity-based prompting[41]
- Self-refine[42]
- Tree-of-thought prompting[43]
- Maieutic prompting[45]
- Directional-stimulus prompting[46]
- Textual inversion and embeddings[59]
- Using gradient descent to search for prompts[61][62][63][64]
- Prompt injection[65][66][67]
</quotes>
```

Sortie de la deuxième prompt :

```
Les techniques de prompting mentionnées dans ce document incluent : 

1. Chain-of-thought (CoT) prompting[27]
2. Generated knowledge prompting[37]
3. Least-to-most prompting[38]
4. Self-consistency decoding[39]
5. Complexity-based prompting[41]
6. Self-refine[42]
7. Tree-of-thought prompting[43]
8. Maieutic prompting[45]
9. Directional-stimulus prompting[46]
10. Textual inversion and embeddings[59]
11. Using gradient descent to search for prompts[61][62][63][64]
12. Prompt injection[65][66][67]

Chacune de ces techniques utilise des stratégies uniques pour améliorer ou spécifier les interactions avec les grands modèles de langage afin de produire les résultats souhaités.
```

Comme vous pouvez le constater, la simplification et la création de chaînes de prompts est une approche utile lorsque les réponses doivent subir plusieurs opérations ou transformations. À titre d'exercice, vous pouvez concevoir une prompt qui supprime des citations (par exemple, [27]) de la réponse avant de l'envoyer comme réponse finale à l'utilisateur.

Vous pouvez également trouver d'autres exemples d'enchaînement d'invites dans cette [documentation] (https://docs.anthropic.com/claude/docs/prompt-chaining) qui exploite le LLM Claude. Notre exemple est inspiré et adapté de leurs exemples.
