paint-brush
Créons un chatbot de support client en utilisant RAG et la documentation de votre entreprise dans OpenWebUIpar@hostkey
1,648 lectures
1,648 lectures

Créons un chatbot de support client en utilisant RAG et la documentation de votre entreprise dans OpenWebUI

par Hostkey.com8m2024/07/09
Read on Terminal Reader

Trop long; Pour lire

OpenWebUI offre une opportunité unique de créer des chatbots fascinants et utiles même sans une vaste expérience en codage. Dans cet article, nous partagerons notre parcours en créant un chatbot de support technique conçu pour aider notre équipe de première ligne en répondant aux questions des utilisateurs. Voici un résumé étape par étape de ses actions.
featured image - Créons un chatbot de support client en utilisant RAG et la documentation de votre entreprise dans OpenWebUI
Hostkey.com HackerNoon profile picture
0-item

OpenWebUI est une plate-forme multimédia complète comprenant une suite d'outils d'IA : OpenAI, Ollama, Automatic1111, ComfyUI, Whisper API, formation de modèles personnalisés, RAG basé sur Langchain avec ChromaDB, recherche hybride BM25/Web, et plus encore.


Bien que tout cela soit disponible depuis un certain temps, documenté et implémentable avec des connaissances en programmation Python, OpenWebUI offre une opportunité unique de créer des chatbots fascinants et utiles même sans une vaste expérience en codage.


Dans cet article, nous partagerons notre parcours de création d'un chatbot de support technique conçu pour aider notre équipe de première ligne en répondant aux questions des utilisateurs (et en devenant éventuellement une partie de notre équipe elle-même).


Louez des serveurs GPU avec déploiement instantané ou un serveur avec une configuration personnalisée avec des cartes NVIDIA Tesla A100/H100 80 Go ou A5000/A4000 de qualité professionnelle. Des serveurs GPU avec des cartes de jeu RTX4090 sont également disponibles.


Point de départ

Nous avons une documentation utilisateur créée à l'aide de Material for MkDocs. Il en résulte une structure de répertoires contenant des fichiers .md au format Markdown. Nous avons également déployé une configuration OpenWebUI et Ollama avec le modèle llama3-8b-instruct chargé.


Objectifs du projet :


  1. Développer un chatbot personnalisé : Ce chatbot interagira avec les utilisateurs et fournira des informations basées sur notre documentation.
  2. Convertir la documentation dans un format adapté aux LLM : nous devons transformer notre documentation Markdown dans un format qui peut être traité efficacement par les LLM pour la génération augmentée de récupération (RAG).
  3. Activer les mises à jour et les ajouts de données : le système doit permettre des mises à jour et des ajouts continus à la base de données vectorielles contenant notre documentation.
  4. Concentrez-vous sur la réponse aux questions : le chatbot doit principalement fonctionner comme un système de questions-réponses et éviter de s'engager dans des conversations non liées à l'informatique.
  5. Fournissez des liens sources : dans la mesure du possible, le chatbot doit créer un lien vers les sources de documentation originales pour les informations fournies.
  6. Implémenter le filtrage des questions : nous devons pouvoir configurer des restrictions de questions pour le chatbot. Par exemple, nous pourrions vouloir l'empêcher de répondre à des questions basées sur la situation géographique.

Implémentation naïve

Notre tentative initiale consistait simplement à charger notre documentation existante dans son format Markdown d'origine et à utiliser le modèle llama3 sans aucune modification. Les résultats, c’est le moins qu’on puisse dire, ont été décevants :


Premièrement : nos fichiers Markdown contiennent divers éléments tels que des balises d'image, des notes de bas de page, des blocs de code, un formatage gras et italique, des liens internes et externes, des icônes et même des constructions " ** " pour les boutons. Tout ce « bruit » supplémentaire crée des problèmes lors de la division de la documentation en morceaux à traiter.


Deuxièmement : le modèle phrase-transformers/all-MiniLM-L6-v2, qu'OpenWebUI utilise par défaut pour représenter des phrases et des paragraphes dans un espace vectoriel à 384 dimensions (essentiel pour les tâches RAG telles que le clustering et la recherche sémantique), est principalement formé en anglais. . Nous aimerions que notre bot prenne également en charge d'autres langues.


Troisièmement : bien que llama3 soit un modèle d'instruction, il peut toujours être orienté vers des discussions hors sujet plutôt que de se concentrer sur la réponse aux requêtes des utilisateurs. Un modèle 70b pourrait être plus approprié, mais il nécessite un GPU avec 40 Go de mémoire vidéo, alors que llama3-8b peut fonctionner sur un GPU avec seulement 8 Go.

Alors que le troisième problème pourrait potentiellement être résolu en créant un modèle personnalisé (agent dans la terminologie OpenAI), les deux premiers nécessitent des solutions de contournement plus importantes. Voici ce que nous avons trouvé jusqu'à présent.

