Allgemeine Einführung
HippoRAG ist ein Open-Source-Framework, das von der OSU-NLP-Gruppe an der Ohio State University entwickelt wurde und sich an den Mechanismen des menschlichen Langzeitgedächtnisses orientiert. Es kombiniert Retrieval Augmented Generation (RAG), Knowledge Graph und personalisierte PageRank-Techniken, um Large Language Models (LLMs) bei der konsistenten Integration von Wissen aus externen Dokumenten zu unterstützen.HippoRAG 2 ist die neueste Version von HippoRAG, die auf der NeurIPS 2024 vorgestellt wurde. Sie verbessert die Fähigkeit des Modells, Multi-Hop-Retrieval und komplexes Kontextverständnis durchzuführen und dabei niedrige Kosten und geringe Latenzzeiten beizubehalten. Es hat einen geringeren Ressourcenbedarf für die Offline-Indizierung als Lösungen wie GraphRAG. Benutzer können den Code über GitHub beziehen und ihn kostenlos einsetzen.
HippoRAG2 Durchführungsmethodik
Funktionsliste
- Indizierung von DokumentenKonvertierung externer Dokumente in durchsuchbare Wissensstrukturen, die eine kontinuierliche Aktualisierung ermöglichen.
- Multihop-SucheBeantworten Sie Fragen, die eine mehrstufige Argumentation erfordern, indem Sie Wissensverbindungen herstellen.
- Q&A GenerationGenerieren Sie genaue Antworten auf der Grundlage von Suchergebnissen.
- Modell-UnterstützungKompatibel mit OpenAI-Modellen und nativen Modellen vLLM Eingesetztes LLM.
- Effiziente VerarbeitungSchnelles Online-Abrufen und geringer Ressourcenbedarf für die Offline-Indizierung.
- experimenteller NachweisBereitstellung von Datensätzen und Skripten zur Unterstützung der Studienreplikation.
Hilfe verwenden
Ablauf der Installation
Die Installation von HippoRAG ist einfach und für Benutzer mit Grundkenntnissen in Python geeignet. Hier sind die detaillierten Schritte:
- Erstellen einer virtuellen Umgebung
Erstellen Sie eine Python 3.10-Umgebung, indem Sie den folgenden Befehl in das Terminal eingeben:
conda create -n hipporag python=3.10
Aktivieren Sie dann die Umgebung:
conda aktiviert hipporag
- Installation von HippoRAG
Läuft in einer aktivierten Umgebung:
pip install hipporag
- Umgebungsvariablen konfigurieren
Stellen Sie die folgenden Variablen entsprechend Ihrer Hardware und Ihren Anforderungen ein. Verwenden Sie zum Beispiel mehrere GPUs:
export CUDA_VISIBLE_DEVICES=0,1,2,3
export HF_HOME=
export OPENAI_API_KEY= # ist erforderlich, um OpenAI-Modelle zu verwenden.
Aktivieren Sie die Umgebung erneut, um sicherzustellen, dass sie wirksam wird:
conda aktiviert hipporag
Verwendung von OpenAI-Modellen
Um schnell mit HippoRAG? loszulegen, können Sie das OpenAI-Modell verwenden. Hier sind die Schritte:
- Das Dokument vorbereiten
Erstellen Sie z. B. eine Liste von Dokumenten:
docs = [
"Zhang San ist ein Arzt." ,
"Li Si lebt in Peking." ,
"Peking ist die Hauptstadt von China."
]
- Initialisierung von HippoRAG
Parameter in Python setzen:from hipporag import HippoRAG save_dir = 'outputs' llm_model_name = 'gpt-4o-mini' einbetten_modell_name = 'nvidia/NV-Embed-v2' hipporag = HippoRAG(save_dir=save_dir, llm_model_name=llm_model_name, embedding_model_name=embedding_model_name)
- Indexdatei
Eingangsdokumente für die Indizierung:hipporag.index(docs=docs)
- Fragen und Antworten
Geben Sie eine Frage ein, um die Antwort zu erhalten:queries = ["Was macht Zhang San beruflich?" , "Wo wohnt Li Si?"] rag_results = hipporag.rag_qa(queries=queries) print(rag_results)
Die Ausgabe kann sein:
- Zhang San ist ein Arzt.
- Li Si lebt in Peking.
Verwendung des nativen vLLM-Modells
Möchten Sie lokal verteilen? Sie können HippoRAG mit vLLM ausführen. Die Schritte sind wie folgt:
- Starten des vLLM-Dienstes
Starten Sie lokale Dienste im Terminal, z. B. mit dem Llama-Modell:exportieren CUDA_VISIBLE_DEVICES=0,1 export VLLM_WORKER_MULTIPROC_METHOD=spawn export HF_HOME= conda hipporag aktivieren vllm serve meta-llama/Llama-3.3-70B-Instruct --tensor-parallel-size 2 --max_model_len 4096 --gpu-memory-utilization 0.95
- Initialisierung von HippoRAG
Geben Sie die lokale Dienstadresse in Python an:hipporag = HippoRAG(save_dir='outputs', llm_model_name='meta-llama/Llama-3.3-70B-Instruct', embedding_model_name='nvidia/NV-Embed-v2', llm_base_url='http://localhost:8000/v1')
- Index & Fragen & Antworten
Die Bedienung ist dieselbe wie beim OpenAI-Modell: Geben Sie einfach das Dokument und die Frage ein.
Featured Function Bedienung
Multihop-Suche
Der Höhepunkt von HippoRAG ist die Multi-Hop-Suche. Wenn Sie zum Beispiel fragen: "Li Si lebt in der Hauptstadt welchen Landes?" Das System findet zunächst "Li Si wohnt in Peking", verknüpft dies dann mit "Peking ist die Hauptstadt von China" und antwortet "China". Um es zu benutzen, müssen Sie nur die Frage eingeben:
queries = ["In welcher Hauptstadt des Landes lebt Li Si?"]
rag_results = hipporag.rag_qa(queries=queries)
print(rag_results)
Experimentelle Fortpflanzung
Möchten Sie die Ergebnisse Ihrer Arbeit validieren? HippoRAG bietet Reproduktionswerkzeuge.
- Vorbereiten des Datensatzes
Laden Sie den Datensatz von GitHub oder HuggingFace herunter (z. B.sample.json
), setzen Sie dievervielfältigen/Datensatz
Katalog. - laufendes Experiment
Geben Sie ihn in das Terminal ein:python main.py --datensatz beispiel --llm_base_url https://api.openai.com/v1 --llm_name gpt-4o-mini --embedding_name nvidia/NV-Embed-v2
- Ergebnisse anzeigen
Überprüfen Sie die Ausgabe, um die Wirksamkeit des Multi-Hop-Abrufs und der Q&A zu überprüfen.
Offline-Stapelverarbeitung
vLLM unterstützt den Offline-Modus, und die Indizierungsgeschwindigkeit kann um mehr als das Dreifache erhöht werden. Der Vorgang ist wie folgt:
- Ausführen einer Offline-Batch
export CUDA_VISIBLE_DEVICES=0,1,2,3 export HF_HOME= export OPENAI_API_KEY='' python main.py --datensatz beispiel --llm_name meta-llama/Llama-3.3-70B-Instruct --openie_mode offline --skip_graph
- Folgeoperation
Wenn Sie fertig sind, kehren Sie in den Online-Modus zurück, um den vLLM-Dienst und den Q&A-Prozess auszuführen.
caveat
- GedächtnislückeWenn der GPU-Speicher nicht ausreicht, passen Sie die
max_model_len
vielleichtgpu-memory-utilization
. - Komponenten während der Prüfung anpassen: Verwendung von
reproduzieren/datensatz/beispiel.json
Testumgebung. - Freigabe von DokumentenLöschen Sie die alten Daten, bevor Sie das Experiment erneut durchführen:
rm -rf outputs/sample/*