Récupération augmentation génération
La création d’une chaîne de Récupération-Augmentation-Génération (RAG) dans LangChain implique deux principales composantes :
- Récupération des données : Utiliser un récupérateur (retriever) pour rechercher des informations pertinentes dans une base de données (ex. vecteurs).
- Génération augmentée : Utiliser un modèle LLM pour générer une réponse augmentée par les données récupérées.
Voici une implémentation en TypeScript.
1. Préparation
Assurez-vous d’avoir les dépendances nécessaires :
npm install langchain openai pinecone dotenv
Créez un fichier .env
pour les clés d’API :
OPENAI_API_KEY=your_openai_api_keyPINECONE_API_KEY=your_pinecone_api_keyPINECONE_ENVIRONMENT=your_pinecone_environmentPINECONE_INDEX_NAME=your_index_name
2. Exemple complet
import { OpenAI } from "langchain/llms/openai";import { PineconeClient } from "@pinecone-database/pinecone";import { VectorStoreRetriever } from "langchain/vectorstores";import { OpenAIEmbeddings } from "langchain/embeddings/openai";import { RetrievalAugmentedGenerationChain } from "langchain/chains";
// Fonction principaleasync function main() { // 1. Initialiser le modèle OpenAI const llm = new OpenAI({ openAIApiKey: process.env.OPENAI_API_KEY, temperature: 0.7, // Ajuste la créativité });
// 2. Configurer Pinecone pour la récupération const pinecone = new PineconeClient(); await pinecone.init({ apiKey: process.env.PINECONE_API_KEY, environment: process.env.PINECONE_ENVIRONMENT, });
const index = pinecone.Index(process.env.PINECONE_INDEX_NAME!);
const retriever = new VectorStoreRetriever({ vectorStore: index, embedding: new OpenAIEmbeddings({ openAIApiKey: process.env.OPENAI_API_KEY, }), topK: 3, // Récupérer les 3 résultats les plus proches });
// 3. Construire la chaîne RAG const ragChain = new RetrievalAugmentedGenerationChain({ llm, retriever, promptTemplate: ` Voici quelques informations récupérées : {retrievedData}. Basé sur cela, répondez à la question suivante : {question}. `, });
// 4. Fournir une question pour tester la chaîne const question = "Quels sont les avantages de l'utilisation de LangChain ?"; const result = await ragChain.call({ question });
// 5. Afficher la réponse console.log("Réponse générée :", result.text);}
main().catch((error) => { console.error("Erreur :", error);});
3. Explications
-
LLM avec OpenAI :
- Utilise un modèle comme
text-davinci-003
ougpt-4
pour la génération de texte.
- Utilise un modèle comme
-
Base de données Pinecone :
- Sert à stocker et récupérer des vecteurs. Vous pouvez créer des vecteurs à partir de vos données (par exemple, des documents texte).
-
Récupérateur (Retriever) :
- Fournit un mécanisme pour rechercher les vecteurs les plus proches en fonction de l’entrée utilisateur (question).
-
Chaîne RAG :
- Combine les informations récupérées avec un modèle LLM pour générer des réponses enrichies.
-
Prompt template :
- Structure les entrées pour le modèle afin de guider la génération.
4. Données pour Pinecone
Indexer des données dans Pinecone
Ajoutez des documents avant de les interroger.
import { OpenAIEmbeddings } from "langchain/embeddings/openai";import { PineconeClient } from "@pinecone-database/pinecone";
async function indexDocuments(documents: string[]) { const pinecone = new PineconeClient(); await pinecone.init({ apiKey: process.env.PINECONE_API_KEY, environment: process.env.PINECONE_ENVIRONMENT, });
const index = pinecone.Index(process.env.PINECONE_INDEX_NAME!);
const embeddings = new OpenAIEmbeddings({ openAIApiKey: process.env.OPENAI_API_KEY, });
const vectors = await Promise.all( documents.map(async (doc, i) => ({ id: `doc-${i}`, values: await embeddings.embed(doc), metadata: { content: doc }, })) );
await index.upsert({ vectors, });
console.log("Documents indexés !");}
// Appel avec des documents exemplesindexDocuments([ "LangChain est une bibliothèque pour construire des applications pilotées par des modèles de langage.", "Elle fournit des outils pour orchestrer des chaînes complexes.", "LangChain facilite la récupération d'informations et l'intégration avec des bases vectorielles.",]);
5. Résultat attendu
Entrée
Quels sont les avantages de l'utilisation de LangChain ?
Sortie générée
LangChain est utile pour construire des applications pilotées par des modèles de langage. Il fournit des outils pour orchestrer des chaînes et simplifie la récupération d'informations à partir de bases vectorielles comme Pinecone.
Étapes suivantes
- Ajouter des outils : Comme un moteur de recherche ou une base de connaissances.
- Personnaliser les prompts : Pour un meilleur contrôle des réponses générées.
- Gérer des données structurées : Comme des tableaux ou des graphiques.