Ein einfaches RAG System, das Web-Dokumente lädt, in einer DB (mit pgvector) speichert und Fragen mit Hilfe eines lokalen LLM beantwortet.
- Python 3.12 (hab ich jetzt genommen, man es geht aber auch 3.10 +)
- Docker und Docker Compose installiert (PostgreSQL)
- Ollama installiert und gestartet
- Ein Ollama Modell installiert (z.B. smollm2:latest)
- PostgreSQL mit Docker starten:
docker-compose up -dPostgreSQL mit pgvector Extension in einem Docker Container.
- Dependencies installieren:
uv sync- Umgebungsvariablen konfigurieren:
cp env.example .envDie .env Datei enthält bereits die korrekten Einstellungen für den Docker Container (Port 5436).
- Verbindung testen (optional):
uv run test_connection.pyPrüft, ob die PostgreSQL Verbindung funktioniert.
- Ollama Modell installieren (falls noch nicht vorhanden):
ollama pull smollm2:latestDas Skript lädt Dokumente von Web-URLs, erstellt Embeddings und speichert sie in einer PostgreSQL Datenbank mit pgvector. Anschließend können Fragen zu den Dokumenten gestellt werden.
- Stelle sicher, dass PostgreSQL läuft:
docker-compose up -d- Programm ausführen:
uv run llm.py- PostgreSQL Container stoppen (optional):
docker-compose down- PostgreSQL Container und Daten löschen (optional):
docker-compose down -v- Lädt Dokumente von konfigurierten URLs
- Teilt die Dokumente in Chunks auf
- Erstellt Embeddings mit HuggingFace
- Speichert die Embeddings in einer PostgreSQL Vektordatenbank (pgvector)
- Beantwortet Fragen basierend auf den gespeicherten Dokumenten
- Nutzt Semantic Caching für schnellere Antworten bei ähnlichen Fragen
Alle Konfigurationen können in der .env Datei angepasst werden:
- SOURCES_FILE: Datei mit den Quellen-URLs (Standard:
sources.json) - POSTGRES_CONNECTION_STRING: PostgreSQL Verbindungsstring
- OLLAMA_MODEL: Zu verwendendes Ollama Modell
- EMBEDDING_MODEL: Embedding Modell für Vektoren
- CHUNK_SIZE / CHUNK_OVERLAP: Text-Splitting Parameter
- RETRIEVER_K: Anzahl der abgerufenen Dokumente
- USE_CACHE: Semantic Caching aktivieren/deaktivieren
- CACHE_SIMILARITY_THRESHOLD: Ähnlichkeitsschwelle für Cache Hits
Die Vektordatenbank wird in PostgreSQL (Docker Container) gespeichert. Die Daten bleiben erhalten, solange der Container läuft. Mit docker-compose down -v werden die Daten gelöscht.