|
Download README copy.md from yadayana/Knowledge-Graph-Visualization: direct link, hf CLI and curl.
- Browser
- Download file 7.41 kB
-
https://huggingface.co/spaces/yadayana/Knowledge-Graph-Visualization/resolve/main/README%20copy.md
- Command line
-
hf download 'hf://spaces/yadayana/Knowledge-Graph-Visualization/README copy.md'
-
curl -L -o 'README copy.md' https://huggingface.co/spaces/yadayana/Knowledge-Graph-Visualization/resolve/main/README%20copy.md
7.41 kB
| title: RAG-LangChain-Gradio | |
| app_file: rag_execute.py | |
| sdk: gradio | |
| sdk_version: 5.46.0 | |
| # Retrieval-Augmented Generation (RAG) | |
| Dieses Projekt implementiert ein **Retrieval-Augmented Generation (RAG)**-System unter Verwendung von LangChain, Mistral/OpenAI LLMs und Pinecone für die Vektordatenbanksuche. Das System ermöglicht es, Dokumente abzufragen und kontextbewusste Antworten über eine Chat-ähnliche Schnittstelle zu generieren. | |
| --- | |
| ## Inhaltsverzeichnis | |
| 1. [Übersicht](#übersicht) | |
| 2. [Anforderungen](#anforderungen) | |
| 3. [Einrichtung](#einrichtung) | |
| 4. [Vorbereitung der API-Schlüssel](#vorbereitung-der-api-schlüssel) | |
| 5. [Erstellung des Pinecone-Indexes](#erstellung-des-pinecone-indexes) | |
| 6. [Ausführung des RAG-Systems](#ausführung-des-rag-systems) | |
| 7. [Code-Struktur](#code-struktur) | |
| 8. [Prozessbeschreibung](#prozessbeschreibung) | |
| 9. [Evaluation](#evaluation) | |
| --- | |
| ## Übersicht | |
| Dieses RAG-System arbeitet in drei Schritten: | |
| 1. **Dokumente einbetten**: Rohtextdateien in Chunks aufteilen und mit dem `llama-text-embed-v2` Embedding-Modell in Pinecone einbetten. | |
| 2. **Abruf (Retrieval)**: Semantische Suche in der Pinecone-Vektordatenbank durchführen, um die relevantesten Chunks für eine Anfrage abzurufen. | |
| 3. **Generierung**: Übergabe der Anfrage und des abgerufenen Kontexts an ein LLM (Mistral oder OpenAI), um die Antwort zu generieren. | |
| --- | |
| ## Anforderungen | |
| Python 3.10+ empfohlen. | |
| Enthaltene Abhängigkeiten: | |
| * `langchain-community` | |
| * `langchain-core` | |
| * `langchain-text-splitters` | |
| * `langchain-mistralai` | |
| * `langchain-openai` | |
| * `ragas` | |
| * `datasets` | |
| * `pinecone-client` | |
| * `gradio` | |
| * `python-dotenv` | |
| * `pypdf` | |
| * `pandas` | |
| * `nbformat` | |
| * `nbconvert` | |
| * `unstructured` (mit Extras für `docx`, `pptx`, `html`, `md`) | |
| Alle Abhängigkeiten sollten installiert werden, z. B. mit dem folgenden Befehl. | |
| ``` | |
| pip install langchain-mistralai langchain-community datasets ragas langchain-openai langchain-text-splitters langchain-core pinecone-client langgraph pypdf gradio python-dotenv nbformat nbconvert "unstructured[docx,pptx,html,md]" | |
| ``` | |
| Da eine requirements.txt-Datei vorhanden ist, kann die Installation auch durch folgenden Befehl durchgeführt werden: | |
| ``` | |
| pip install -r requirements.txt | |
| ``` | |
| --- | |
| ## Einrichtung | |
| 1. Repository klonen. | |
| 2. Erstellen Sie eine `.env`-Datei im Hauptverzeichnis mit den folgenden Schlüsseln: | |
| ```dotenv | |
| MISTRAL_API_KEY=<Ihr-mistral-api-schlüssel> | |
| OPENAI_API_KEY=<Ihr-openai-api-schlüssel> | |
| PINECONE_API=<Ihr-pinecone-api-schlüssel> | |
| INDEX_NAME=<Ihr-pinecone-index-name> | |
| DIRNAME=<Pfad-zu-Kontextdokumenten> | |
| MODELNAME=<LLM-Modellname> | |
| ```` | |
| * `MISTRAL_API_KEY` – Ihr API-Schlüssel für Mistral-Modelle. | |
| * `OPENAI_API_KEY` – Ihr API-Schlüssel für OpenAI-Modelle. Es reicht aus, einen der OpenAI-/Mistral-Schlüssel (je nach ausgewähltem Modell) festzulegen. | |
| * `PINECONE_API` – API-Schlüssel für Pinecone, um Vektoren zu speichern und abzufragen. | |
| * `INDEX_NAME` – Name des Pinecone-Indexes, in dem die Dokumente abgelegt werden. | |
| * `DIRNAME` – Unterordner innerhalb des festen `context/`-Verzeichnisses. | |
| * Wenn leer (`DIRNAME=`), werden alle Dokumente in `context/` verarbeitet. | |
| * Beispiel: `DIRNAME=llm_context` verarbeitet nur `context/llm_context/`. | |
| * `MODELNAME` – LLM-Modell, z. B. `gpt-5-nano` für OpenAI oder `mistral-large-latest` für Mistral. | |
| --- | |
| ## Vorbereitung der API-Schlüssel | |
| ### Mistral | |
| 1. Registrieren bei [Mistral AI](https://www.mistral.ai). | |
| 2. API-Schlüssel erstellen. | |
| 3. In `.env` unter `MISTRAL_API_KEY` eintragen. | |
| ### OpenAI | |
| 1. Registrieren bei [OpenAI](https://platform.openai.com/). | |
| 2. API-Schlüssel erstellen. | |
| 3. In `.env` unter `OPENAI_API_KEY` eintragen. | |
| ### Pinecone | |
| 1. Registrieren bei [Pinecone](https://www.pinecone.io/). | |
| 2. API-Schlüssel erstellen. | |
| 3. In `.env` unter `PINECONE_API` eintragen. | |
| 4. Einen **Index** erstellen (z. B. `use-cases-index`) mit dem Embedding-Modell `llama-text-embed-v2`. | |
| --- | |
| ## Erstellung des Pinecone-Indexes | |
| Das RAG-Vorbereitungsskript (`rag_func.py`) führt automatisch folgende Schritte aus: | |
| 1. Verbindung zu Pinecone über den API-Schlüssel herstellen. | |
| 2. Dokumente aus dem Verzeichnis `DIRNAME` laden. | |
| 3. Dokumente in Chunks aufteilen mit `RecursiveCharacterTextSplitter` (Standard: 1800 Tokens pro Chunk, 200 Tokens Überlappung). | |
| 4. Chunks mit `llama-text-embed-v2` einbetten. | |
| 5. Einbettungen in Batches in den Pinecone-Index hochladen. | |
| > **Tipp:** Wenn alle Dokumente bereits hochgeladen wurden, kann `DIRNAME` leer bleiben, und das System überspringt die Dokumentenverarbeitung. | |
| --- | |
| ## Ausführung des RAG-Systems | |
| Hauptskript ausführen: | |
| ```bash | |
| python rag_execute.py | |
| ``` | |
| Dies bewirkt: | |
| 1. Laden der Dokumente (falls vorhanden) und Vorbereitung des RAG-Systems. | |
| 2. Starten einer **Chat-Schnittstelle** mit Gradio, in der Sie Fragen stellen können. | |
| 3. Abrufen relevanter Chunks aus Pinecone. | |
| 4. Generieren von Antworten mit dem ausgewählten LLM. | |
| ### Chat-Schnittstelle | |
| * Geben Sie eine Anfrage in das Textfeld ein. | |
| * Das System ruft den Kontext ab und erstellt eine Antwort. | |
| * Antworten werden im Chat-Format angezeigt. | |
| --- | |
| ## Code-Struktur | |
| ``` | |
| ├─ rag_execute.py # Hauptskript für RAG mit Gradio-Schnittstelle | |
| ├─ rag_func.py # Funktionen für RAG-Vorbereitung, Abruf und Generierung | |
| ├─ .env # Umgebungsvariablen (API-Schlüssel, Index, Modell, Verzeichnis) | |
| ├─ context/ # Ordner mit Rohdokumenten (kann leer sein, falls bereits hochgeladen) | |
| ``` | |
| --- | |
| ## Prozessbeschreibung | |
| 1. **LLM auswählen**: Mistral oder OpenAI. | |
| 2. **Dokumente vorbereiten**: | |
| * Text- oder JSON-Dokumente in den Ordner `DIRNAME` legen. | |
| * Wenn alle Dokumente bereits hochgeladen sind, kann der Ordner leer bleiben. | |
| 3. **Pinecone-Index erstellen**: | |
| * Index in `.env` benennen (`INDEX_NAME`). | |
| * Embedding-Modell `llama-text-embed-v2` verwenden. | |
| 4. **Dokumente aufteilen**: Mit `RecursiveCharacterTextSplitter`. | |
| 5. **Chunks einbetten**: Zur semantischen Suche an Pinecone senden. | |
| 6. **Relevante Chunks abrufen**: Bei einer Anfrage. | |
| 7. **Antwort generieren**: Anfrage + Kontext an LLM übergeben. | |
| 8. **Ergebnis zurückgeben**: Im Chat-Interface anzeigen. | |
| --- | |
| ## Evaluation | |
| Das System unterstützt Evaluation mit **RAGAS**: | |
| 1. `generate_dataset()` ruft Kontext ab und generiert Antworten. | |
| 2. `evaluate_RAG()` berechnet **Faithfulness** und andere Metriken. | |
| 3. Ergebnisse werden zur Analyse ausgegeben. | |
| --- | |
| ## Hinweise | |
| * Retry-Logik für Pinecone-Operationen ist implementiert, um Netzwerkfehler abzufangen. | |
| * Chunk-Größe und Überlappung können in `prepare_RAG()` für größere oder kleinere Kontextgranularität angepasst werden. | |
| --- | |
| ## Beispiel | |
| ```python | |
| from rag_func import prepare_RAG, retrieve_RAG, generate_RAG | |
| import os | |
| index, pc, llm = prepare_RAG( | |
| pinecone_API=os.getenv("PINECONE_API"), | |
| index_name=os.getenv("INDEX_NAME"), | |
| llm_model=os.getenv("MODELNAME"), | |
| dir_name=os.getenv("DIRNAME") | |
| ) | |
| query = "Liste typische Anwendungsfälle von GenAI im Telekommunikationsbereich auf." | |
| retrieved_chunks = retrieve_RAG(query, pc, index) | |
| response = generate_RAG(query, llm, retrieved_chunks) | |
| print(response.content) | |
| ``` | |
| --- | |
| ## Referenzen | |
| * [LangChain RAG Tutorial](https://python.langchain.com/docs/tutorials/rag/) | |
| * [Pinecone Dokumentation](https://docs.pinecone.io) | |
| * [RAGAS Evaluation](https://docs.ragas.io/en/stable/getstarted/evals/) | |