Skip to content

Prompt-Versionierung

VIA speichert jede Änderung am Bot-Prompt als Version. Du kannst aeltere Versionen jederzeit wiederherstellen oder vergleichen.

Datenbank-Schema: bot_prompt_versions

SpalteTypNullableDefaultBeschreibung
iduuidNOT NULLgen_random_uuid()Primaerschlüssel
bot_iduuidNOT NULL--Zugehoeriger Bot (FK bots, ON DELETE CASCADE)
tenant_iduuidNOT NULL--Mandanten-ID (FK tenants, ON DELETE CASCADE)
prompt_texttextNOT NULL--Der vollständige Prompt-Text dieser Version
version_namevarchar(100)NULL--Optionaler Name (z.B. "Version 3")
change_notestextNULL--Änderungsnotizen
version_numberintegerNOT NULL1Fortlaufende Versionsnummer pro Bot
is_currentbooleanNULLfalseMarkiert die aktive Version
created_byuuidNULL--Ersteller (FK users)
created_attimestamptzNULLnow()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.

MethodPfadPermissionBeschreibung
GET/api/bots/:id/prompt-versions--Alle Versionen eines Bots laden
POST/api/bots/:id/prompt-versionsbot:editNeue Version speichern
POST/api/bots/:id/prompt-versions/:versionId/restorebot:editVersion wiederherstellen
DELETE/api/bots/:id/prompt-versions/:versionIdbot:editVersion 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:

  1. Informationsqualitaet -- nur Knowledge-Base-Informationen verwenden
  2. Verbotene Inhalte -- keine Witze, medizinische/rechtliche Empfehlungen
  3. Gespraechsfuehrung -- kurze Antworten, max 5 Nachrichten pro Thema
  4. Interaktive Bloecke -- max ein Block pro Nachricht
  5. Datenschutz -- keine sensiblen Daten abfragen
  6. Eskalation -- Weiterleitung bei fehlender Antwort
  7. Textformat-Regeln -- kein Markdown, reiner Fliesstext
  8. Antwortverhalten bei fehlenden Details -- keine leeren Listen
  9. 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:

ParameterTypBeschreibung
userPromptstringDer bearbeitbare Prompt aus der DB
options.knowledgeResultsArray/nullKB-Ergebnisse aus Qdrant
options.strictnessLevelnumber (1-5)Wissens-Treue-Stufe (Default: 3)
options.industryCodestringBranchen-Code für Vokabular
options.skipLocalSecuritybooleanSecurity 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

DateiBeschreibung
src/services/prompt/PromptSecurityLayer.js3-Schichten Prompt-Zusammenbau, exportiert buildFinalPrompt, SECURITY_LAYER, BEHAVIORAL_RULES
src/services/mistral/ProtectedPromptBuilder.jsMistral-spezifischer Prompt-Schutz mit XML-Delimitern
src/routes/bots.js (Zeilen 719-916)CRUD-Endpoints für Prompt-Versionen
src/constants/strictnessLevels.jsWissens-Treue-Stufen 1-5
src/constants/industryPresets.jsBranchen-Vokabular