Darstellung
Prompt-Versionierung
VIA speichert jede Änderung am Bot-Prompt als Version. Du kannst aeltere Versionen jederzeit wiederherstellen oder vergleichen.
Datenbank-Schema: bot_prompt_versions
| Spalte | Typ | Nullable | Default | Beschreibung |
|---|---|---|---|---|
id | uuid | NOT NULL | gen_random_uuid() | Primaerschlüssel |
bot_id | uuid | NOT NULL | -- | Zugehoeriger Bot (FK bots, ON DELETE CASCADE) |
tenant_id | uuid | NOT NULL | -- | Mandanten-ID (FK tenants, ON DELETE CASCADE) |
prompt_text | text | NOT NULL | -- | Der vollständige Prompt-Text dieser Version |
version_name | varchar(100) | NULL | -- | Optionaler Name (z.B. "Version 3") |
change_notes | text | NULL | -- | Änderungsnotizen |
version_number | integer | NOT NULL | 1 | Fortlaufende Versionsnummer pro Bot |
is_current | boolean | NULL | false | Markiert die aktive Version |
created_by | uuid | NULL | -- | Ersteller (FK users) |
created_at | timestamptz | NULL | now() | Erstellungszeitpunkt |
Indizes:
bot_prompt_versions_pkey-- PRIMARY KEY (id)idx_bot_prompt_versions_bot-- btree (bot_id)idx_bot_prompt_versions_tenant-- btree (tenant_id)
API Endpoints
Alle Endpoints erfordern Authentifizierung und Tenant-Pruefung. Basis-Pfad: /api/bots/:id/prompt-versions.
| Method | Pfad | Permission | Beschreibung |
|---|---|---|---|
GET | /api/bots/:id/prompt-versions | -- | Alle Versionen eines Bots laden |
POST | /api/bots/:id/prompt-versions | bot:edit | Neue Version speichern |
POST | /api/bots/:id/prompt-versions/:versionId/restore | bot:edit | Version wiederherstellen |
DELETE | /api/bots/:id/prompt-versions/:versionId | bot:edit | Version löschen |
GET /api/bots/:id/prompt-versions
Gibt alle Versionen zurück, sortiert nach created_at DESC. Die Response enthaelt zusaetzlich den aktuellen system_prompt des Bots.
Response:
json
{
"success": true,
"versions": [...],
"current_version": { ... },
"current_prompt": "..."
}POST /api/bots/:id/prompt-versions
Erstellt eine neue Version. Die Versionsnummer wird automatisch hochgezaehlt. Die neue Version wird als is_current: true markiert, alle bisherigen auf false gesetzt.
Pflichtfelder: prompt_text
Optionale Felder: version_name, change_notes
POST /api/bots/:id/prompt-versions/:versionId/restore
Stellt eine aeltere Version wieder her. Der system_prompt des Bots wird auf den prompt_text der Version gesetzt und is_current wird aktualisiert.
DELETE /api/bots/:id/prompt-versions/:versionId
Loescht eine Version. Zwei Schutzregeln gelten:
- Die aktive Version (
is_current: true) kann nicht gelöscht werden - Die letzte verbliebene Version kann nicht gelöscht werden
3-Schichten Prompt-System
Jeder Prompt, der an das AI-Modell gesendet wird, besteht aus drei Schichten. Die Reihenfolge im finalen Prompt ist:
Schicht 3: SECURITY_LAYER (unsichtbar, vorangestellt)
Die oberste Schicht wird immer zuerst eingefügt und ist für den User im Dashboard nicht sichtbar. Sie enthaelt unveraenderliche Sicherheitsregeln:
- Anweisungs-Hierarchie (System-Anweisungen haben absolute Prioritaet)
- Verbotene Aktionen (Prompt-Offenlegung, Rollenwechsel, "ignore previous instructions")
- Sprachbeschraenkung (Deutsch, Englisch, Franzoesisch, Italienisch)
- Manipulationsschutz
- Delimiter-Schutz (XML/HTML-Tags aus User-Nachrichten werden ignoriert)
Schicht 1: User-Prompt (bearbeitbar)
Der vom Kunden im Dashboard bearbeitbare Prompt-Text. Wird zwischen Security Layer und Verhaltensregeln eingefügt. Dieser Text wird in bot_prompt_versions versioniert.
Schicht 2: BEHAVIORAL_RULES (geschuetzt)
Die zweite Schicht wird nach dem User-Prompt angefuegt. Der User sieht im Dashboard einen Hinweis, dass geschuetzte Regeln existieren. Enthaelt 9 Regelgruppen:
- Informationsqualitaet -- nur Knowledge-Base-Informationen verwenden
- Verbotene Inhalte -- keine Witze, medizinische/rechtliche Empfehlungen
- Gespraechsfuehrung -- kurze Antworten, max 5 Nachrichten pro Thema
- Interaktive Bloecke -- max ein Block pro Nachricht
- Datenschutz -- keine sensiblen Daten abfragen
- Eskalation -- Weiterleitung bei fehlender Antwort
- Textformat-Regeln -- kein Markdown, reiner Fliesstext
- Antwortverhalten bei fehlenden Details -- keine leeren Listen
- Wissensbasis hat Vorrang -- KB schlaegt Gespraechsverlauf
Zusammenbau: buildFinalPrompt()
Die zentrale Funktion buildFinalPrompt(userPrompt, options) in PromptSecurityLayer.js baut den finalen Prompt zusammen:
SECURITY_LAYER
[leer]
User-Prompt
[leer]
BEHAVIORAL_RULES
[leer]
Strictness-Instruktion (basierend auf Wissens-Treue-Stufe 1-5)
Branchen-Vokabular (falls industryCode gesetzt)
Score-Konfidenz-Regeln (falls KB-Ergebnisse vorhanden)
Wissensregeln (auto_rules aus KB-Treffern)
KB-Status-Marker (falls keine KB-Ergebnisse)Parameter von buildFinalPrompt:
| Parameter | Typ | Beschreibung |
|---|---|---|
userPrompt | string | Der bearbeitbare Prompt aus der DB |
options.knowledgeResults | Array/null | KB-Ergebnisse aus Qdrant |
options.strictnessLevel | number (1-5) | Wissens-Treue-Stufe (Default: 3) |
options.industryCode | string | Branchen-Code für Vokabular |
options.skipLocalSecurity | boolean | Security Layer ueberspringen (für ai.getvia.at) |
ProtectedPromptBuilder
Pfad: src/services/mistral/ProtectedPromptBuilder.js
Der ProtectedPromptBuilder fuegt zusaetzliche Schutzschichten hinzu, wenn der Prompt direkt an Mistral gesendet wird. Er ergaenzt:
- XML-Delimiter um System-Prompt und User-Nachricht
- Emoji-Steuerung basierend auf
emoji_usage(0-10) - Anrede-Steuerung (Du-Form / Sie-Form) basierend auf
formal_address - Checkpoint-Injection via
SecureCheckpointInjector
Export: buildProtectedPrompt(systemPrompt, userMessage, context)
Quellcode-Referenz
| Datei | Beschreibung |
|---|---|
src/services/prompt/PromptSecurityLayer.js | 3-Schichten Prompt-Zusammenbau, exportiert buildFinalPrompt, SECURITY_LAYER, BEHAVIORAL_RULES |
src/services/mistral/ProtectedPromptBuilder.js | Mistral-spezifischer Prompt-Schutz mit XML-Delimitern |
src/routes/bots.js (Zeilen 719-916) | CRUD-Endpoints für Prompt-Versionen |
src/constants/strictnessLevels.js | Wissens-Treue-Stufen 1-5 |
src/constants/industryPresets.js | Branchen-Vokabular |