Lancez votre installation locale de RAG : Guide du débutant pour l'utilisation de Llama 3 LangChain avec Ollama et Milvus
Avec l'essor des LLM open-source tels que Llama 3, Mistral, Gemma et d'autres, il est devenu évident que les grands modèles de langage (LLM) peuvent également être utiles, même lorsqu'ils sont exécutés localement. Cette approche n'est pas seulement pratique, elle devient également essentielle, car les coûts peuvent monter en flèche lors de l'utilisation de LLM commerciaux tels que GPT-3 ou GPT-4.
Dans ce guide pratique, nous verrons comment déployer une [Retrieval Augmented Generation (RAG)] (https://zilliz.com/learn/Retrieval-Augmented-Generation) pour créer un chatbot de questions-réponses (Q&A) qui peut répondre à des questions sur des informations spécifiques. Cette configuration utilisera également Ollama et Llama 3, alimentés par Milvus, comme magasin de vecteurs. Une implémentation typique implique la mise en place d'un pipeline de génération de texte pour Llama 3.
Les différents outils permettant de construire cette configuration de génération augmentée de recherche (rag) sont les suivants :
[Ollama] (https://ollama.com/) : Ollama est un outil open-source qui permet de gérer Llama 3 sur des machines locales. Il apporte la puissance des LLM à votre ordinateur portable, simplifiant ainsi les opérations locales.
LangChain](https://github.com/langchain-ai/langchain) : LangChain est un cadre qui simplifie le développement d'applications basées sur les LLM. C'est ce que nous utilisons pour créer un agent et interagir avec nos données.
est la base de données vectorielle que nous utilisons pour stocker et récupérer vos données pertinentes de manière efficace.
Llama 3 est un modèle de langage à code source ouvert développé par Meta et est la dernière itération d'une gamme de LLM. Il fournit un format d'invite complexe pour les interactions avec l'utilisateur et prend en charge plusieurs rôles d'utilisateur, notamment "système", "utilisateur" et "assistant".
Q&R avec RAG
Nous construirons un chatbot sophistiqué de questions-réponses (Q&R) en utilisant RAG (Retrieval Augmented Generation). Cela nous permettra de répondre à des questions sur des informations spécifiques.
Qu'est-ce que la génération augmentée par récupération ?
RAG, ou Retrieval Augmented Generation, est une technique qui améliore les LLM en intégrant des sources de données supplémentaires. Une application typique de la RAG implique :
Indexation - un pipeline pour ingérer des données à partir d'une source et les indexer, qui consiste généralement à charger, diviser et stocker les données dans Milvus. Les données stockées dans Milvus sont la représentation des données sous la forme de [vector embeddings] (https://zilliz.com/glossary/vector-embeddings). Les embeddings capturent l'essence du contenu, ce qui permet d'obtenir des résultats de recherche plus pertinents que les recherches par mot-clé.
- Les systèmes de génération augmentée améliorent la qualité des réponses en extrayant le contexte pertinent d'une base de données vectorielle et en le transmettant à un LLM avant de générer des réponses. Lorsque le contexte lui est fourni, le LLM évite de générer des hallucinations. Plus précisément, au moment de l'exécution, RAG traite la requête de l'utilisateur, récupère les données pertinentes de l'index stocké dans Milvus et le LLM génère une réponse sur la base de ce contexte enrichi.
Ce guide est conçu pour être pratique et vous montrer comment les LLM locaux peuvent être utilisés pour mettre en place une application RAG. Il n'est pas réservé aux experts : même les débutants peuvent s'y plonger et commencer à créer leur propre chatbot de questions-réponses. C'est parti !
Prérequis
Avant de commencer à mettre en place les différents composants de notre tutoriel, assurez-vous que votre système dispose des éléments suivants :
- Docker & Docker-Compose - Assurez-vous que Docker et Docker-Compose sont installés sur votre système. Milvus Standalone - Pour nos besoins, nous utiliserons Milvus Standalone, qui est facile à gérer via Docker Compose ; vérifiez comment l'installer dans notre [documentation] (https://milvus.io/docs/install_standalone-docker-compose.md). Ollama - Installez Ollama sur votre système ; visitez leur site web pour le dernier guide d'installation.
##Langchain Setup
Une fois que vous avez installé tous les prérequis, vous êtes prêt à configurer votre application RAG :
- Démarrez une instance Milvus Standalone avec :
docker-compose up -d. - Cette commande démarre votre instance Milvus en mode détaché, s'exécutant tranquillement en arrière-plan.
- Récupérer un modèle LLM via :
ollama pull <nom_du_modèle>- Voir la liste des modèles disponibles via leur bibliothèque
- par exemple
ollama pull llama3
- Cette commande télécharge la version par défaut (généralement la plus récente et la plus petite) du modèle.
- Pour dialoguer directement avec un modèle depuis la ligne de commande, utilisez
ollama run <nom du modèle>
Installer les dépendances pour le magasin de vecteurs
Pour exécuter cette application, vous devez installer les bibliothèques Python. Vous pouvez soit utiliser Poetry si vous utilisez directement le code sur Github, soit les installer avec pip si vous préférez.
pip install langchain pymilvus ollama pypdf langchainhub langchain-community langchain-experimental
RAG Application for llm powered applications
Comme nous l'avons dit plus haut, l'indexation des données est l'une des principales composantes de RAG.
- Commencez par ingérer les données de votre PDF en utilisant PyPDFLoader.
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader(
"https://d18rn0p25nwr6d.cloudfront.net/CIK-0001813756/975b3e9b-268e-4798-a9e4-2a9a7c92dc10.pdf"
)
data = loader.load()
- Diviser les données
Décomposer les données chargées en morceaux gérables à l'aide de la fonction RecursiveCharacterTextSplitter
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)
- Obtenir les Embeddings et stocker les données dans Milvus
Ensuite, nous convertissons les données textuelles en embeddings vectoriels à l'aide de [Jina AI's Small English embeddings] (https://huggingface.co/jinaai/jina-embeddings-v2-small-en), et nous les stockons dans Milvus.
from langchain_community.embeddings.jina import JinaEmbeddings
from langchain.vectorstores.milvus import Milvus
embeddings = JinaEmbeddings(
jina_api_key=JINA_AI_API_KEY, model_name="jina-embeddings-v2-small-en"
)
vector_store = Milvus.from_documents(documents=all_splits, embedding=embeddings)
- Chargez votre LLM
Ollama facilite le chargement et l'utilisation d'un LLM localement. Dans notre exemple, nous utiliserons Llama 3 by Meta, voici comment le charger :
from langchain_community.llms import Ollama
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
llm = Ollama(
model="llama3",
callback_manager=CallbackManager(
[StreamingStdOutCallbackHandler()]
),
stop=["<|eot_id|>"],
)
- Construisez votre chaîne d'assurance qualité avec Langchain
Enfin, construisez votre chaîne d'assurance qualité pour traiter et répondre aux requêtes des utilisateurs :
from langchain import hub
from langchain.chains import RetrievalQA
query = input("\nQuery : ")
prompt = hub.pull("rlm/rag-prompt")
qa_chain = RetrievalQA.from_chain_type(
llm, retriever=vectorstore.as_retriever(), chain_type_kwargs={"prompt" : prompt}
)
result = qa_chain({"query" : query})
print(result)
Exécutez votre application
Exécutez votre application RAG par la dernière cellule contenant la variable résultat.
Exécutez votre application RAG en lançant :
python rag_ollama.py
Exemple d'une interaction d'assurance qualité :
Requête : De quoi parle ce document ?
Le document semble être un fichier de données interactif de 104 pages de couverture pour un dépôt auprès de la SEC. Il contient des informations sur les états financiers et les certifications de l'entreprise.{'query' : 'What is this document about?', 'result' : "Le document semble être un fichier de données interactif de 104 pages de couverture pour un dépôt auprès de la SEC. Il contient des informations sur les états financiers et les certifications de l'entreprise."}
Et voilà ! Vous venez de mettre en place un LLM local sophistiqué en utilisant Ollama avec Llama 3, Langchain et Milvus. Cette configuration permet non seulement de traiter efficacement de grands ensembles de données, mais aussi de mettre en place un système local de réponse aux questions très réactif.
N'hésitez pas à consulter Milvus, le code sur Github, et à partager vos expériences avec la communauté en rejoignant notre Discord.
Récapitulatif du contexte récupéré
Ce guide a fourni une marche à suivre pour mettre en place une application Retrieval Augmented Generation (RAG) en utilisant des grands modèles de langage (LLM) locaux. En utilisant des outils comme Ollama, Llama 3, LangChain, et Milvus, nous avons démontré comment créer un puissant chatbot de questions-réponses (Q&R) capable de traiter des requêtes d'informations spécifiques avec un contexte récupéré à partir d'un magasin de vecteurs.
Les principaux enseignements sont les suivants :
RAG Overview : RAG améliore les capacités de LLM en intégrant des sources de données externes. Il s'agit d'indexer les données dans des encastrements vectoriels à l'aide de Milvus et de récupérer le contexte pertinent pendant le traitement des requêtes afin de générer des réponses précises et informées.
Les points forts de l'outillage :
Ollama simplifie la gestion et l'exécution locale des modèles Llama 3.
LangChain fournit un cadre intuitif pour le développement d'applications basées sur LLM.
Milvus, en tant que magasin de vecteurs, stocke et récupère efficacement les [données vectorisées] (https://zilliz.com/learn/an-ultimate-guide-to-vectorizing-structured-data), ce qui permet un traitement précis des requêtes.
Llama 3, développé par Meta, prend en charge des fonctionnalités avancées telles que les interactions multirôles et les messages-guides personnalisables.
Le processus d'installation comprend des étapes essentielles :
Prérequis : Installer Docker, Milvus Standalone, Ollama et les bibliothèques Python requises.
Indexation des données : Utiliser des outils comme PyPDFLoader et RecursiveCharacterTextSplitter pour charger, diviser et vectoriser les données.
Stockage de l'intégration : Convertir le [texte en embeddings] (https://zilliz.com/ai-models/text-embedding-3-small) avec le modèle d'IA Jina et les stocker dans le magasin de vecteurs Milvus.
Construction d'une chaîne d'assurance qualité : Intégration du magasin de vecteurs avec Llama 3 via LangChain, configuration d'une invite de système personnalisée pour traiter et répondre aux requêtes des utilisateurs.
En exécutant l'application, les utilisateurs peuvent interagir avec leur chatbot local pour obtenir des réponses précises et contextuelles à partir d'ensembles de données spécifiques. Une fois les documents pertinents récupérés, ils sont transmis au LLM pour la génération de réponses, une méthode dont l'efficacité a été prouvée. Le guide met l'accent sur l'aspect pratique, garantissant l'accessibilité aux débutants comme aux experts. Gardez à l'esprit que pour une récupération optimale, les paramètres peuvent devoir être ajustés en fonction des spécificités de l'application.
Avec la proéminence croissante des LLM open-source, cette configuration souligne comment les implémentations localisées réduisent les coûts, améliorent la sécurité et offrent des solutions évolutives pour la [recherche d'information] (https://zilliz.com/learn/what-is-information-retrieval) et la génération. Explorez le dépôt GitHub et rejoignez notre communauté Discord pour partager votre expérience et vos idées !
Continuer à lire

The Great AI Agent Protocol Race: Function Calling vs. MCP vs. A2A
Compare Function Calling, MCP, and A2A protocols for AI agents. Learn which standard best fits your development needs and future-proof your applications.

Building RAG Pipelines for Real-Time Data with Cloudera and Milvus
explore how Cloudera can be integrated with Milvus to effectively implement some of the key functionalities of RAG pipelines.

Vector Databases vs. Hierarchical Databases
Use a vector database for AI-powered similarity search; use a hierarchical database for organizing data in parent-child relationships with efficient top-down access patterns.
