Local GenAI Search ist Ihre lokale generative Suchmaschine basierend auf dem Llama3-Modell, die lokal auf einem 32-GB-Laptop oder -Computer ausgeführt werden kann (entwickelt mit MacBookPro M2 mit 32 GB RAM).
Das Hauptziel des Projekts besteht darin, dass Benutzer Fragen zum Inhalt ihrer lokalen Dateien stellen können, die dann präzise beantwortet werden und auf relevante Dokumente verweisen, die dann geöffnet werden können.
Die Engine verwendet MS MARCO-Einbettungen für die semantische Suche, wobei Top-Dokumente an das Llama 3-Modell übergeben werden.
Standardmäßig würde es mit der NVIDIA-API funktionieren und das 70B-Parameter-Llama-3-Modell verwenden. Wenn Sie jedoch alle Ihre NVIDIA-API-Credits verwendet haben oder die API nicht zum Durchsuchen Ihrer lokalen Dokumente verwenden möchten, kann sie auch lokal mithilfe des 8B-Parametermodells ausgeführt werden.
Um Ihre lokale generative KI-Suche auszuführen (vorausgesetzt, Sie verfügen über genügend String-Maschine, um Llama3 auszuführen), müssen Sie das Repository herunterladen:
git clone https://github.com/nikolamilosevic86/local-gen-search.git
Sie müssen alle Anforderungen installieren:
pip install -r requirements.txt
Sie müssen eine Datei mit dem Namen environment_var.py
erstellen und dort Ihren HuggingFace-API-Schlüssel eingeben. Die Datei sollte so aussehen:
import os
hf_token = "hf_you_api_key"
nvidia_key = "nvapi-your_nvidia_nim_api_key"
Der API-Schlüssel für HuggingFace kann unter https://huggingface.co/settings/tokens
abgerufen werden. Um eine generative Komponente auszuführen, müssen Sie unter https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct
Zugriff auf das Llama3-Modell anfordern
Der API-Schlüssel für den Nvidia NIM API Endpoint kann unter https://build.nvidia.com/explore/discover
abgerufen werden
Der nächste Schritt besteht darin, einen Ordner und seine Unterordner zu indizieren, die Dokumente enthalten, die Sie durchsuchen möchten. Sie können dies mit der Datei index.py
tun. Laufen
python index.py path/to/folder
Sie können es beispielsweise mit dem bereitgestellten TestFolder ausführen:
python index.py TestFolder
Dadurch wird lokal ein qdrant-Client-Index erstellt und alle Dateien in diesem Ordner und seinen Unterordnern mit den Erweiterungen .pdf
, .txt
, .docx
, .pptx
indiziert
Der nächste Schritt wäre die Ausführung des generativen Suchdienstes. Dazu können Sie Folgendes ausführen:
python uvicorn_start.py
Dadurch wird ein lokaler Server gestartet, den Sie mit Postman abfragen oder POST-Anfragen senden können. Das Laden von Modellen (einschließlich des Herunterladens von Huggingface kann insbesondere beim ersten Mal einige Minuten dauern). Es gibt zwei Schnittstellen:
http://127.0.0.1:8000/search
http://127.0.0.1:8000/ask_localai
Beide Schnittstellen benötigen einen Textkörper in einem Format:
{"query":"What are knowledge graphs?"}
und Header für Accept und Content-Type auf application/json
gesetzt.
Hier ist ein Codebeispiel:
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 )
Abschließend kann die Streamlit-Benutzeroberfläche wie folgt gestartet werden:
streamlit run user_interface.py
Jetzt können Sie die Benutzeroberfläche verwenden und Fragen stellen, die anhand der Dateien in Ihrem Dateisystem beantwortet werden.
Wenn Sie weitere Details zur Entwicklung dieses Tools erfahren möchten, lesen Sie „How to Build a Generative Search Engine for Your Local Files Using Llama 3 |“. Auf dem Weg zur Datenwissenschaft
Außerdem können Sie die folgenden Papiere überprüfen:
@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}
}