Skip to content

retolutz/kmu-knowledge-assistant

Repository files navigation

KMU Knowledge Assistant

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

Überblick

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.

Kernfunktionen

  • 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

Architektur

┌─────────────────────────────────────────────────────────┐
│                   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 │    │
│  └─────────────────┘         └─────────────────────┘    │
└─────────────────────────────────────────────────────────┘

Technische Details

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

Installation

Voraussetzungen

  • Python 3.10+
  • Ollama installiert (für lokale Verarbeitung)

Setup

# 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)

Starten

# Streamlit-App starten
streamlit run app/main.py

# Oder via Shell-Skript
./run.sh

Die Anwendung ist dann unter http://localhost:8501 erreichbar.

Konfiguration

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

Umgebungsvariablen (.env)

# Optional: Cloud-APIs
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
GOOGLE_API_KEY=...

# Ollama (Standard: localhost)
OLLAMA_HOST=http://localhost:11434

Bundesrecht importieren (Fedlex)

python import_fedlex.py

Importiert wichtige Schweizer Bundesgesetze (OR, ZGB, StGB, DSG, ArG, etc.) automatisch in die Wissensbasis.

Projektstruktur

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

Performance

Metrik Wert
Vektorsuche Latenz ~50ms
BM25-Suche Latenz ~20ms
Hybrid Search (inkl. RRF) ~80ms
Gesamtlatenz (inkl. LLM) 2-5s

Systemanforderungen

Minimal:

  • CPU: 4 Cores
  • RAM: 8 GB
  • Speicher: 10 GB

Empfohlen:

  • CPU: 8+ Cores oder GPU (NVIDIA)
  • RAM: 16 GB
  • Speicher: 50 GB

Lizenz

Dieses Projekt wurde im Rahmen einer FHNW-Modularbeit entwickelt.

Autor

Reto Lutz FHNW Hochschule für Wirtschaft Dezember 2025

About

RAG-basierter Wissensassistent für KMU - FHNW Modularbeit 2025

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published