Comment créer son propre ChatBot personnalisé, basé sur notre personnalité
Ce guide va vous indiquer comment créer un chatbot qui agira comme vous ou comme la personne que vous souhaitez, en trois étapes simples. Le tout grâce à LangChain et Replit.
Mise en place
Clonez ce repo (merci à Conner1115), ou cliquez sur le bouton ci-dessous pour commencer.
Créer une clé API
Vous allez avoir besoin d'un compte OpenAI pour commencer, allez sur leur site pour en créer un.
Une fois votre compte créer, aller dans "Acount API Keys", ou cliquez simplement sur notre lien en dessous. Cliquez ensuite sur "Create new secret key" et copier votre clé.
Créez une nouvelle clé API et affectez-la à la variable d'environnement OPENAI_API_KEY
. Cliquez sur "Secrets" pour y accéder.
Vous pourrez ensuite l'ajouter comme ceci :
Personnaliser le prompt de base
Le prompt de base est le contrôle principal de la façon dont votre chatbot se comportera. Vous pouvez l'éditer dans lib/basePrompt.js
.
Vous pouvez par exemple utiliser ce modèle qui donne une grande précision et de bons résultats.
Vous êtes <personnage>, <brève description>
<style de parole, règles de base>
Utilisez les éléments suivants de MemoryContext pour répondre à l'humain. ConversationHistory est une liste d'éléments de conversation, qui correspond à la conversation que vous avez avec l'humain.
ConversationHistory : {history}
MemoryContext : {context}
Humain : {prompt}
<personnage> :
Variables du modèle de prompt
Remarquez les variables dans le prompt de base {history}, {context}, etc. Le module PromptTemplate de Langchain nous permet de fournir des entrées personnalisées et de formater un prompt à partir d'une chaîne de texte. Dans lib/generateResponse.js, nous utilisons le prompt de base et spécifions les variables d'entrée pour elle.
const prompt = new PromptTemplate({
template: promptTemplate,
inputVariables: ["history", "context", "prompt"]
});
Les variables de prompt peuvent porter n'importe quel nom (de préférence alphanumérique). Essayez de préciser la fonction de chacune d'entre elles dans le prompt de base et donnez-leur un nom pertinent pour faciliter leur compréhension par votre LLM.
Ajouter vos données
A l'exception du promp de base, toutes les données que vous transmettrez à votre chatbot passeront par le répertoire d'entrainement. Pour l'instant, seuls les fichiers markdown .md
seront utilisés pour l'entrainement. Si vous souhaitez utiliser un format de fichier différent, tel que .txt
, assurez-vous de le spécifier dans le script/initializeStore.js.
Après avoir spécifié votre format de fichier, commencez à télécharger ou à créer des fichiers et des dossiers dans le répertoire. Les noms de dossiers et la profondeur n'ont pas d'importance puisque tous les fichiers du format souhaité seront parcourus par itération.
Créer un "Vector Store"
Exécutez script/initializeStore.js
avec la commande yarn train
ou npm train
dans la fenêtre "Shell". Le script d'initialisation parcourra et lira tous les fichiers du format désiré dans le dossier training
. Ensuite, la méthode HNSWLib.fromTexts de Langchain remplira le dossier training
.
Lancez votre chatbot
Utilisez la commande node index.js
dans la fenêtre Shell.
Votre chatbot devrait fonctionner maintenant ! Vous pouvez lui poser des questions dans la fenêtre Shell
et il vous répondra tant que vous avez du crédit sur votre API OpenAI. Une fois votre crédit épuisé il faudra en racheter ou attendre qu'il se renouvelle.
Qu'est-ce qu'un Vector Store / Registre Vectoriel ?
Un registre de vecteurs est une structure de données utilisée pour représenter et stocker de grandes collections de vecteurs à haute dimension. Les vecteurs sont des objets mathématiques qui ont à la fois une magnitude et une direction. En informatique, ils sont souvent utilisés pour représenter les caractéristiques ou les attributs des points de données.
Un registre de vecteurs est généralement constitué à partir d'un vaste corpus de textes ou d'autres types de données et en extrayant les caractéristiques de chaque point de données. Ces caractéristiques sont ensuite représentées sous forme de vecteurs à haute dimension, où chaque dimension correspond à une caractéristique particulière.
Utilisation du registre vectoriel
Chaque fois qu'une réponse est générée, une recherche de similarité est effectuée dans le fichier vectorStore/hnswlib.index
. Voici à quoi ressemble le processus lorsqu'une réponse est générée (voir lib/generateResponse.js) :
- (lors de la première exécution) Nous initialisons notre OpenAI LLM, PromptTemplate, LLMChain, et chargeons notre registre vectoriel à partir du répertoire
vectorStore
. - Une recherche de similarité est effectuée dans le magasin de vecteurs pour trouver tous les documents pertinents concernant le prompt.
- Les documents pertinents, le prompt et (optionnellement) l'historique de la conversation sont transmis à Langchain pour prédire et générer une réponse.
FAQ
Puis-je utiliser d'autres formats de fichiers tels que .pdf et .html ?
Théoriquement, vous pouvez, mais essayez d'utiliser des fichiers utf-8. Si vous passez un fichier non utf-8 comme un PDF, votre chatbot vous parlera en non-utf-8 ou sera tout simplement inutile.
S'agit-il ici de former/affiner le modèle d'IA, ou simplement d'ajouter des documents pour le contexte ?
Les données que vous transmettez à votre chatbot seront compilées dans un fichier vectoriel unique et seront utilisées comme contexte lors de la génération des réponses. Aucun processus d'affinage ou de formation n'a lieu.
Est-ce que GPT peut directement extraire du texte d'un site ? Quel est l'avantage d'utiliser LangChain plutôt que de référencer directement les URL de documentation ?
Les LLM de l'OpenAI n'ont pas d'accès à Internet et ne peuvent pas fournir d'informations telles que la date et l'heure actuelles. L'ensemble des résultats obtenus par le GPT est entièrement basé sur des connaissances antérieures.
Quel est l'avantage de créer le répertoire vectorStore plutôt que d'exécuter le script d'initialisation du magasin ?
Il faut beaucoup de temps et de puissance de traitement pour générer le magasin de vecteurs. Le stocker dans un répertoire met moins de stress sur le système pour le charger et le mettre en cache.
Pourquoi ma clé API OpenAI ne fonctionne-t-elle pas dans Replit ?
Exécutez kill 1
dans le shell de Replit pour forcer un redémarrage. Vérifiez également que vous utilisez Node.js 18.
En conclusion, c'est tout ce qu'il faut pour créer un chatbot personnalisé.
Source : Conner1115