
4 techniques pour optimiser vos invites LLM en termes de coût, de latence et de performances
d’automatiser un nombre important de tâches. Depuis la sortie de ChatGPT en 2022, nous avons vu de plus en plus de produits d’IA sur le marché utiliser les LLM. Cependant, de nombreuses améliorations doivent encore être apportées à la manière dont nous utilisons les LLM. Améliorer votre invite avec un outil d’amélioration d’invite LLM et utiliser des jetons mis en cache sont, par exemple, deux techniques simples que vous pouvez utiliser pour améliorer considérablement les performances de votre application LLM.
Dans cet article, je discuterai de plusieurs techniques spécifiques que vous pouvez appliquer à la façon dont vous créez et structurez vos invites, ce qui réduira la latence et les coûts, et augmentera également la qualité de vos réponses. L’objectif est de vous présenter ces techniques spécifiques, afin que vous puissiez immédiatement les mettre en œuvre dans votre propre application LLM.

Pourquoi devriez-vous optimiser votre invite
Dans de nombreux cas, vous pouvez avoir une invite qui fonctionne avec un LLM donné et donne des résultats adéquats. Cependant, dans de nombreux cas, vous n’avez pas consacré beaucoup de temps à optimiser l’invite, ce qui laisse beaucoup de potentiel sur la table.
Je soutiens qu’en utilisant les techniques spécifiques que je présenterai dans cet article, vous pouvez facilement à la fois améliorer la qualité de vos réponses et réduire les coûts sans trop d’effort. Ce n’est pas parce qu’une invite et un LLM fonctionnent de manière optimale et, dans de nombreux cas, vous pouvez constater de grandes améliorations avec très peu d’effort.
Techniques spécifiques pour optimiser
Dans cette section, je couvrirai les techniques spécifiques que vous pouvez utiliser pour optimiser vos invites.
Gardez toujours le contenu statique tôt
La première technique que j’aborderai consiste à toujours conserver le contenu statique au début de votre invite. Par contenu statique, je fais référence à un contenu qui reste le même lorsque vous effectuez plusieurs appels API.
La raison pour laquelle vous devez conserver le contenu statique dès le début est que tous les grands fournisseurs LLM, tels qu’Anthropic, Google et OpenAI, utilisent des jetons mis en cache. Les jetons mis en cache sont des jetons qui ont déjà été traités dans une requête API précédente et qui peuvent être traités rapidement et à moindre coût. Cela varie d’un fournisseur à l’autre, mais le prix des jetons d’entrée mis en cache est généralement d’environ 10 % du prix des jetons d’entrée normaux.
Les jetons mis en cache sont des jetons qui ont déjà été traités dans une requête API précédente et qui peuvent être traités moins cher et plus rapide que les jetons normaux
Cela signifie que si vous envoyez la même invite deux fois de suite, les jetons d’entrée de la deuxième invite ne coûteront que 1/10ème des jetons d’entrée de la première invite. Cela fonctionne parce que les fournisseurs LLM mettent en cache le traitement de ces jetons d’entrée, ce qui rend le traitement de votre nouvelle demande moins cher et plus rapide.
En pratique, la mise en cache des jetons d’entrée se fait en conservant les variables à la fin de l’invite.
Par exemple, si vous avez une longue invite système avec une question qui varie d’une requête à l’autre, vous devez procéder comme suit :
prompt = f"""
{long static system prompt}
{user prompt}
"""
Par exemple:
prompt = f"""
You are a document expert ...
You should always reply in this format ...
If a user asks about ... you should answer ...
{user question}
"""
Ici, nous avons d’abord le contenu statique de l’invite, avant de mettre le contenu variable (la question de l’utilisateur) en dernier.
Dans certains scénarios, vous souhaitez alimenter le contenu du document. Si vous traitez de nombreux documents différents, vous devez conserver le contenu du document à la fin de l’invite :
# if processing different documents
prompt = f"""
{static system prompt}
{variable prompt instruction 1}
{document content}
{variable prompt instruction 2}
{user question}
"""
Supposons toutefois que vous traitiez plusieurs fois les mêmes documents. Dans ce cas, vous pouvez vous assurer que les jetons du document sont également mis en cache en vous assurant qu’aucune variable n’est insérée au préalable dans l’invite :
# if processing the same documents multiple times
prompt = f"""
{static system prompt}
{document content} # keep this before any variable instructions
{variable prompt instruction 1}
{variable prompt instruction 2}
{user question}
"""
Notez que les jetons mis en cache ne sont généralement activés que si les 1 024 premiers jetons sont identiques dans deux requêtes. Par exemple, si votre invite système statique dans l’exemple ci-dessus est inférieure à 1 024 jetons, vous n’utiliserez aucun jeton mis en cache.
# do NOT do this
prompt = f"""
{variable content} < --- this removes all usage of cached tokens
{static system prompt}
{document content}
{variable prompt instruction 1}
{variable prompt instruction 2}
{user question}
"""
Vos invites doivent toujours être créées avec le contenu le plus statique en premier (le contenu variant le moins d’une requête à l’autre), le contenu le plus dynamique (le contenu variant le plus d’une requête à l’autre)
- Si vous avez une longue invite système et utilisateur sans aucune variable, vous devez d’abord la conserver et ajouter les variables à la fin de l’invite.
- Si vous récupérez du texte à partir de documents, par exemple, et traitez le même document deux fois, vous devez
Cela peut être le contenu du document, ou si vous avez une longue invite -> utiliser la mise en cache
Question à la fin
Une autre technique que vous devez utiliser pour améliorer les performances de LLM consiste à toujours placer la question de l’utilisateur à la fin de votre invite. Idéalement, vous l’organisez de manière à ce que votre invite système contienne toutes les instructions générales, et l’invite utilisateur se compose simplement uniquement de la question de l’utilisateur, comme ci-dessous :
system_prompt = "<general instructions>"
user_prompt = f"{user_question}"
Dans les documents d’ingénierie d’invite d’Anthropic, l’état qui inclut l’invite utilisateur à la fin peut améliorer les performances jusqu’à 30 %, surtout si vous utilisez des contextes longs. L’inclusion de la question à la fin permet au modèle de comprendre plus clairement la tâche qu’il essaie d’accomplir et conduira, dans de nombreux cas, à de meilleurs résultats.
Utiliser un optimiseur d’invite
Souvent, lorsque des humains écrivent des invites, celles-ci deviennent désordonnées, incohérentes, incluent du contenu redondant et manquent de structure. Ainsi, vous devez toujours alimenter votre invite via un optimiseur d’invite.
L’optimiseur d’invite le plus simple que vous puissiez utiliser consiste à inviter un LLM à améliorer cette invite {invite}, et il vous fournira une invite plus structurée, avec moins de contenu redondant, etc.
Une approche encore meilleure, cependant, consiste à utiliser un optimiseur d’invite spécifique, tel que celui que vous pouvez trouver dans les consoles OpenAI ou Anthropic. Ces optimiseurs sont des LLM spécifiquement invités et créés pour optimiser vos invites, et produiront généralement de meilleurs résultats. De plus, vous devez vous assurer d’inclure :
- Détails sur la tâche que vous essayez d’accomplir
- Exemples de tâches auxquelles l’invite a réussi, ainsi que d’entrée et de sortie
- Exemple de tâches pour lesquelles l’invite a échoué, avec l’entrée et la sortie
Fournir ces informations supplémentaires donnera généralement de bien meilleurs résultats et vous obtiendrez une bien meilleure invite. Dans de nombreux cas, vous ne passerez qu’environ 10 à 15 minutes et vous obtiendrez une invite bien plus performante. Cela fait de l’utilisation d’un optimiseur d’invite l’une des approches les moins exigeantes pour améliorer les performances LLM.
LLM de référence
Le LLM que vous utilisez aura également un impact significatif sur les performances de votre application LLM. Différents LLM sont efficaces dans différentes tâches, vous devez donc essayer les différents LLM dans votre domaine d’application spécifique. Je recommande au moins de configurer l’accès aux plus grands fournisseurs de LLM comme Google Gemini, OpenAI et Anthropic. Cette configuration est assez simple et changer de fournisseur LLM ne prend que quelques minutes si vous avez déjà configuré vos informations d’identification. De plus, vous pouvez également envisager de tester des LLM open source, même s’ils nécessitent généralement plus d’efforts.
Vous devez maintenant établir un référentiel spécifique pour la tâche que vous essayez d’accomplir et voir quel LLM fonctionne le mieux. De plus, vous devez vérifier régulièrement les performances des modèles, car les grands fournisseurs de LLM mettent occasionnellement à jour leurs modèles, sans nécessairement proposer une nouvelle version. Bien entendu, vous devez également être prêt à essayer tous les nouveaux modèles proposés par les grands fournisseurs de LLM.
Conclusion
Dans cet article, j’ai couvert quatre techniques différentes que vous pouvez utiliser pour améliorer les performances de votre application LLM. J’ai discuté de l’utilisation de jetons mis en cache, de la question à la fin de l’invite, de l’utilisation d’optimiseurs d’invite et de la création de benchmarks LLM spécifiques. Tout cela est relativement simple à configurer et à réaliser et peut conduire à une augmentation significative des performances. Je crois qu’il existe de nombreuses techniques similaires et simples, et vous devriez toujours essayer d’être à leur recherche. Ces sujets sont généralement décrits dans différents articles de blog, où Anthropic est l’un des blogs qui m’a le plus aidé à améliorer les performances du LLM.
👉 Retrouvez-moi sur les réseaux sociaux :
📩 Abonnez-vous à ma newsletter
✍️ Moyen
Vous pouvez également lire certains de mes autres articles :



