Taris: Der KI-Assistent, bei dem Daten beim Kunden bleiben
TL;DR. Taris ist ein KI-Assistent, bei dem die Daten des Kunden nicht zum Anbieter wandern. Grundprinzip: Das Modell ist ein Plugin hinter einer stabilen Schnittstelle und nicht das Zentrum der Architektur. Im Inneren: ein anbieterneutraler LLM-Dispatcher, hybrides RAG (BM25 + Dense + RRF + Cross-Encoder Rerank), Multi-Tenant Postgres mit pgvector, optional lokale Modelle via Ollama. Dieser Artikel beschreibt, wie Taris aufgebaut ist, warum es so aufgebaut ist und wo das für KMU in der EU Vorteile bringt.
1. Das Problem: „Nehmen wir GPT-4 und vergessen den Rest"
Wenn ein Kleinunternehmer fragt „welchen KI-Assistenten sollen wir einsetzen?", bekommt er üblicherweise eine von zwei Extremantworten:
- „Nehmen Sie ChatGPT / Copilot Studio / Microsoft 365, da ist alles drin." Bequem, aber: Daten gehen zum Anbieter, Anpassungsmöglichkeiten sind begrenzt, Preise wachsen intransparent, Migration auf eine andere Plattform ist ein kompletter Umzug.
- „Wir bauen Ihnen das von Grund auf mit LangChain." Langsam und teuer, und ein Jahr später stellt sich heraus, dass ein großer Teil des Codes nur Klebecode für Modellwechsel ist, den niemand pflegen will.
Taris ist der dritte Weg: eine produktisierte Basis (Modell-Dispatcher, hybrides RAG, Multi-Tenant Postgres, Kanal-Adapter), die wir für den Kunden einsetzen und beim Kunden belassen. Kein SaaS. Kein „von Grund auf bauen." Ein Halbfertigprodukt, das sich nachvollziehbar anpassen lässt.
2. Für wen das relevant ist
- KMU-Teams mit 10–500 Mitarbeitern, die bereits Dokumente, Vorschriften und Kundendaten angehäuft haben, aber keine KI-Spezialisten.
- Regulierte Branchen (Gesundheitswesen, Arbeitssicherheit, Rechtsberatung), in denen „unsere Daten sind bei OpenAI gelandet" ein Bußgeld bedeuten kann.
- Startups, die eine gemeinsame Assistentenbasis für mehrere interne Anwendungsfälle benötigen.
3. Der häufige Fehler
Was wir häufig bei „Pilotprojekten" sehen, die vor unserem Einstieg begonnen wurden:
- Eine API angeschlossen. Als der Anbieter die Preise erhöhte, war niemand bereit zu migrieren.
- Alles in einen großen Prompt gesteckt. „Lost in the Middle" schlägt zu (Liu et al., 2023): Das Modell „vergisst" die Mitte.
- RAG nur auf Embeddings gebaut, und exakte Codes und Kennzeichen werden nicht gefunden.
- Kein Eval-Set. Unmöglich zu sagen, ob es nach der letzten „Prompt-Verbesserung" besser geworden ist.
- Kundendokumente liegen in einer fremden Cloud ohne Auftragsverarbeitungsvertrag (AVV/DPA). Rechtsprüfung aufgeschoben.
4. Der technische Ansatz: Was in Taris steckt
Die Architektur besteht aus vier unabhängigen Schichten:
flowchart LR
subgraph Kanäle
TG[Telegram Bot]
WEB[Web UI / PWA]
VOICE[Sprache]
API[REST API]
end
subgraph Kern
GW[FastAPI Gateway]
ORCH[Agenten-Orchestrator]
DISP[LLM Dispatcher]
KB[KB Service]
AUTH[Auth + RBAC]
end
subgraph Speicher
PG[(Postgres + pgvector)]
OBJ[(MinIO / S3)]
LOG[(Audit-Log)]
end
subgraph Modelle
LOCAL[Ollama / llama.cpp]
CLOUD[OpenAI / Anthropic / Gemini / OpenRouter]
end
TG --> GW
WEB --> GW
VOICE --> GW
API --> GW
GW --> AUTH --> ORCH
ORCH --> KB --> PG
ORCH --> DISP
DISP --> LOCAL
DISP --> CLOUD
ORCH --> LOG
Jede Schicht ist ersetzbar, und darauf kommt es an. Kanäle sind Adapter. Das Modell ist ein Plugin. Speicher ist ein Backend. Der Orchestrator ist der einzige Ort, wo Geschäftslogik lebt. Wenn OpenAI morgen seine Preise verdreifacht, wechselt eine Taris-Installation mit einer einzigen Konfigurationsdatei.
4.1. LLM-Dispatcher
class LLMProvider(Protocol):
async def complete(
self,
messages: list[ChatMessage],
*,
max_tokens: int,
temperature: float,
tools: list[Tool] | None = None,
) -> ChatCompletion: ...
Sechs unterstützte Anbieter: OpenAI, Anthropic, Gemini, OpenRouter, Ollama, llama.cpp. Routing über YAML:
default: openrouter:openai/gpt-4o-mini
routes:
- match: { task: rerank }
use: ollama:bge-reranker-base
- match: { sensitive: true }
use: ollama:llama3.1:8b
fallback:
- openrouter:anthropic/claude-3-5-sonnet
- ollama:llama3.1:8b
4.2. Hybrides RAG mit RRF
Das Retrieval läuft in drei parallelen Stufen:
- Lexikalisch (BM25): Postgres FTS mit sprachbewusstem Analyzer für RU/EN/DE/SL.
- Dense: pgvector Cosinus, Standard
text-embedding-3-small, für On-Prembge-m3. - Metadaten-Boost: exakte Übereinstimmung bei Tags (
product,section,last_updated).
Die Fusion erfolgt per Reciprocal Rank Fusion:
$$ \text{score}(d) = \sum_{i \in \text{retrievers}} \frac{1}{k + \text{rank}_i(d)}, \quad k = 60 $$
Dann Cross-Encoder Rerank (bge-reranker-base) auf Top-5. Empirischer Gewinn auf unserem internen Arbeitssicherheits-Golden-Set: Recall@5 0,71 → 0,88 (RRF vs. Pure Dense), Grounding-Rate +0,07 nach Rerank. Mit „etwas besser" hat das wenig zu tun. Es ist der Unterschied zwischen „verwendbar" und „dem Kunden Geld zurückgeben."
4.3. Multi-Tenant Postgres mit RLS
CREATE POLICY tenant_isolation ON chunks
USING (tenant_id = current_setting('app.tenant_id')::int);
Jede Verbindung setzt vor der Abfrage SET app.tenant_id = $1. Es ist unmöglich, versehentlich Daten eines anderen Kunden zu lesen: die Datenbank erzwingt das selbst.
5. Tabelle: Welche Komponenten sind ersetzbar
| Schicht | Standard | Alternative | Wechselkosten |
|---|---|---|---|
| Embedding | text-embedding-3-small |
bge-m3 |
Config + Neuindizierung |
| Reranker | bge-reranker-base |
mxbai-rerank |
Config |
| Vektorspeicher | pgvector | Qdrant | docker-compose + Migration |
| LLM | gpt-4o-mini |
claude-3-5-sonnet, llama3.1:8b |
Config |
| Kanal | Telegram | Web / Slack / WhatsApp | Adapter ~200 Zeilen |
| Dateispeicher | MinIO | S3 / Nextcloud | Config |
| Deployment | Docker Compose | Kubernetes / Nomad | Manifeste |
6. SINTARIS-Minicase
Das Produkt Worksafety Superassistant ist ein Beispiel für Taris im realen Einsatz. Aufgabe:
- Interner Assistent für Arbeitsschutzvorschriften (~3000 PDF-Seiten).
- Telegram-Chatbot für Produktionsmitarbeiter (RU + DE).
- Vollständiges On-Prem (Anforderung des DPO).
Technische Umsetzung:
- Taris in OpenClaw-Konfiguration, zwei Server: Primär (Ubuntu 24.04, 64 GB RAM, RTX 4090) + Backup.
- Embedding:
bge-m3, Generierung:llama3.1:8b-instruct(ausreichend für RU/DE), Fallbackqwen2.5:14b. - Telegram-Bot mit lokalem NAT, ohne Cloud.
- Golden-Set: 120 Fragen mit Referenz-Zitierungen.
Metriken nach 90 Tagen:
- Recall@5: 0,86 auf dem Golden-Set.
- Zitierungsgenauigkeit: 92 %.
- Medianlatenz: 1,9 Sek.
- LLM-Kosten: 0 EUR (alles lokal).
- Infrastrukturkosten: ~120 EUR/Monat für Strom + Abschreibung.
Details: Worksafety § 6 RAG pipeline und OpenClaw § 8 AI dispatch.
7. Checkliste (15 Punkte) bei der Auswahl eines KI-Assistenten für KMU
- Vendor-Lock-In geprüft: Können Sie den LLM-Anbieter in einer Woche wechseln?
- Daten: Wo werden Kundendokumente physisch gespeichert?
- Embeddings: Wo werden sie gespeichert? (oft vergessen: sie sind auch PII-Ableitungen)
- DPA unterzeichnet mit jedem LLM-Anbieter, den Sie nutzen.
- Eval-Set: Haben Sie eines, und wie viele Fragen sind darin?
- Zitierung: Generiert das System Quellenverweise?
- Grounding-Rate: Wird sie gemessen? (Wenn nicht, weiß niemand, ob das Modell lügt.)
- Retrieval-Regression nach jeder Prompt-Änderung getestet?
- Multi-Tenant-Sicherheit: RLS auf DB-Ebene, nicht nur „im Code abgesprochen"?
- Lokale Modelle verfügbar: Gibt es einen Plan B, wenn die Cloud ausfällt?
- Kosten pro Token: in Echtzeit überwacht?
- DSAR + Löschung: als Code implementiert, nicht als manuelle Prozedur?
- Audit-Log: vorhanden, unveränderlich, mit erforderlicher Aufbewahrungsfrist?
- Kanäle: Ist das Hinzufügen eines neuen Kanals < 500 Zeilen oder ein Kern-Rewrite?
- Dokumentation: in welcher Sprache, für wen, wie oft aktualisiert?
8. Risiken
- Versuchung von Frontier-Modellen. Das Team gewöhnt sich an Sonnet, dann verlangt der Kunde On-Prem, und das System muss auf 8B umgestellt werden. Lösung: von Anfang an auf 8B testen, Frontier nur dort einsetzen, wo der Gewinn nachgewiesen wurde.
- Dispatcher-Komplexität. Je mehr Anbieter unterstützt werden, desto mehr Grenzfälle. Unsere Regel: Ein neuer Anbieter kommt nur, wenn ein Kunde ihn fordert.
- Embeddings ≠ portierbar. Bei einem Wechsel des Embedding-Modells muss neu indiziert werden. Zeit einplanen.
- Mehrsprachige Qualität.
bge-m3ist gut für EU und RU, aber in DE/SL ist die Qualität schlechter als in EN. Am eigenen Golden-Set prüfen.
9. Was als Nächstes zu tun ist
Wenn Sie bereits einen KI-Assistenten haben und es Zeit ist, ihn zu ersetzen, führen wir ein KI-Prozessaudit durch. Wenn Sie Taris ausprobieren möchten, gibt es ein KI-Pilotprojekt über 4–8 Wochen mit festem Umfang. Umfang und Preis vereinbaren wir nach dem Erstgespräch (siehe Pakete).
Wenn Sie zuerst lesen möchten, schauen Sie in die KB-Kapitel Taris (vollständige Beschreibung) und OpenClaw (On-Prem-Topologie).
10. Quellen
- Lewis, P. et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. arXiv:2005.11401.
- Karpukhin, V. et al. (2020). Dense Passage Retrieval for Open-Domain Question Answering. arXiv:2004.04906.
- Cormack, G., Clarke, C., Buettcher, S. (2009). Reciprocal Rank Fusion outperforms Condorcet and individual rank learning methods. SIGIR '09.
- Liu, N. F. et al. (2023). Lost in the Middle: How Language Models Use Long Contexts. arXiv:2307.03172.
- BAAI (2024). BGE-M3: One-stop multi-lingual, multi-functionality, multi-granularity text embeddings.
- pgvector: https://github.com/pgvector/pgvector
- Ollama: https://ollama.com
Sintaris führt KI-Prozessaudits, KI-Pilots und Taris-Implementierungen für KMU in der EU durch. Das Erstgespräch ist kostenlos und dauert 30 Minuten.