Ctrl K
ComunidadGuías…

docs/novaberg-node-router_l.md

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# 12_L_a — Lesson: "NIEMALS" ist kein Proxy für "nur wenn erlaubt"

**Projekt:** Novaberg — The Nova Anima Resonance System
**Dokument:** Lesson — Absolute Verbote bei instruktionstreuen Modellen
**Stand:** 12. April 2026, Chat 44 (migriert, Inhalt unverändert)
**Pfad:** novaberg/docs/novaberg-node-router_l.md
**Ursprung:** nova-12-l-a.md
**Typ:** Lesson (L)
**Auslöser:** Router setzte `management_action` nie auf `"agent"` bei Claude-Backend

---

## 1. Das Problem

Nach der Claude API-Integration (Chat 39) erkannte der Router keine Agent-Domänen mehr. "Erinnere mich morgen um 8 Uhr" und "IT-Termin in Frankfurt um 10 Uhr" gingen beide nicht an den TimelineAgent. Der Router gab `management_action = ""` zurück — bei jeder Nachricht, ausnahmslos.

Mit Mistral (lokal) funktionierte dieselbe Konfiguration einwandfrei.

---

## 2. Die Ursache

Der Router-Base-Prompt enthielt im `[REGELN]`-Block:

```
AGENTEN-DELEGATION:
- "management_action", "management_target", "management_target_typ":
  Diese Felder werden AUSSCHLIESSLICH durch die Agentenregeln unten gesteuert.
  Setze sie NIEMALS eigenstaendig.
  Ohne passende Agentenregel: ALLE DREI Felder LEER lassen ("").
```

Darunter folgten die Plugin-Prompts mit Erkennungsregeln:

```
TIMELINE-ERKENNUNG:
Setze management_action = "agent" wenn:
1. Der User einen Termin erstellen, verschieben oder loeschen moechte
...
```

**Mistral** las "NIEMALS eigenständig" und verstand implizit: "...außer wenn die Plugin-Regeln es verlangen." Die Plugin-Regeln waren ja keine "eigenständige" Entscheidung, sondern eine explizite Anweisung.

**Claude** las "NIEMALS eigenständig" als absolutes Verbot. Aus Claudes Perspektive: Wenn ich `management_action = "agent"` setze, setze ich es eigenständig — egal ob eine Plugin-Regel das vorschlägt. "NIEMALS" heißt NIEMALS. Die Plugin-Regeln wurden nicht als Ausnahme erkannt, sondern als widersprüchliche Anweisung, die das Verbot nicht aufheben konnte.

---

## 3. Die Lösung

Drei Änderungen:

### 3.1 Positive Handlungsanweisung statt Universalverbot

**Alt:**
```
Setze sie NIEMALS eigenstaendig.
Ohne passende Agentenregel: ALLE DREI Felder LEER lassen ("").
```

**Neu:**
```
Wenn eine Regel aus dem [AGENTEN]-Block zutrifft, MUSST du die Felder setzen.
Ohne passende Agentenregel: ALLE DREI Felder LEER lassen ("").
```

Der Unterschied ist subtil aber entscheidend: "MUSST wenn Regel zutrifft" ist eine eindeutige positive Anweisung. Kein Modell — egal wie instruktions­treu — kann das als Verbot interpretieren.

### 3.2 Konkrete Beispiele in allen Plugin-Prompts

Abstrakte Regeln allein reichen nicht. Jeder Plugin-Prompt bekam 4–5 konkrete Beispiele:

```
BEISPIELE:
- "Erinnere mich morgen um 8 Uhr ans Meeting" → management_action = "agent"
- "Termin am Freitag um 14 Uhr" → management_action = "agent"
```

Beispiele sind modellunabhängig wirksam — sie zeigen das gewünschte Verhalten statt es zu beschreiben.

### 3.3 Wording-Konsistenz

"Bei management_action = 'agent'" → "Bei Erkennung:" in allen Plugins. Die alte Formulierung verwies auf das Feld, das gesetzt werden sollte — ein Zirkelschluss. Die neue Formulierung ist eine klare Handlungsanweisung.

---

## 4. Die Regel

> **"NIEMALS" ist kein Proxy für "nur wenn erlaubt".**

Bei instruktionstreuen Modellen (Claude, GPT-4) überschreibt ein kategorisches Verbot im Base-Prompt alle nachfolgenden Erlaubnisse in Plugin-Prompts. Das Modell kann nicht wissen, dass "NIEMALS" eigentlich "nur unter bestimmten Bedingungen" bedeutet.

**Prompt-Design-Regel:** Verwende positive Handlungsanweisungen ("MUSST wenn X") statt negative Universalverbote ("NIEMALS Y"). Verstärke durch konkrete Beispiele.

---

## 5. Verwandte Lessons

- **"Base-Prompt schreit lauter als Plugin-Prompt"** (Chat 26, `nova-11-l-b`): Der Base-Prompt mit 20+ konkreten Beispielen überstimmte die abstrakte Plugin-Regel. Lösung: Management-Block entfernen. — Hier war es nicht Lautstärke, sondern Absolutheit.

- **"Strukturierte Kontextualisierung"** (Chat 27, `nova-11-l-b`): Imperative ("Erfinde KEINE Probleme") versagen, wenn das LLM den Kontext falsch einordnet. Beschreiben statt Verbieten. — Verwandtes Prinzip: Positive Anweisung > Negative Anweisung.

- **"Der unsichtbare Default"** (Chat 20, `nova-07-l-c`): "Du bist ein hilfreicher KI-Assistent" aktivierte RLHF-Conditioning. — Zeigt ebenfalls: Modelle nehmen Prompt-Inhalte wörtlicher als Entwickler erwarten.

---

## 6. Modellübergreifende Prompt-Hygiene

| Muster | Risiko | Besser |
|--------|--------|--------|
| "NIEMALS X" | Blockiert auch gewünschte Ausnahmen | "X nur wenn Y" |
| "Setze NICHT eigenständig" | Modell weiß nicht, was "eigenständig" ist | "Setze wenn Regel zutrifft" |
| Abstrakte Regel ohne Beispiel | Modell interpretiert anders als gemeint | Regel + 3–5 Beispiele |
| "Ignoriere wenn nicht relevant" | Erlaubnis zum Überspringen | "Nutze als Grundlage" (Chat 39, GV) |

Diese Muster gelten nicht nur für den Router, sondern für alle Prompt-Stellen, die Modell-übergreifend funktionieren sollen.

---

→ Router (Agenten-Delegation): `nova-01-m-b.md`
→ Base-Prompt-Lesson: `nova-11-l-b.md`
→ Epic 12 Konzept: `nova-12-k.md`