
L'une des applications les plus puissantes de LLMS est la création de chatbots sophistiqués de questions (Q&A), capables de fournir des réponses précises basées sur des informations de source spécifiques. Ce projet se concentre sur le développement d'un assistant virtuel pour la bibliothèque Deal.II, une bibliothèque d'éléments finis C ++ open source, en utilisant une technique connue sous le nom de génération (RAG) (RAG). L'ensemble de données provient de 90 étapes de didacticiel disponibles dans la documentation officielle. II, accessible ici. Le moteur du modèle grand langage (LLM) est fourni par Cohere qui est connu pour fournir des modèles LLM de haute qualité pour les intérêts et les services de chat. Pour la base de données vectorielle, nous avons choisi le chroma en raison de sa nature open source, de sa vitesse et de son efficacité dans la recherche et la récupération des vecteurs. Le cadre de Langchain est utilisé pour gérer efficacement l'interaction entre l'entrée de l'utilisateur, le traitement des requêtes et la récupération des informations pertinentes à partir de la base de données vectorielle, assurant une intégration transparente entre les différentes composantes du modèle.
Le processus de préparation de la base de données est le suivant: Premièrement, les pages du didacticiel sont extraites du site Web en tant qu'objets de document Langchain. Pour améliorer la vitesse d'accès (pendant le temps de test), ces objets de document sont enregistrés sous forme de fichiers JSON sur le disque local. Ensuite, les documents sont divisés en morceaux de taille appropriée (environ 400 jetons par morceau avec un chevauchement de 40 jetons). Au total, l'ensemble de données comprend 2,3 millions de jetons. Enfin, ces documents divisés sont intégrés dans la base de données vectorielle.
Le modèle est construit à l'aide de quatre chaînes et trois modèles rapides.
Reformuler la chaîne : cette chaîne reçoit la question de l'utilisateur et l'historique des conversations, puis reformula la question basée sur le dialogue précédent. Par exemple, si la première question est "Qu'est-ce que Fe_nothing?" Et la deuxième question est "où puis-je l'utiliser?", La chaîne de reformulation modifiera la deuxième question pour "où puis-je utiliser Fe_nothing?" Cette étape ajoute essentiellement de la mémoire à la conversation, assurant la continuité du contexte.
Chaîne multi-questions : cette chaîne prend la question reformulée et génère cinq questions similaires, offrant de multiples perspectives. Il publie une liste Python de questions à l'aide d'une fonction Lambda simple, et toutes les lignes vides sont supprimées à l'aide de la fonction remove_empty_string comme étape finale.
Chaîne de récupération : cette chaîne prend les cinq questions de la chaîne précédente et interroge la base de données vectorielle. La base de données vectorielle recherche des vecteurs similaires et récupère des documents pertinents. Étant donné que le même document peut être récupéré plusieurs fois pour différentes questions, un ensemble unique de documents est créé à l'aide de la fonction get_unique_union comme dernière étape.
Chaîne de chiffon : cette chaîne utilise la question, l'historique des conversations et les documents récupérés de la chaîne précédente comme contexte pour générer la réponse finale.
L'extrémité avant de l'application est construite à l'aide ChatInterface de Gradio, avec la fonction de réponse conçue pour diffuser la sortie en temps réel. L'application est déployée dans les espaces de face étreintes et est accessible ici.