Étape par étape : configuration du chatbot du support technique dans OpenWebUI

Tout d'abord, nous allons convertir la documentation dans un format adapté au chargement dans notre système RAG (Retrieval Augmented Generation). Nous avons créé un puissant script bash appelé ai_text_generator pour automatiser ce processus.


Le script parcourt tous les répertoires de documentation et utilise des expressions régulières dans sed, awk et perl pour supprimer et remplacer le balisage Markdown qui n'est pas nécessaire à RAG. Enfin, il ajoute un lien vers la documentation originale hébergée sur https://hostkey.com/documentation à la fin de chaque document.



Ce script prépare méticuleusement votre documentation à utiliser avec un système RAG dans OpenWebUI. Voici un résumé étape par étape de ses actions :


  • Génération d'URL : il génère une URL complète pour chaque fichier de documentation.
  • Suppression du balisage d’image : supprime tous les balisages Markdown liés aux images.
  • Suppression d'annotations : supprime toutes les annotations du texte. Formatage des boutons : transforme la syntaxe ** et ** de Markdown en [ ], les formatant efficacement sous forme de boutons.
  • Suppression de titre : supprime les lignes commençant par ">", qui sont probablement utilisées pour créer un plan ou une table des matières.
  • Suppression d'icônes : supprime tout balisage ou code Markdown qui représente des icônes.
  • Formatage du texte en gras : supprime le formatage du texte en gras de Markdown.
  • Modification de lien : supprime les liens internes tout en préservant les liens externes.
  • Formatage des liens de courrier électronique : reformate les liens vers des adresses e-mail.
  • Normalisation des espaces : supprime les espaces supplémentaires au début de chaque ligne jusqu'au premier caractère.
  • Conversion de fin de ligne : convertit les CRLF (fins de ligne Windows) au format UNIX (LF).
  • Réduction des lignes vides : élimine les lignes vides consécutives dépassant une.
  • Ajout d'URL : ajoute l'URL générée à la fin de chaque fichier traité.


Après avoir exécuté le script, le répertoire ai_data contiendra un ensemble de fichiers prêts à être chargés dans le système RAG d'OpenWebUI.



Ensuite, nous devons ajouter un nouveau modèle à OpenWebUI pour travailler avec notre base de données de vecteurs de documents et Ollama LLM. Ce modèle devrait prendre en charge un ton plus décontracté, « vous » (ты), pas seulement en anglais. Nous prévoyons d'ajouter la prise en charge d'autres langues comme le turc à l'avenir.


  1. Pour commencer, nous allons aller dans le panneau d'administration - Paramètres - Documents . Dans le champ Embedding Model , nous sélectionnerons phrase-transformers/all-MiniLM-L12-v2 . Nous avons testé tous les modèles recommandés de cette liste (https://www.sbert.net/docs/sentence_transformer/pretrained_models.html) et avons trouvé que celui-ci était le mieux adapté.

  2. Nous cliquons sur l'icône de téléchargement à côté du champ Modèle d'intégration pour le télécharger et l'installer.

  3. Tout de suite, nous allons configurer les paramètres RAG :

    • Top K = 10 : Cela signifie que le système prendra en compte les 10 documents les plus pertinents lors de la génération d'une réponse.

    • Taille du bloc = 1 024 : les documents seront divisés en blocs de 1 024 jetons pour traitement.

    • Chunk Overlap = 100 : il y aura un chevauchement de 100 tokens entre les fragments consécutifs.



Après cela, vous pouvez vous diriger vers la section Espace de travail - Documents et télécharger notre documentation. C'est une bonne idée de lui attribuer une balise de collection spécifique (dans notre cas, hostkey_en) pour faciliter la connexion ultérieure au modèle ou aux requêtes API.



Ensuite, nous allons créer un modèle personnalisé pour notre chatbot. Pour ce faire, nous allons revenir à Workspace - Models et cliquer sur l'icône plus.


Nous donnerons un nom à notre chatbot et sélectionnerons le modèle de base (dans notre cas, lama3-latest).


Ensuite, nous définirons l'invite système. C’est ce qui indique au chatbot comment se voir et se comporter. Il décrit son rôle, ses limites et les résultats souhaités.


Voici l'invite système que nous avons conçue pour notre chatbot d'assistance technique :


You are HOSTKEY an IT Support Assistant Bot, focused on providing users with IT support based on the content from knowledge base. Stay in character and maintain your focus on IT support, avoiding unrelated activities such as creative writing or engaging in non-IT discussions.


If you cannot find relevant information in the knowledge base or if the user asks non-related questions that are not part of the knowledge base, do not attempt to answer and inform the user that you are unable to assist and print text "Visit https://hostkey.com/documentation for more information" at the end.


