1. De l'approche individuelle à la chaîne automatisée: L'utilité des LLMChain
Lorsque vous débutez avec LangChain, le concept peut sembler complexe. Après tout, n'est-ce pas simplement une question d'appeler une API de modèle de langage ? Pourquoi ne pas écrire une fonction qui envoie la question de l'utilisateur à GPT et récupère le résultat ? Pourquoi introduire une notion aussi complexe que "chaîne" (Chain) ?
C'est exactement ce que je pensais au début, jusqu'à rencontrer des problèmes dans un projet concret. J'avais besoin de traiter un lot de retours utilisateurs, en extrayant d'abord des mots-clés avec un grand modèle, puis en classant ces mots-clés, et enfin en générant un rapport résumé. J'ai écrit trois fonctions distinctes, chacune appelant une API trois fois. Le résultat ? Un code lourd et difficile à maintenir, avec une gestion des erreurs compliquée. Le plus frustrant était que lorsque je voulais changer le modèle pour l'extraction de mots-clés de GPT-3.5 à GPT-4, j'avais à modifier trois endroits différents. L'expérience ressemblait à conduire une voiture manuelle : embrayage, vitesses, accélérateur, tout devait être géré manuellement, épuisant et inefficace.
C'est là que la valeur des LLMChain devient évidente. Vous pouvez les considérer comme une "ligne de production standardisée" ou une "cuisine de plats préparés". Elles combinent trois éléments fondamentaux - modèle de prompt (PromptTemplate), modèle de langage (LLM) et parseur de sortie (Output Parser) - en une seule unité. Vous n'avez plus à vous soucier de "comment construire le prompt", "comment appeler le modèle" ou "comment analyser la réponse JSON". Il vous suffit de fournir les données d'entrée à cette ligne de production, et elle produria le résultat final selon la recette préétablie (modèle) et les outils appropriés (modèle).
Par exemple, sans LLMChain, votre code pourrait ressembler à ceci :
# Pseudo-code, traitement manuel de tout
def traitement_manuel(nom_fleur):
prompt = f"Quel est le langage des fleurs pour {nom_fleur} ?" # Construction manuelle du prompt
reponse_brute = appeler_api_openai(prompt) # Appel API manuel
resultat = reponse_brute['choices'][0]['message']['content'] # Analyse manuelle de la réponse
return resultat
Avec LLMChain, le code devient beaucoup plus élégant :
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
# Définition de la ligne de production
prompt = PromptTemplate.from_template("Quel est le langage des fleurs pour {fleur} ?")
llm = ChatOpenAI(model="gpt-3.5-turbo")
chaîne = LLMChain(llm=llm, prompt=prompt)
# Utilisation de la ligne de production
résultat = chaîne.run("rose")
Comme vous pouvez le voir, la logique principale est abstraite et encapsulée. La LLMChain non seulement rend le code plus concis, mais elle offre également quatre méthodes d'appel différentes (run, predict, apply, generate) pour répondre à divers scénarios de production. C'est comme si votre cuisine disposait non seulement d'une poêle (cuisson unique), mais aussi d'un four à vapeur (traitement par lots) et d'une fonction de programmation (asynchrone). Choisir le bon outil double l'efficacité. Explorons maintenant ces quatre méthodes en détail pour comprendre dans quelles situations elles sont les plus pertinentes.
2. La méthode run: Votre "couteau suisse", simple et direct
La méthode run est la plus courante et la plus intuitive dans LLMChain, que j'appelle volontiers le "couteau suisse" - polyvalent, simple à utiliser et adapté à la plupart des cas d'utliisation rapides et des requêtes uniques. Sa philosophie est : donnez-moi une entrée, je vous renvoie un résultat textuel, le reste n'est pas de votre ressort.
Son utilisation est extrêmement simple. Pour les modèles d'entrée à variable unique, vous pouvez simplement transmettre une chaîne de caractères :
# Supposons que notre modèle de chaîne soit : "Quel est le langage des fleurs pour {fleur} ?"
résultat = chaîne.run("tournesol")
print(résultat)
# La sortie pourrait être : Le tournesol symbolise l'amour silencieux, la loyauté, la lumière du soleil...
Si votre modèle de prompt nécessite plusieurs variables, la méthode run accepte égaelment les paramètres sous forme de mots-clés :
# Supposons que le modèle soit : "Quels sont les points de soin pour {plante} pendant la saison {saison} ?"
résultat = chaîne.run(plante="cactus", saison="hiver")
print(résultat)
# La sortie pourrait être : Pendant l'hiver, les cactus nécessitent un arrosage réduit et une protection contre le gel...
Le principal caractéristique de la méthode run est qu'elle renvoie une simple chaîne de caractères Python (str). Elle gère pour vous l'ensemble du processus, de l'appel du modèle à l'analyse de la sortie.