Ce tutoriel vous guidera dans la création d'un chatbot de support client personnalisé en utilisant l'API OpenAI GPT-3.5 et le framework open-source LlamaIndex. L'objectif est de permettre au chatbot de répondre aux questions en utilisant des données spécifiques à votre entreprise, ce que le modèle GPT de base ne connaît pas.
Configuration du Projet
Commencez par créer un répertoire pour votre projet et un environnement virtuel Python :
mkdir chatbot-support
cd chatbot-support
python3 -m venv venv
source venv/bin/activate
Votre terminal devrait maintenant afficher (venv) au début de la ligne.
Installation des Dépendances
Installez LlamaIndex. La bibliothèque openai n'est pas requise séparément car LlamaIndex l'inclut pour les appels à l'API.
pip install llama-index
Créez ensuite les fichiers Python principaux pour votre application :
touch main.py chatbot.py
Mise en Place de la Base de Connaissances
Créez un dossier data et un fichier company_info.txt à l'intérieur pour stocker les informations de votre entreprise. Voici un exemple pour une entreprise fictive, "Innovatech Solutions" :
mkdir data
cd data
touch company_info.txt
Collez le contenu suivant dans data/company_info.txt :
Innovatech Solutions est une entreprise technologique de premier plan fondée en 2010. Nous nous spécialisons dans le cloud computing, l'analyse de données et l'apprentissage automatique. Notre siège social est situé à Paris, France, avec des bureaux régionaux à Lyon et à Marseille. Notre mission est de fournir des solutions innovantes qui aident les entreprises à optimiser leurs opérations.
Nos principaux produits incluent "CloudStream", une solution de stockage cloud robuste, et "DataSight", une plateforme d'analyse de données avancée. CloudStream offre une migration de données transparente, une sécurité de haut niveau et une interface utilisateur intuitive. DataSight permet aux entreprises de transformer leurs données brutes en informations exploitables grâce à des algorithmes sophistiqués.
Concernant nos tarifs, nous proposons plusieurs plans adaptés à différents besoins. Le forfait de base pour CloudStream commence à 15€ par mois. Des plans premium avec plus de stockage et de fonctionnalités sont disponibles. Pour les solutions d'entreprise, veuillez contacter notre équipe commerciale pour une tarification personnalisée.
Notre support client est disponible 24h/24 et 7j/7 via chat en direct, email et téléphone. La plupart des problèmes sont résolus dans les 24 heures. Nous disposons également d'une section FAQ détaillée sur notre site web et d'un forum communautaire.
La sécurité et la conformité sont primordiales chez Innovatech Solutions. Tous nos produits sont conformes au RGPD et respectent les normes de sécurité les plus strictes, incluant le chiffrement de bout en bout et l'authentification multifacteur.
La gestion de compte se fait facilement via notre portail en ligne, permettant aux clients de mettre à jour leur service, de consulter l'historique de facturation et de gérer les utilisateurs de leur organisation. Notre équipe de gestion de compte est disponible en semaine de 9h à 18h.
Nous offrons une garantie de remboursement de 30 jours pour tous nos produits. Passé ce délai, vous pouvez annuler votre service à tout moment, un remboursement au prorata sera calculé selon la durée restante de votre abonnement.
Retournez au répertoire racine de votre projet (chatbot-support). Configurez votre clé API OpenAI en tant que variable d'environnement :
export OPENAI_API_KEY="votre-clé-api-ici"
Implémentation du Chatbot avec LlamaIndex
LlamaIndex prend en charge le découpage des documents en morceaux gérables et leur indexation pour que GPT-3.5 puisse les utiliser efficacement. Cela est crucial en raison des limites de contexte des modèles LLM.
Collez le code suivant dans chatbot.py :
from llama_index import VectorStoreIndex, SimpleDirectoryReader, ServiceContext
# Configure le contexte du service, par exemple la taille des chunks
service_context = ServiceContext.from_defaults(chunk_size=1000)
# Charge les documents depuis le répertoire 'data'
documents = SimpleDirectoryReader('data').load_data()
# Crée un index vectoriel à partir des documents chargés
index = VectorStoreIndex.from_documents(documents, service_context=service_context)
# Crée un moteur de requête à partir de l'index
query_engine = index.as_query_engine()
def ask_bot(user_question):
"""
Pose une question au chatbot et retourne la réponse.
"""
response = query_engine.query(user_question)
return response.response
Ajoutez ensuite le code suivant dans main.py pour l'interface utilisateur interactive :
from chatbot import ask_bot
print("Chatbot de support prêt ! Posez vos questions (tapez 'quitter' pour arrêter).")
while True:
user_input = input("Vous: ")
if user_input.lower() == 'quitter':
break
bot_response = ask_bot(user_input)
print("Bot:", bot_response)
Lancez votre chatbot :
python3 main.py
Note : Vous pouvez remplacer data/company_info.txt par vos propres fichiers de connaissances.
Optimisation des Performances
La qualité des réponses peut être améliorée en ajustant certains paramètres.
Ajustement de la Taille des Morceaux (Chunk Size)
La manière dont le texte est divisé en morceaux affecte la pertinence des informations récupérées. Modifiez le fichier chatbot.py pour ajuster la taille des morceaux :
from llama_index import VectorStoreIndex, SimpleDirectoryReader, ServiceContext
# Augmente la taille des chunks pour des informations potentiellement plus détaillées par morceau
service_context = ServiceContext.from_defaults(chunk_size=1500)
documents = SimpleDirectoryReader('data').load_data()
index = VectorStoreIndex.from_documents(documents, service_context=service_context)
query_engine = index.as_query_engine()
def ask_bot(user_question):
response = query_engine.query(user_question)
return response.response
Expérimentez avec différentes valeurs pour chunk_size.
Contrôle du Nombre de Morceaux Récupérés
Vous pouvez spécifier combien de morceaux de texte pertinents doivent être utilisés pour générer la réponse. Modifiez chatbot.py :
from llama_index import VectorStoreIndex, SimpleDirectoryReader, ServiceContext
service_context = ServiceContext.from_defaults(chunk_size=1000)
documents = SimpleDirectoryReader('data').load_data()
index = VectorStoreIndex.from_documents(documents)
# Spécifie de récupérer les 5 morceaux les plus similaires
query_engine = index.as_query_engine(similarity_top_k=5)
def ask_bot(user_question):
response = query_engine.query(user_question)
return response.response
Le paramètre similarity_top_k contrôle le nombre de documents passés à GPT-3.5.
Évaluation du Chatbot
Pour évaluer systématiquement la performance de votre chatbot, surtout après des ajustements de paramètres, l'automatisation est recommandée. Des outils comme DeepEval peuvent simplifier ce processus.
Installation de DeepEval
pip install deepeval
Créez un fichier de test, par exemple test_chatbot.py :
import pytest
from chatbot import ask_bot
from deepeval.metrics import FactualConsistencyMetric
from deepeval.test_case import LLMTestCase
from deepeval import assert_test
def test_chatbot_accuracy():
hallucination_metric = FactualConsistencyMetric(minimum_score=0.7)
# Exemple de cas de test
test_case = LLMTestCase(
input="Quels services propose votre entreprise ?",
actual_output=ask_bot("Quels services propose votre entreprise ?"),
context=[
"Innovatech Solutions se spécialise dans le cloud computing, l'analyse de données et l'apprentissage automatique. Nos principaux produits incluent 'CloudStream', une solution de stockage cloud, et 'DataSight', une plateforme d'analyse de données."
]
)
assert_test(test_case, [hallucination_metric])
# Vous pouvez ajouter d'autres cas de test ici pour couvrir différents aspects
# def test_pricing_query():
# ...
Exécutez les tests :
deepeval test run test_chatbot.py
Ce script évalue la cohérence factuelle des réponses du chatbot par rapport au contexte fourni. Le score est compris entre 0 et 1, et le test réussit si le score est supérieur ou égal à minimum_score.
Principes Sous-jacents : RAG
Le chatbot que nous avons construit repose sur l'architecture de Génération Augmentée par Récupération (Retrieval Augmented Generation - RAG). Cette approche combine la puissance de génération de GPT-3.5 avec la capacité de récupérer des informations pertinentes à partir de sources de données externes (votre fichier company_info.txt dans ce cas). Lorsque vous posez une question :
- LlamaIndex recherche les morceaux de texte les plus pertinents dans votre base de connaissances.
- GPT-3.5 utilise ces morceaux récupérés, en plus de ses connaissances générales, pour générer une réponse informée et spécifique.
L'ajustement de la taille des morceaux et du nombre de morceaux récupérés permet de contrôler la quantité et la qualité des informations fournies à GPT-3.5, influençant ainsi la pertinence et la précision des réponses.
Conclusion
Vous avez appris à construire un chatbot personnalisé en utilisant GPT-3.5 et LlamaIndex, à optimiser ses performances et à automatiser son évaluation. Cette approceh RAG est idéale pour créer des systèmes conversationnels dans des domaines variés comme le service client, l'assistance utilisateur ou le support commercial.