Provide short step-by-step instructions and external links


Provide a link to relevant doc page about user question started with 'See more information here:'Add text "Visit https://hostkey.com/documentation for more information" at the end.


Example of answer: " User: How can I cancel my server?


Bot:


You can cancel your server at any time. To do this, you need to access the Invapi control panel and follow these steps:

- Go to the "Billing" tab in the specific server management menu.

- Click the [Cancel service] button.

- Describe the reason for the cancellation and select its type.

- Click the [Confirm termination] button.


Please note that for immediate cancellation, we will not refund the hours of actual server usage, including the time to provision the server itself, order software, and process the cancellation request (up to 12 hours). The unused balance will be returned to your credit balance. Withdrawal of funds from the credit balance will be made in accordance with our refund policy.


You can cancel the service cancellation request in the Billing tab using the [Revoke] button.

Additionally, if you need to cancel a service that includes an OS/software license or has a customized/non-standard configuration, please contact us via a ticketing system for manual refund processing.


See more information here: https://hostkey.com/documentation/billing/services_cancellation/ "


Ensuite, nous connecterons la collection de documents nécessaire. Dans la section Connaissances , nous cliquerons sur le bouton Sélectionner les documents et choisirons la collection dont nous avons besoin en fonction de sa balise.


Louez des serveurs GPU avec déploiement instantané ou un serveur avec une configuration personnalisée avec des cartes NVIDIA Tesla A100/H100 80 Go ou A5000/A4000 de qualité professionnelle. Des serveurs GPU avec des cartes de jeu RTX4090 sont également disponibles.



Nous devons également configurer certains paramètres supplémentaires cachés sous l'onglet Advanced Params . Cliquer sur Afficher révélera ces paramètres. Nous définirons la température sur 0,3 et la longueur du contexte sur 4089.



Enfin, nous cliquons sur Enregistrer et mettre à jour pour créer notre modèle de chatbot de support technique personnalisé.


Et voila! Notre chatbot est prêt à travailler et à traiter les demandes des utilisateurs. C'est poli, patient et disponible 24h/24 et 7j/7.

Conseils pour travailler avec RAG dans OpenWebUI

Voici quelques conseils importants à garder à l’esprit :

  1. Si vous travaillez avec un grand nombre de documents en RAG, il est fortement recommandé d'installer OpenWebUI avec le support GPU (branche open-webui:cuda).
  2. Toute modification du modèle d'intégration (commutation, chargement, etc.) vous obligera à réindexer vos documents dans la base de données vectorielles. La modification des paramètres RAG ne nécessite pas cela.
  3. Lorsque vous ajoutez ou supprimez des documents, accédez toujours à votre modèle personnalisé, supprimez la collection de ces documents et ajoutez-les à nouveau. Sinon, votre recherche risque de ne pas fonctionner correctement ou sera nettement moins efficace. Si votre bot fournit des réponses incorrectes mais que la documentation contenant les informations nécessaires apparaît dans la liste en bas, c'est probablement le problème.
  4. Bien qu'OpenWebUI reconnaisse différents formats de création de RAG (pdf, csv, rst, xml, md, epub, doc, docx, xls, xlsx, ppt, ppt, txt), il est recommandé de télécharger des documents sous forme de texte brut pour des performances optimales.
  5. Même si la recherche hybride peut améliorer les résultats, elle est gourmande en ressources et peut augmenter considérablement les temps de réponse (20 à 30 à 40 secondes ou plus), même sur un GPU puissant. Il s'agit d'un problème connu et les développeurs travaillent sur une solution.



Maintenant que nous avons testé le chatbot, la prochaine étape consiste à l'intégrer au système de chat existant de notre entreprise. OpenWebUI propose une API et peut fonctionner comme un proxy pour Ollama, ajoutant ses propres fonctionnalités uniques. Cependant, la documentation fait toujours défaut, ce qui rend l'intégration un peu difficile.


En examinant le code et l'historique des validations, nous avons glané quelques informations sur la façon de structurer les requêtes API, mais cela ne fonctionne pas encore comme prévu. Nous avons réussi à appeler le modèle personnalisé, mais sans la fonctionnalité RAG.

Nous attendons avec impatience les fonctionnalités promises par les développeurs dans les prochaines versions, notamment RAG, la recherche sur le Web et des exemples et descriptions détaillés.


Le processus de test a également révélé des incohérences et des redondances dans notre documentation. Cela représente une opportunité à la fois d’améliorer les performances du chatbot et d’améliorer la clarté et l’exactitude globales de notre documentation.


Louez des serveurs GPU avec déploiement instantané ou un serveur avec une configuration personnalisée avec des cartes NVIDIA Tesla A100/H100 80 Go ou A5000/A4000 de qualité professionnelle. Des serveurs GPU avec des cartes de jeu RTX4090 sont également disponibles.