Was macht pageindex-rag?
Baue ein vektorloses RAG für reasoning-basierte Abfrage und Antwortgenerierung ohne Embeddings oder Vektorspeicher.
Übersicht
Dieses Skill implementiert eine RAG-Pipeline, die keine Vektordatenbank oder Embedding-Modelle benötigt. Es verwendet eine strukturierte PageIndex-Darstellung des Wissenskorpus, um relevante Textabschnitte effizient abzufragen, und nutzt dann ein Large Language Model (wie Claude oder GPT) zur Antwortgenerierung.
Funktionsweise
- PageIndex-Aufbau: Der Textkorpus wird in Seiten oder Segmente unterteilt und in einer einfachen Datenstruktur (z. B. JSON) indexiert. Jeder Eintrag enthält den Text, einen eindeutigen Bezeichner und Metadaten.
- Reasoning-basierte Abfrage: Statt Embedding-Suche wird eine kombinatorische Suche verwendet: Keyword-Matching, Fuzzy-Suche und kontextbezogene Relevanzbewertung (z. B. TF-IDF oder BM25-ähnliche Ansätze).
- Relevanzbewertung: Die gefundenen Segmente werden gewichtet (z. B. nach Übereinstimmungsgrad, Signifikanz der Keywords, Seitentitel).
- Antwortgenerierung: Die Top-N Segmente werden als Kontext an das LLM übergeben, das die Antwort formuliert.
Voraussetzungen
- Python 3.8+ (oder die Umgebung des jeweiligen Agent-Frameworks)
- API-Schlüssel für ein LLM (z. B. Anthropic, OpenAI)
- Keine externen Vektordatenbanken oder Embedding-Modelle erforderlich
Verwendung
# Klonen des Repos (wenn eigenständig)
git clone https://github.com/deafened-vascularstructure846/pageindex-rag
cd pageindex-rag
# Installation der Abhängigkeiten (Beispiel)
pip install -r requirements.txt
# Anwendung starten
python app.py --query "Wie funktioniert vektorloses RAG?"
API-Referenz
| Parameter | Typ | Beschreibung |
|---|---|---|
query | string | Die Frage oder Abfrage des Benutzers |
page_index | dict | Der PageIndex als JSON-kodierte Struktur |
top_k | int (optional) | Anzahl der abzurufenden Segmente (Standard: 5) |
model | string (optional) | LLM-Modellname (Standard: "claude-3-haiku-20240307") |
Beispiele
Einfache Abfrage
from pageindex_rag import RAGEngine
engine = RAGEngine(page_index_path="index.json")
antwort = engine.ask("Was sind Vorteile von vektorlosem RAG?")
print(antwort)
Mit benutzerdefinierten Einstellungen
engine = RAGEngine(page_index_path="index.json", top_k=10, model="gpt-4")
Einschränkungen
- Nicht geeignet für semantische Ähnlichkeitssuche auf tiefem semantischem Niveau (da kein Embedding-Space)
- Skaliert linear mit der Anzahl der Dokumentseiten; für sehr große Korpora sind Optimierungen (z. B. Sharding) empfohlen
- Die Genauigkeit der Abfrage hängt stark von der Qualität des PageIndex und der Keyword-Abdeckung ab
Lizenz
MIT