LokalLLM: ChatGPT-Niveau auf eigener Hardware — ohne Cloud, ohne Kosten
Lokale KI-Chat-Oberfläche mit RAG, Multi-Modell-Support und voller Datenkontrolle
🚀 Ihre eigene KI-Chat-Oberfläche. DSGVO-konform. Offline. Open Source.
💰 Warum sich lokale LLMs für Unternehmen sofort rechnen
Cloud-basierte LLMs wie ChatGPT, Claude oder Gemini erfordern die Übertragung sensibler Daten an externe Server. Für vertrauliche Dokumente, interne Unternehmensdaten oder personenbezogene Informationen ist das ein No-Go. Zudem entstehen laufende Kosten, es gibt Rate-Limits, und man ist von Preisänderungen der Anbieter abhängig.
💻 Code-Einblicke
Ein Blick unter die Haube — so ist das Projekt technisch umgesetzt:
🐍 LLM-Kommunikation mit Ollama-API und RAG-Integration
Der Kern des Systems: Die get_llm_response()-Methode verbindet Ollama mit ChromaDB-basiertem RAG-Kontext:
def get_llm_response(self, message):
"""Angepasste LLM-Anfrage mit aktuellem Server und RAG-Kontext"""
model = self.settings.get("model", "llama2:latest")
# Hole relevanten Kontext aus der Wissensbasis
relevant_context = ""
if self.rag_handler.is_active:
relevant_context = self.rag_handler.get_relevant_context(message)
# Erstelle den Prompt mit Kontext
if relevant_context and len(relevant_context.strip()) > 0:
rag_prompt = self.get_prompt("rag.query_enhancement")
enhanced_prompt = rag_prompt.format(
context=relevant_context,
query=message
)
else:
enhanced_prompt = message
# Füge Rollen-Prompt hinzu, wenn vorhanden
if self.current_role_prompt:
enhanced_prompt = f"{self.current_role_prompt}\n\n{enhanced_prompt}"
# Sende Anfrage an den Ollama-Server
server_url = self.current_server['address']
final_url = f"http://{server_url}:{self.current_server['port']}"
client = Client(host=final_url, timeout=30.0)
response = client.chat(
model=model,
messages=[{"role": "user", "content": enhanced_prompt}],
stream=False
)
return response.message.content
🔍 Vektor-basierte Dokumentensuche mit ChromaDB
Das RAG-System indiziert Dokumente und findet semantisch relevante Textpassagen:
class RAGHandler:
def __init__(self):
self.embeddings = HuggingFaceEmbeddings(
model_name="sentence-transformers/all-MiniLM-L6-v2"
)
self.vector_store = None
self.is_active = False
def index_documents(self):
"""Indexiert alle Dokumente im knowledge_base Verzeichnis"""
loader = DirectoryLoader(
self.docs_dir,
glob="**/*.txt",
loader_cls=TextLoader
)
documents = loader.load()
# Teile Dokumente in Chunks mit Überlappung
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
chunks = text_splitter.split_documents(documents)
# Erstelle Vektordatenbank mit Embeddings
self.vector_store = Chroma.from_documents(
documents=chunks,
embedding=self.embeddings,
persist_directory=self.db_dir
)
self.vector_store.persist()
return True
🌍 Mehrsprachige UI-Unterstützung
Sprachdateien als JSON, dynamisch umschaltbar ohne Neustart:
class LanguageManager:
def __init__(self):
self.current_language = "de"
self.available_languages = {
"de": "Deutsch",
"en": "English"
}
def load_language(self, lang_code=None):
"""Lädt die Sprachdatei für den angegebenen Sprachcode"""
if lang_code:
self.current_language = lang_code
lang_file = resource_path(f"languages/{self.current_language}.json")
with open(lang_file, "r", encoding="utf-8") as f:
self.translations = json.load(f)
def get_text(self, key_path):
"""Holt den übersetzten Text — z.B. 'menu.settings'"""
keys = key_path.split('.')
value = self.translations
for key in keys:
value = value[key]
return value
⚙️ So funktioniert's
Von der Installation bis zum ersten KI-Chat in unter 10 Minuten.
🔧 Technische Umsetzung
LokalLLM kombiniert bewährte Open-Source-Tools zu einer nahtlosen Benutzererfahrung — eine vollständig lokale Alternative zu ChatGPT mit Desktop-GUI.
🏗️ Architektur
# Kern-Komponenten chat_logic.py # LLM-Kommunikation, Prompt-Handling, Chat-Historie chat_ui.py # Haupt-GUI mit tkinter/CustomTkinter chat_ui_component.py # Wiederverwendbare UI-Komponenten rag_handler.py # RAG: Dokumente laden, Vektoren, Retrieval rag_manager.py # RAG-Konfiguration und Session-Management language_manager.py # Mehrsprachige UI-Unterstützung
🛠️ Tech Stack
⚡ Features & Funktionen
📚 RAG in Aktion
Das RAG-System erweitert das LLM mit Ihrem eigenen Wissen:
# Beispiel: Dokumente laden und abfragen 1. Ordner mit PDFs/TXTs auswählen 2. Dokumente werden in ChromaDB indiziert 3. Bei Frage: Relevante Text-Snippets werden abgerufen 4. LLM beantwortet Frage basierend auf Dokument-Kontext # Typische Anwendungsfälle • Firmen-Wissensdatenbank (Handbücher, Protokolle) • Juristische Dokumentenanalyse • Wissenschaftliche Paper-Recherche • Persönliche Notizen durchsuchen
⚡ In 5–7 Tagen zu Ihrer maßgeschneiderten lokalen KI-Oberfläche.
🚀 Gebaut mit Vibecoding — in 5–7 Tagen statt 8–13 Wochen
- 📋 2–3 Wochen Requirements Engineering
- 🏗️ 2–3 Wochen Architektur & Design
- 💻 3–4 Wochen Implementierung
- 🧪 1–2 Wochen Testing
- 🚢 1 Woche Deployment
- ⏱️ Gesamt: 8–13 Wochen
- 🗣️ 0.5 Tage Prompt-Engineering
- ⚡ 2–3 Tage iterative Generierung
- 🔧 1–2 Tage Refinement & Debugging
- ✅ 1 Tag Integration & Testing
- 🚀 0.5 Tage Deployment
- ⏱️ Gesamt: 5–7 Tage
🗣️ Der System-Prompt hinter diesem Projekt
Du bist ein Python-Experte für Desktop-Anwendungen mit lokalen LLMs. Aufgabe: Erstelle eine vollständige Desktop-GUI (Chat-Interface) für lokale Large Language Models via Ollama. Technische Anforderungen: - Python 3.10+, tkinter/CustomTkinter für die GUI - Ollama REST-API als LLM-Backend - RAG-System mit ChromaDB + Sentence-Transformers - Unterstützung für PDF, TXT, DOCX via RAG - Multi-Modell-Support (Llama 3, Mistral, CodeLlama, etc.) - GGUF-Modelle von HuggingFace direkt laden GUI-Features: - Chat-Fenster mit Streaming-Responses (Token-für-Token) - Modell-Auswahl (Dropdown) - Prompt-Template-Manager - Chat-Historie (SQLite) - Dark Mode / Light Mode Toggle - Mehrsprachigkeit (DE/EN) - Export als Markdown/JSON - System-Prompt konfigurierbar RAG-Workflow: 1. Dokumente laden (Drag & Drop oder Ordner-Auswahl) 2. Text-Chunking (konfigurierbare Chunk-Größe) 3. Embedding via Sentence-Transformers (all-MiniLM-L6-v2) 4. ChromaDB als Vektor-Speicher 5. Bei Anfrage: Top-k Chunks retrieven + LLM-Kontext erweitern
🎯 Strategische Erkenntnisse aus diesem Projekt
Lokale LLMs sind die unterschätzte Revolution. Diese Einsichten helfen bei jeder KI-Entscheidung.
Bereit für echte KI-Souveränität?
Lokale LLMs sind keine Zukunftsmusik mehr — sie sind produktiv einsetzbar, heute. Lassen Sie uns gemeinsam Ihre KI-Infrastruktur aufbauen.