For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/ai-machine-learning/ai-endpoints-rag-chatbot-langchain.md.

AI Endpoints - Développer un chatbot de discussion RAG avec LangChain

Voir en Markdown

Apprenez à construire un chatbot RAG (Retrieval Augmented Generation) en utilisant Python et LangChain

Info

AI Endpoints est couvert par les Conditions particulières OVHcloud Public Cloud (voir l’Annexe 10 – « Conditions spécifiques – AI Endpoints »).

Introduction

Dans ce tutoriel, nous allons vous montrer comment construire un chatbot Retrieval Augmented Generation (RAG) qui améliore les réponses en intégrant vos propres documents personnalisés dans le contexte du LLM.

Pour cela, nous allons utiliser LangChain, un puissant framework open source qui simplifie l’utilisation des LLM aussi bien en Python qu’en JavaScript. Combiné à AI Endpoints d’OVHcloud, qui propose à la fois des modèles LLM et des modèles d’embedding, il devient facile de créer des assistants avancés et prêts pour la production.

Définition

Retrieval Augmented Generation (RAG) : plutôt que de se reposer uniquement sur les connaissances intégrées d’un modèle, le RAG injecte vos données dans le prompt pour améliorer la pertinence des réponses.

Voici comment cela fonctionne :

  • Vos documents sont convertis en vecteurs à l’aide d’un modèle d’embedding.
  • Lorsque l’utilisateur pose une question, celle-ci est également transformée en vecteur.
  • Une recherche de similarité est effectuée pour trouver les fragments de données les plus pertinents.
  • Ces fragments sont fournis au LLM en tant que contexte, ce qui permet d’obtenir des réponses précises et étayées.

LangChain gère toutes ces étapes au sein d’un seul pipeline pratique.

En pratique

Configurer l’environnement

Afin d’utiliser facilement les API d’AI Endpoints, créez un fichier .env pour stocker les variables d’environnement :

OVH_AI_ENDPOINTS_MODEL_NAME=Mistral-7B-Instruct-v0.3
OVH_AI_ENDPOINTS_URL=https://oai.endpoints.kepler.ai.cloud.ovh.net/v1
OVH_AI_ENDPOINTS_EMBEDDING_MODEL_NAME=bge-m3
OVH_AI_ENDPOINTS_ACCESS_TOKEN=<ai-endpoints-api-token>

Veillez à remplacer la valeur du token (OVH_AI_ENDPOINTS_ACCESS_TOKEN) par la vôtre. Si vous n’en possédez pas encore, suivez les instructions du guide AI Endpoints - Premiers pas.

Ensuite, créez un fichier requirements.txt avec les librairies suivantes :

langchain
langchain-mistralai
langchain_community
langchain_chroma
argparse
unstructured
langchainhub
python-dotenv

Puis, lancez l’installation de ces dépendances :

pip install -r requirements.txt

Importer les librairies et variables nécessaires

Une fois ceci fait, vous pouvez créer un fichier Python nommé chat-bot-streaming-rag.py, dans lequel vous importerez d’abord les librairies Python comme suit :

from dotenv import load_dotenv
import argparse
import time
import os

from langchain_classic import hub

from langchain_mistralai import ChatMistralAI

from langchain_chroma import Chroma

from langchain_community.document_loaders import DirectoryLoader
from langchain_community.embeddings.ovhcloud import OVHCloudEmbeddings

from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough

from langchain_text_splitters import RecursiveCharacterTextSplitter

Après ces lignes, chargez et accédez aux variables d’environnement de votre fichier .env :

# access the environment variables from the .env file
load_dotenv()

