Construire une application RAG locale avec Ollama+LlamaIndex

bref

Ce document explique comment utiliser le cadre LlamaIndex pour créer une application locale RAG (Retrieval-Augmented Generation). En intégrant LlamaIndex, il est possible de construire une application RAG locale. RAG qui combine les capacités de recherche et de génération afin d'améliorer l'efficacité de la recherche d'informations et la pertinence du contenu généré. Les chemins de la base de connaissances locale peuvent être personnalisés, indexés via LlamaIndex et ensuite utilisés pour le dialogue contextuel.

Note : Ce document contient des extraits de code et des explications détaillées. Le code complet est disponible à l'adresse suivante carnet de notes .

 

1. téléchargements de modèles

Cet exemple utilise le llama3.1 vous pouvez utiliser le modèle approprié en fonction de la configuration de votre ordinateur.

ollama pull llama3.1
ollama pull nomic-embed-text

 

2. installation des dépendances

pip install llama-index-llms-ollama
pip install llama-index-embeddings-ollama
pip install -U llama-index-readers-file

 

3. le chargement des données

Charge en mémoire tous les documents du dossier de données du répertoire actuel.

documents = SimpleDirectoryReader("data").load_data()

 

4. la construction d'index

Settings.embed_model = OllamaEmbedding(model_name="nomic-embed-text")
Settings.llm = Ollama(model="llama3.1", request_timeout=360.0)
index = VectorStoreIndex.from_documents(
documents,
)
  • Settings.embed_model : Globale embed_model attribut. Le code de l'exemple attribue le modèle incorporé créé à l'attribut global embed_model Attributs ;
  • Settings.llm : Globale llm attribut. Le code de l'exemple attribue le modèle de langue créé à l'attribut global llm Attributs ;
  • VectorStoreIndex.from_documents: Construit un index à partir des documents précédemment chargés et les convertit en vecteurs pour une récupération rapide.

faire passer (un projet de loi, une inspection, etc.) Settings Les attributs globaux sont définis de manière à ce que le modèle correspondant soit utilisé par défaut dans la construction ultérieure de l'index ainsi que dans le processus d'interrogation.

 

5. les données d'interrogation

query_engine = index.as_query_engine()
response = query_engine.query("Datawhale是什么?")
print(response)
  • index.as_query_engine()Création d'un moteur d'interrogation basé sur l'index précédemment construit. Ce moteur de requête peut recevoir des requêtes et renvoyer les réponses extraites.

 

6) Récupération du contexte pour le dialogue

Étant donné que les contextes récupérés peuvent occuper un grand nombre de contextes LLM disponibles, il est nécessaire de configurer l'historique du chat avec un plus petit nombre de contextes LLM. jeton Limites !

# 检索上下文进行对话
from llama_index.core.memory import ChatMemoryBuffer
memory = ChatMemoryBuffer.from_defaults(token_limit=1500)
chat_engine = index.as_chat_engine(
chat_mode="context",
memory=memory,
system_prompt=(
"You are a chatbot, able to have normal interactions."
),
)
response = chat_engine.chat("Datawhale是什么?")
print(response)

chat_mode Vous pouvez sélectionner le mode approprié en fonction du scénario d'utilisation, et les modes pris en charge sont les suivants :

  • best(par défaut) : Utiliser un proxy (react ou openai) avec des outils de moteur de requête ;
  • context: Utilisez le Retriever pour obtenir le contexte ;
  • condense_question: Condensez la question ;
  • condense_plus_contextLa question est condensée et l'on fait appel à un récupérateur pour en connaître le contexte ;
  • simple: Moteur de chat simple qui utilise directement LLM ;
  • reactUtiliser l'agent de réaction avec l'outil de moteur de recherche ;
  • openaiUtilisation de l'agent openai avec l'outil de moteur de requêtes : utiliser l'agent openai avec l'outil de moteur de requêtes.

 

7) Stockage et chargement des index vectoriels

  • storage_context.persist Stocker les index vectoriels.
  • load_index_from_storage Index du vecteur de charge.
# 存储向量索引
persist_dir = 'data/'
index.storage_context.persist(persist_dir=persist_dir)
# 加载向量索引
from llama_index.core import StorageContext, load_index_from_storage
storage_context = StorageContext.from_defaults(persist_dir=persist_dir)
index= load_index_from_storage(storage_context)

 

8. applications de la lumière du jour

Cet exemple met également en œuvre une application de type "streamlit", qui peut être trouvée dans la section app.py

Les dépendances requises sont énumérées ci-dessous :

llama_index==0.10.62
streamlit==1.36.0

Note

existent app.py Afin de ne pas recharger le modèle dans les dialogues successifs, vous pouvez configurer la variable d'environnement OLLAMA_NUM_PARALLEL répondre en chantant OLLAMA_MAX_LOADED_MODELSLa première consiste à prendre en charge le chargement de plusieurs modèles, ce qui nécessite au moins 8 Go de RAM supplémentaires.

OLLAMA_NUM_PARALLELLe traitement de plusieurs demandes pour un même modèle en même temps.

OLLAMA_MAX_LOADED_MODELSChargement simultané de plusieurs modèles : Chargement simultané de plusieurs modèles.

Exemples

  1. questions et réponses en texte unique (Q&R)
使用 Ollama+LlamaIndex 搭建本地 RAG 应用
  1. séance de questions-réponses sur des textes multiples
使用 Ollama+LlamaIndex 搭建本地 RAG 应用

 

Références :Documentation de LlamaIndex

© déclaration de droits d'auteur

Articles connexes

Pas de commentaires

Vous devez être connecté pour participer aux commentaires !
S'inscrire maintenant
aucun
Pas de commentaires...