RAG Arena ist ein Open-Source-Next.js-Projekt, das zu meiner mendable.ai gemacht wurde und mit LangChain verbunden ist, um ein RAG-Chatbot-Erlebnis zu bieten, bei dem Anfragen mehrere Antworten erhalten. Benutzer stimmen über diese Antworten ab, die dann unscharf werden, um den verwendeten Retriever preiszugeben, wodurch sich die Chatbots durch ihre Daten-RAG-Methoden unterscheiden. Das Projekt nutzt Supabase für Datenbankoperationen und verfügt über eine Echtzeit-Bestenliste, die Daten aus der Datenbank anzeigt.
Stellen Sie sicher, dass pnpm
auf Ihrem System installiert ist. Wenn nicht, installieren Sie es über:
npm install -g pnpm
Klonen Sie das Projekt-Repository:
git clone https://github.com/mendableai/rag-arena
Navigieren Sie zum Projektverzeichnis und installieren Sie die Abhängigkeiten:
cd RAG-arena
pnpm i
Konfigurieren Sie Ihre Umgebungsvariablen:
# probably in: https://platform.openai.com/api-keys
OPENAI_API_KEY=
# probably in: https://supabase.com/dashboard/ project>project settings>api
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_PRIVATE_KEY=
# probably in: https://console.upstash.com/redis/
UPSTASH_REDIS_REST_URL=
UPSTASH_REDIS_REST_TOKEN=
PRODUCTION=false
PYTHON_MICRO_SERVER=
Starten Sie den Entwicklungs-Webserver (nextjs):
pnpm dev
cd python_service
poetry install
*(Wenn Sie keine Poesie haben, fügen Sie einfach eine ID mit pip install Poetry hinzu)
Für den Graph Rag Retriever müssen Sie den Graph Store erstellen lassen oder den Server automatisch die Funktion „create_neo4j_graph_store“ (lokalisiert in /python_service/retrievers/neo4j_retriever.py
) ausführen lassen, indem Sie die Zeilen auskommentieren:
# if not os.path.exists(storage_dir) or not os.listdir(storage_dir):
# create_neo4j_graph_store()
Dies kann je nach den in data/chunks
verwendeten Daten eine Weile dauern. Am Ende wird Ihr neo/storage
-Verzeichnis mit persistenten Daten für den lokalen Diagrammspeicher gefüllt.
Der Index muss geladen und zwischengespeichert werden, damit das Graph RAG verwendet werden kann. Die Funktion load_index()
erledigt das für Sie in python_service/app.py
. Daher kann es bei Ihrer allerersten Ausführung eine Weile dauern, die zwischengespeicherte .pkl-Datei zu erstellen, die in python_service/index/cache
abgelegt wird.
poetry run flask run --debug
Öffnen Sie http://localhost:3000 mit Ihrem Browser, um das Ergebnis anzuzeigen.
app/api/ingest/route.ts
RecursiveCharacterTextSplitter
von LangChain für eine effektive Textaufteilung.OpenAIEmbeddings
zum Generieren von Dokumenteinbettungen.SupabaseVectorStore
zum Speichern der verarbeiteten Dokumente in Supabase.app/api/retrievers/dynamic-retriever/route.ts
actions/voting-system.ts
// calculation used for the elo
function calculateEloAdjustment(timesTested: number, averageTimesTested: number): number {
if (averageTimesTested === 0) return 10;
const adjustmentFactor = timesTested / averageTimesTested;
return (1 / adjustmentFactor) * 10;
}
id
, retriever
, elo
, votes
, times_tested
, full_name
, description
und link
. (https://js.langchain.com/docs/modules/data_connection/retrievers/)
In diesem Abschnitt werden die verschiedenen in app/api/retrievers/dynamic-retriever/tools/functions.ts
definierten RAG-Funktionen beschrieben und deren Zweck und Implementierung innerhalb der Projektarchitektur detailliert beschrieben. Diese Funktionen spielen eine entscheidende Rolle im Dokumenten-RAG-Prozess und nutzen verschiedene Strategien und Technologien, um Leistung und Genauigkeit zu optimieren.
Beiträge sind willkommen! Bitte folgen Sie dem Standard-Fork- und Pull-Request-Workflow. Stellen Sie sicher, dass Sie die im Projekt vorhandenen Codierungsstile und -muster einhalten und Tests für neue Funktionen oder Fehlerbehebungen schreiben.
RAG Arena ist Open Source und wird unter der MIT-Lizenz veröffentlicht. Weitere Informationen finden Sie in der LICENSE-Datei.