## Récupérer les configurations OVHcloud AI Endpoints
_OVH_AI_ENDPOINTS_ACCESS_TOKEN = os.environ.get('OVH_AI_ENDPOINTS_ACCESS_TOKEN') 
_OVH_AI_ENDPOINTS_MODEL_NAME = os.environ.get('OVH_AI_ENDPOINTS_MODEL_NAME') 
_OVH_AI_ENDPOINTS_URL = os.environ.get('OVH_AI_ENDPOINTS_URL') 
_OVH_AI_ENDPOINTS_EMBEDDING_MODEL_NAME = os.environ.get('OVH_AI_ENDPOINTS_EMBEDDING_MODEL_NAME')

Ajoutez ensuite le code Python principal :

# Function in charge to call the LLM model.
# Question parameter is the user's question.
# The function print the LLM answer.
def chat_completion(new_message: str):
  # no need to use a token
  model = ChatMistralAI(model=_OVH_AI_ENDPOINTS_MODEL_NAME, 
                        api_key=_OVH_AI_ENDPOINTS_ACCESS_TOKEN,
                        endpoint=_OVH_AI_ENDPOINTS_URL, 
                        max_tokens=1500, 
                        streaming=True)

  # Load documents from a local directory
  loader = DirectoryLoader(
     glob="**/*",
     path="./rag-files/",
     show_progress=True
  )
  docs = loader.load()

  # Split documents into chunks and vectorize them
  text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
  splits = text_splitter.split_documents(docs)
  vectorstore = Chroma.from_documents(documents=splits, embedding=OVHCloudEmbeddings(model_name=_OVH_AI_ENDPOINTS_EMBEDDING_MODEL_NAME, access_token=_OVH_AI_ENDPOINTS_ACCESS_TOKEN))

  prompt = hub.pull("rlm/rag-prompt")

  rag_chain = (
    {"context": vectorstore.as_retriever(), "question": RunnablePassthrough()}
    | prompt
    | model
  )

  print("🤖: ")
  for r in rag_chain.stream({"question", new_message}):
    print(r.content, end="", flush=True)
    time.sleep(0.150)

# Main entrypoint
def main():
  # User input
  parser = argparse.ArgumentParser()
  parser.add_argument('--question', type=str, default="What is the meaning of life?")
  args = parser.parse_args()
  chat_completion(args.question)

if __name__ == '__main__':
    main()

Préparer votre base de connaissances

Créez un dossier nommé rag-files et placez-y vos documents .txt, .md ou d’autres documents textuels. Ils seront convertis en embeddings et utilisés lors de la recherche.

Vous pouvez trouver des exemples de fichiers dans notre dépôt GitHub public-cloud-examples.

Exécuter le chatbot RAG

Exécutez la commande suivante :

python3 chat-bot-streaming-rag.py --question "What is AI Endpoints?"

En comparaison avec un chatbot sans RAG, vous constaterez des réponses bien plus précises et informées lorsque des documents sont injectés dans le contexte.

En effet, voici une comparaison sans utiliser le RAG :

chatbot sans RAG

et en utilisant le RAG :

chatbot avec RAG

Conclusion

Vous avez maintenant créé un chatbot Retrieval-Augmented Generation (RAG) utilisant vos propres documents et la plateforme AI Endpoints d’OVHcloud. L’intégration de LangChain avec Chroma et les modèles d’embedding rend la mise en œuvre du RAG simple, et même prête pour la production.

Aller plus loin

Si vous souhaitez aller plus loin et déployer votre chatbot dans le cloud, en rendant votre interface accessible à tous, consultez les articles et tutoriels suivants :

Pour une formation ou une assistance technique sur la mise en œuvre de nos solutions, contactez votre commercial ou consultez la page Professional Services pour obtenir un devis et faire analyser votre projet par nos experts.

Votre avis nous intéresse !

N’hésitez pas à nous faire part de vos questions, retours et suggestions concernant AI Endpoints et ses fonctionnalités :

  • Dans le canal #ai-endpoints du serveur Discord OVHcloud, où vous pouvez échanger avec la communauté et les équipes OVHcloud.
Cette page vous a-t-elle aidé ?