Local GenAI Search est votre moteur de recherche génératif local basé sur le modèle Llama3 qui peut fonctionner localement sur un ordinateur portable ou un ordinateur de 32 Go (développé avec MacBookPro M2 avec 32 Go de RAM).
L'objectif principal du projet est de permettre aux utilisateurs de poser des questions sur le contenu de leurs fichiers locaux, auxquelles il répond de manière concise en référençant les documents pertinents qui peuvent ensuite être ouverts.
Le moteur utilise les intégrations MS MARCO pour la recherche sémantique, les principaux documents étant transmis au modèle Llama 3.
Par défaut, cela fonctionnerait avec l'API NVIDIA et utiliserait le modèle Llama 3 avec paramètre 70B. Cependant, si vous avez utilisé tous vos crédits API NVIDIA ou si vous ne souhaitez pas utiliser l'API pour rechercher vos documents locaux, elle peut également s'exécuter localement, en utilisant le modèle de paramètres 8B.
Afin d'exécuter votre recherche générative locale par IA (à condition que vous disposiez de suffisamment de machines à chaînes pour exécuter Llama3), vous devez télécharger le référentiel :
git clone https://github.com/nikolamilosevic86/local-gen-search.git
Vous devrez installer toutes les exigences :
pip install -r requirements.txt
Vous devez créer un fichier appelé environment_var.py
et y placer votre clé API HuggingFace. Le fichier devrait ressembler à ceci :
import os
hf_token = "hf_you_api_key"
nvidia_key = "nvapi-your_nvidia_nim_api_key"
La clé API pour HuggingFace peut être récupérée sur https://huggingface.co/settings/tokens
. Afin d'exécuter le composant génératif, vous devez demander l'accès au modèle Llama3 sur https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct
La clé API pour le point de terminaison de l'API Nvidia NIM peut être récupérée sur https://build.nvidia.com/explore/discover
L'étape suivante consiste à indexer un dossier et ses sous-dossiers contenant les documents que vous souhaitez rechercher. Vous pouvez le faire en utilisant le fichier index.py
. Courir
python index.py path/to/folder
A titre d'exemple, vous pouvez l'exécuter avec TestFolder fourni :
python index.py TestFolder
Cela créera localement un index client qdrant et indexera tous les fichiers de ce dossier et ses sous-dossiers avec les extensions .pdf
, .txt
, .docx
, .pptx
La prochaine étape consisterait à exécuter le service de recherche générative. Pour cela vous pouvez exécuter :
python uvicorn_start.py
Cela démarrera un serveur local, que vous pourrez interroger à l'aide de Postman, ou envoyer des requêtes POST. Le chargement des modèles (y compris le téléchargement depuis Huggingface, peut prendre quelques minutes, surtout pour la première fois). Il existe deux interfaces :
http://127.0.0.1:8000/search
http://127.0.0.1:8000/ask_localai
Les deux interfaces ont besoin d'un corps au format :
{"query":"What are knowledge graphs?"}
et les en-têtes pour Accept et Content-Type définis sur application/json
.
Voici un exemple de code :
import requests
import json
url = "http://127.0.0.1:8000/ask_localai"
payload = json . dumps ({
"query" : "What are knowledge graphs?"
})
headers = {
'Accept' : 'application/json' ,
'Content-Type' : 'application/json'
}
response = requests . request ( "POST" , url , headers = headers , data = payload )
print ( response . text )
Enfin, l'interface utilisateur simplifiée peut être démarrée de la manière suivante :
streamlit run user_interface.py
Vous pouvez maintenant utiliser l'interface utilisateur et poser des questions auxquelles la réponse sera basée sur les fichiers de votre système de fichiers.
Si vous souhaitez voir plus de détails sur le développement de cet outil, vous pouvez lire Comment créer un moteur de recherche génératif pour vos fichiers locaux à l'aide de Llama 3 | Vers la science des données
Vous pouvez également consulter les papiers suivants :
@article{kovsprdic2024verif,
title={Verif.ai: Towards an Open-Source Scientific Generative Question-Answering System with Referenced and Verifiable Answers},
author={Ko{v{s}}prdi{'c}, Milo{v{s}} and Ljaji{'c}, Adela and Ba{v{s}}aragin, Bojana and Medvecki, Darija and Milo{v{s}}evi{'c}, Nikola},
journal={arXiv preprint arXiv:2402.18589},
year={2024}
}