Ein RAG-basiertes Wissensmanagement-System mit Hybrid Search für kleine und mittlere Unternehmen.
FHNW Hochschule für Wirtschaft Modul: Maschinelles Lernen und wissensbasierte Systeme Herbstsemester 2025
Der KMU Knowledge Assistant kombiniert lokale und Cloud-basierte Large Language Models mit einer Hybrid-Search-Architektur aus BM25 und semantischer Vektorsuche. Das System ist speziell für den Einsatz mit Schweizer Rechtstexten (Bundesrecht via Fedlex) und Unternehmensdokumenten optimiert.
- Hybrid Search: Kombination aus BM25 (lexikalisch) und Vektorsuche (semantisch) mit Reciprocal Rank Fusion (RRF)
- Dual-Embedding: Parallele Indexierung mit lokalem Modell (Ollama) und Cloud-API (OpenAI) - Wechsel ohne Re-Indexierung
- Query Enhancement: Domänenspezifische Query Expansion und Re-Ranking für Schweizer Rechtstexte
- Multi-LLM Support: Ollama (lokal), OpenAI, Anthropic, Google
- Fedlex Integration: Automatischer Import von Schweizer Bundesrecht
- Web Scraping: Automatische Wissenssammlung aus Webquellen mit Spider-Trap-Detection
┌─────────────────────────────────────────────────────────┐
│ Streamlit Web-App │
├─────────────────────────────────────────────────────────┤
│ RAG Pipeline │
│ ┌─────────────┐ ┌───────────┐ ┌──────────────────┐ │
│ │ Hybrid Search│ │ RRF Fusion│ │ Query Enhancement│ │
│ │ Vektor+BM25 │ │ k=60 │ │ Expansion+Rerank │ │
│ └─────────────┘ └───────────┘ └──────────────────┘ │
├─────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────────┐ │
│ │ Vektor-DB │ │ LLM Provider │ │
│ │ ChromaDB+HNSW │ │ Ollama / OpenAI │ │
│ │ + BM25 Index │ │ Anthropic / Google │ │
│ └─────────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────┘
| Komponente | Konfiguration |
|---|---|
| Chunk-Grösse | 800 Zeichen |
| Chunk-Überlappung | 100 Zeichen (12.5%) |
| Lokales Embedding | nomic-embed-text (768 Dim.) |
| Cloud Embedding | text-embedding-3-small (1536 Dim.) |
| RRF Parameter | k=60 |
| LLM Temperature | 0.4 (optimiert für RAG) |
| Top-K (lokal) | 5 Chunks |
| Top-K (API) | 12 Chunks |
- Python 3.10+
- Ollama installiert (für lokale Verarbeitung)
# Repository klonen
git clone https://github.com/retolutz/kmu-knowledge-assistant.git
cd kmu-knowledge-assistant
# Virtuelle Umgebung erstellen
python -m venv venv
source venv/bin/activate # Linux/macOS
# oder: venv\Scripts\activate # Windows
# Abhängigkeiten installieren
pip install -r requirements.txt
# Ollama-Modelle herunterladen
ollama pull mistral:7b
ollama pull nomic-embed-text
# Umgebungsvariablen konfigurieren
cp .env.example .env
# .env bearbeiten und API-Keys eintragen (optional für Cloud-LLMs)# Streamlit-App starten
streamlit run app/main.py
# Oder via Shell-Skript
./run.shDie Anwendung ist dann unter http://localhost:8501 erreichbar.
Die zentrale Konfiguration befindet sich in app/config.py. Wichtige Einstellungen:
# LLM-Provider (ollama, openai, anthropic, google)
LLMProvider.OLLAMA # Standard: lokal
# Embedding-Modus
EmbeddingMode.BOTH # Dual-Embedding (lokal + cloud)
EmbeddingMode.LOCAL_ONLY # Nur Ollama
EmbeddingMode.API_ONLY # Nur OpenAI
# RAG-Parameter
chunk_size = 800
chunk_overlap = 100
similarity_threshold = 0.5# Optional: Cloud-APIs
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
GOOGLE_API_KEY=...
# Ollama (Standard: localhost)
OLLAMA_HOST=http://localhost:11434python import_fedlex.pyImportiert wichtige Schweizer Bundesgesetze (OR, ZGB, StGB, DSG, ArG, etc.) automatisch in die Wissensbasis.
app/
├── config.py # Zentrale Konfiguration
├── main.py # Streamlit Hauptanwendung
├── core/
│ ├── rag_engine.py # RAG-Logik, BM25, Hybrid Search
│ ├── cbr_engine.py # Case-Based Reasoning
│ ├── query_enhancement.py # Query Expansion, Re-Ranking
│ ├── embeddings.py # Dual-Embedding-Service
│ ├── llm_provider.py # Multi-Provider LLM-Abstraktion
│ └── document_processor.py # Chunking, Formatierung
├── components/ # UI-Komponenten
└── utils/ # Hilfsfunktionen
outlook-addin/ # Outlook Add-in (Prototyp)
chrome-extension/ # Chrome Extension (Prototyp)
mcp_server/ # Model Context Protocol Server
| Metrik | Wert |
|---|---|
| Vektorsuche Latenz | ~50ms |
| BM25-Suche Latenz | ~20ms |
| Hybrid Search (inkl. RRF) | ~80ms |
| Gesamtlatenz (inkl. LLM) | 2-5s |
Minimal:
- CPU: 4 Cores
- RAM: 8 GB
- Speicher: 10 GB
Empfohlen:
- CPU: 8+ Cores oder GPU (NVIDIA)
- RAM: 16 GB
- Speicher: 50 GB
Dieses Projekt wurde im Rahmen einer FHNW-Modularbeit entwickelt.
Reto Lutz FHNW Hochschule für Wirtschaft Dezember 2025