Januar 12, 2026

Local Chatapp mit Ollama

Fortschritte im Bereich der LLMs machen es mittlerweile möglich auch kleinere Modelle zu erzeugen, die sogar lokal ausgeführt werden können. Dafür kann es unterschiedliche Gründe geben, unter anderem, dass man seine privaten Daten schützen möchte und sie nicht auf fremden Servern verarbeitet werden sollte.

Der Code findet sich auf Github unter https://github.com/gochx/chatapp/tree/main/localLLM

Eine einfache Möglichkeit Large Language Modelle lokal laufen bietet das Paket Ollama. Es stellt eine ganze Reihe aktueller Modelle in verschiedenen Varianten zur Verfügung. Eine Übersicht findet sich hier.

Um Ollama zu nutzen muss man es zunächst installieren. Die Software kann hier heruntergeladen werden.

Sobald Ollama heruntergeladen ist, kann man es per Befehl in der Shell ausführen. Dazu sucht man sich ein Modell aus und verwendet den entsprechenden Befehl auf der Seite.

Ich habe mich im ersten Schritt für das kleinste Modell von Deepseek (R1, 1.5b) entschieden. Hier der Befehl um es auszuführen:

ollama run deepseek-r1:1.5b

Ist das Modell noch nicht lokal verfügbar, wird es nun heruntergeladen. DeepSeek R1 mit 1.5b Parametern hat dabei die Größe von ca. einem Gigabyte.

Man kann nun direkt in der Shell anfangen mit dem Modell zu chatten:

Welcome to Ollama!

Run your first model:

        ollama run llama3.2

PS C:\Windows\System32> ollama run deepseek-r1:1.5b
pulling manifest
pulling aabd4debf0c8... 100% ▕████████████████████████████████████████████████████████▏ 1.1 GB
pulling 369ca498f347... 100% ▕████████████████████████████████████████████████████████▏  387 B
pulling 6e4c38e1172f... 100% ▕████████████████████████████████████████████████████████▏ 1.1 KB
pulling f4d24e9138dd... 100% ▕████████████████████████████████████████████████████████▏  148 B
pulling a85fe2a2e58e... 100% ▕████████████████████████████████████████████████████████▏  487 B
verifying sha256 digest
writing manifest
success
>>> Hello DeepSeek, how are you?
<think>

</think>

Hello! I'm DeepSeek-R1-Lite-Preview, an AI assistant independently developed by the Chinese company DeepSeek Inc.
For detailed information about models and products, please refer to the official documentation.

Statt in der Shell ist das Modell auch per Pythoncode ansprechbar. Das funktioniert denkbar einfach:

import ollama

def generate_response(prompt):
    response = ollama.chat(model="deepseek-r1:1.5b", messages=[{"role": "user", "content": prompt}])
    return response["message"]["content"]
  
generate_response("Hello, how are you?")

Locales RAC mit ChromaDB

Auch ein RAC System kann local erstellt werden. Hierfür verwenden wir in diesem Beispiel ChromaDB.

Dazu definieren wir zwei Funktionen. Eine Funktion dient dazu, neues Wissen in die Vektordatenbank hinzuzufügen. Die zweite Funktion dazu dieses Wissen abzufragen:

# Choma DB als RAC System
import chromadb

chroma_client = chromadb.PersistentClient(path="db/")
collection = chroma_client.get_or_create_collection(name="knowledge")

def add_knowledge(text):
    collection.add(
        documents=[text],
        metadatas=[{"source": "manual"}],
        ids=[str(len(collection.get()["documents"]))]
    )


def search_knowledge(query):
    results = collection.query(query_texts=[query], n_results=1)
    return results["documents"][0] if results["documents"] else None

Wenn wir neues Wissen hinzufügen wollen, dann verwenden wir die Funktion „add_knowledge“:

# Wissen hinzufügen
add_knowledge("""Die Blaustern-Kohlenstoff-Formel, entwickelt von Dr. Elena Freimuth im Jahr 2023, ist eine wenig bekannte Methode zur Analyse interdimensionaler Molekularbewegungen. Diese Formel, die in wissenschaftlichen Kreisen unter der Bezeichnung Freimuths Konstante bekannt ist, wird aktuell nur in einem geschlossenen Forschungsprojekt der Soluna Corporation verwendet.""")

Dieses Wissen kann nun direkt abgerufen werden:

# Manuelle Abfrage von ChromaDB
query = "Was ist die Blaustern-Kohlenstoff-Formel?"
response = search_knowledge(query)
print(f"🔍 Antwort: {response}")

Für das RAC-System verwenden wir die Vektordatenbank in Verbindung mit einem Prompt. Wir durchsuchen zunächst die Vektordatenbank nach relevantem WIssen und fügen das Ergebnis dann in den Prompt ein:

user_input = "Was ist die Blaustern-Kohlenstoff-Formel?"
extra_info = search_knowledge(user_input)
prompt = f"{user_input}\n\nZusätzliche Informationen:\n{extra_info}" if extra_info else user_input
response = generate_response(prompt)
print(response)

Das Ganze lässt sich auch wunderbar in ein Streamlit Frontend verpacken:

# Frontend mit Streamlit
import streamlit as st

st.title("🧠 Lokaler AI-Chatbot mit Wissenserweiterung")

user_input = st.text_input("Gib eine Frage ein:")

if user_input:
    if is_sensitive(user_input):
        st.error("⚠️ Diese Anfrage enthält sensible Inhalte und kann nicht beantwortet werden.")
    else:
        extra_info = search_knowledge(user_input)
        prompt = f"{user_input}\n\nZusätzliche Informationen:\n{extra_info}" if extra_info else user_input
        response = generate_response(prompt)
        st.write("🤖:", response)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert