AI-Chat & Analyse¶
Vesana hat zwei AI-Features:
- AI-Chat — frei stellbare IT-Fragen, mit RAG aus dem Wiki und Web-Suche als Fallback
- AI-Service-Analyse — automatische Diagnose eines Check-Problems, mit reichhaltigem Kontext
Beides nutzt dieselbe Kontext-Pipeline und denselben konfigurierten Provider.
Provider¶
Drei Möglichkeiten, siehe AI-Provider einrichten:
| Provider | Privatsphäre | Kosten |
|---|---|---|
| Ollama lokal | Daten bleiben im Stack | Hardware (mehrere GB RAM) |
| Anthropic (Cloud) | Frage + Kontext gehen zur Anthropic-API | API-Tokens |
| Extern (OpenAI-kompatibler Endpoint) | je nach Anbieter | je nach Anbieter |
Embeddings brauchen ein separates Modell
Anthropic hat keine Embedding-API. Bei Provider Anthropic läuft das Embedding-Modell trotzdem über Ollama — beides ist im Provider-Setup getrennt konfigurierbar.
Such-Pipeline¶
Chat und Service-Analyse durchlaufen dieselben Quellen-Schritte:
flowchart LR
Q[Anfrage] --> RAG[1. RAG: pgvector]
RAG --> FTS[2. FTS Deutsch/Englisch]
FTS --> ILIKE[3. ILIKE Fallback]
ILIKE --> WEB[4. Web-Suche, nur bei wenig Wiki-Treffern]
WEB --> CTX[Kontext für LLM]
CTX --> LLM[Provider]
LLM --> RESP[Antwort + Quellen]
| Schritt | Was er macht |
|---|---|
| RAG | Vector-Cosine-Similarity gegen Wiki-Embeddings, Top-Artikel |
| FTS | PostgreSQL-Volltext, zuerst Deutsch, bei zu wenig Treffern zusätzlich Englisch |
| ILIKE | partielle Substring-Suche als letzter Wiki-Anker |
| Web | DuckDuckGo HTML-Suche (kein API-Key nötig) — läuft nur, wenn das Wiki bis dahin weniger als zwei Treffer geliefert hat |
AI-Chat¶
Chat-Widget, wahlweise als Bubble unten rechts oder als Seitenleiste (AiChatWidget) — per Button umschaltbar, die Wahl bleibt pro Browser gespeichert.
Bedienung¶
- Frage tippen, Enter — die Antwort streamt herein.
- Verlauf: Unterhaltungen werden gespeichert. Verlauf öffnen, ältere Unterhaltung anklicken, weiterfragen — die Wiki-/Web-Belege der Antworten bleiben erhalten. Suche auch im Text der Nachrichten; Gruppierung Heute / Gestern / Letzte 7 Tage; umbenennen, anheften, löschen.
- Neuer Chat beginnt eine neue Unterhaltung.
- Eine Unterhaltung gehört genau einer Person: fremde Verläufe sind für niemanden lesbar, auch nicht für Administratoren. Die Betreiber-Sicht zeigt nur Zahlen, nie Inhalte.
- Admin → System → KI → Chat-Verlauf: mitschreiben an/aus und Aufbewahrungszeit (beliebige Tageszahl, Schnellwahl 7 Tage bis 1 Jahr oder unbegrenzt = 0). Angeheftete Unterhaltungen sind immer ausgenommen.
Wissensquellen-Toggles¶
Pro Chat-Session drei Schalter:
| Toggle | Bedeutung |
|---|---|
| 📖 Wiki | RAG + FTS aus dem eigenen Wiki |
| 🌐 Internet | Web-Suche als Fallback |
| 🧠 Eigenes Wissen | standardmäßig an — erlaubt dem Modell, sein Grundwissen zusätzlich zum gefundenen Wiki-/Web-Kontext einzubringen. Ausschalten zwingt strikte Quellentreue: das Modell antwortet nur noch aus den gefundenen Wiki-Artikeln und Web-Ergebnissen und sagt ehrlich, wenn es keine Quelle findet, statt zu raten |
Für sensible Diskussionen ohne Web-Zugriff: nur Wiki an lassen, Internet aus.
Quellen-Badges¶
Die Antwort zeigt, welche Wiki-Artikel und Web-Ergebnisse als Kontext eingeflossen sind, mit Titel/Link — so ist nachvollziehbar, woher eine Aussage stammt.
Tenant-Scope¶
Die Suche respektiert den Tenant-Scope aus dem JWT: Super-Admin sieht tenantübergreifend, ein Tenant-User nur den eigenen Tenant. Clientseitig nicht manipulierbar.
AI-Service-Analyse¶
Auf der Fehlerübersicht oder Host-Detail-Seite gibt es pro Check einen Analyse-Button.
sequenceDiagram
participant U as User
participant API
participant DB
participant RAG
participant LLM
U->>API: POST /api/v1/ai/analyze/{service_id}/stream
API->>DB: Status, Historie, Schwellwerte, Agent-/Collector-Status
API->>RAG: Wiki-Suche zum Check
API->>LLM: System-Prompt + Kontext + RAG
LLM-->>API: Streaming-Antwort mit Quellen
API-->>U: Slide-In-Panel
Reichhaltiger Kontext¶
Was die Analyse als Kontext bekommt:
- Status, Statusdauer, letzter Wert
- Check-Historie und Statuswechsel-Historie
- Agent-/Collector-Verbindungsstatus
- Schwellwerte, ACK-/Downtime-Flags
Cache¶
Analysen werden mit dem aktuellen Status als Schlüssel zwischengespeichert — bei unverändertem Status liefert ein erneuter Aufruf die gecachte Antwort, keine neue LLM-Anfrage. Ändert sich der Status, wird der Cache ungültig.
Der Neu generieren-Button erzwingt eine frische Analyse mit leicht erhöhter Temperature (bis max. 1,0) — sinnvoll, wenn die erste Antwort nicht half.
Datenschutz¶
Was geht zum LLM?¶
| Feature | Was geht raus |
|---|---|
| Chat (nur eigenes Wissen an) | nur deine Frage + Conversation-History |
| Chat (Wiki an) | + gefundene Wiki-Artikel-Auszüge |
| Chat (Internet an) | + Web-Snippets — deine Frage geht dafür an die Web-Suche |
| Analyse | Check-Kontext (Hostname nicht maskiert) + Wiki + ggf. Web |
Hostname und Wiki-Inhalt verlassen den Server
Bei Provider Anthropic oder Extern geht der Anfrage-Kontext zur konfigurierten API — Hostnamen werden dabei nicht maskiert. Bei Ollama lokal verlässt nichts den eigenen Stack. Bei Datenschutz-Bedenken also Provider auf Ollama setzen.
Was geht NICHT zum LLM?¶
- Keine Passwörter, Tokens, API-Keys, SNMP-Communities
- Keine Audit-Log-Einträge
- Keine tenant-fremden Daten
- Keine User-Liste, keine SLA-Reports
Der System-Prompt ist versionierter Code, nicht user-konfigurierbar — kein Einfallstor für Prompt-Injection über eigene Eingaben.
Sichtbarkeit¶
flowchart LR
A[AI sichtbar?]
A --> S{Instanz aktiviert?}
S -->|nein| H1[Ausgeblendet]
S -->|ja| P{Permission ai.query/ai.analyze?}
P -->|nein| H2[Ausgeblendet]
P -->|ja| U{User-Präferenz hide_ai?}
U -->|an| H3[Ausgeblendet]
U -->|aus| Y[Sichtbar]
Pro User in Einstellungen → Präferenzen lässt sich das Chat-Widget komplett ausblenden — unabhängig davon, ob Instanz und Rolle es erlauben.
Permissions¶
| Permission | Wirkung |
|---|---|
ai.query |
Chat öffnen, Anfragen stellen |
ai.analyze |
Service-Analyse starten |
admin.system |
Provider und Modell konfigurieren (Admin) |
Anschluss¶
- AI-Provider einrichten — Setup
- Wiki — RAG-Quelle, je besser gepflegt desto besser die Antworten