Ctrl K
ComunidadGuías…

docs/novaberg-node-responder_l.md

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

Archivo original ↗Preguntar a KiBot
# 07_L_c — Lesson: Der unsichtbare Default

**Projekt:** Novaberg — The Nova Anima Resonance System
**Dokument:** Lesson — System-Prompt-Override durch API-Default
**Stand:** 12. April 2026, Chat 44 (migriert, Inhalt unverändert)
**Pfad:** novaberg/docs/novaberg-node-responder_l.md
**Ursprung:** nova-07-l-c.md
**Typ:** Lesson (L)
**Entdeckt:** Chat 20 (Sarkasmus-Charakter-Test)
**Betrifft:** `api/models.py`, `api/chat.py`, `graph/human_graph.py`, Responder-Verhalten

---

## 1. Symptom

Novas Charakter-Hash wurde korrekt geladen, korrekt in den State geschrieben und korrekt in den Responder-Prompt injiziert — aber das Modell ignorierte ihn vollständig. Nova antwortete immer höflich, floskelhaft, unterwürfig. Ein manuell gesetzter Sarkasmus-Hash ("frech, direkt, trockener Humor") hatte null Effekt auf die Antworten.

---

## 2. Ursache: Drei System-Prompts, einer gewinnt

Der System-Prompt existierte an drei Stellen mit drei verschiedenen Texten:

| Datei | Text | Erreichbar? |
|-------|------|-------------|
| `api/models.py` | "Du bist ein hilfreicher KI-Assistent." | ✅ **Immer aktiv** |
| `graph/human_graph.py` | "Du bist Nova, warmherzig, neugierig..." | ❌ Nie erreicht |
| `graph/builder.py` | "Du bist Nova, vertraute Assistentin..." | ❌ Deprecated |

Der Datenfluss:

```
Client sendet Request → kein system-Feld
    → models.py Default greift: "Du bist ein hilfreicher KI-Assistent."
    → chat.py Zeile 132: system_prompt = anfrage.system  (IMMER explizit)
    → create_state(system_prompt="Du bist ein hilfreicher KI-Assistent.")
    → Der gute Default in create_state() wird nie erreicht
```

Python-Defaults greifen nur wenn ein Parameter *weggelassen* wird. Ein explizit übergebener Wert — auch ein schlechter — zählt als gültig. `chat.py` übergab **immer** `anfrage.system`, deshalb wurde der Default in `create_state()` seit Chat 7 nie ausgeführt.

---

## 3. Warum das Modell den Hash ignorierte

"Du bist ein hilfreicher KI-Assistent." ist das stärkste Conditioning-Pattern für RLHF-trainierte Modelle. Jedes Alignment-Training verstärkt genau dieses Muster: höflich, unterwürfig, service-orientiert. Novas Charakter-Hash ("frech, direkt, sarkastisch") kämpfte gegen die härteste Prägung des Modells an — und verlor.

Der Beweis: Nach dem Fix (minimaler System-Prompt "Du bist Nova. Antworte auf Deutsch.") wirkte derselbe Sarkasmus-Hash sofort:

- Vorher: "Entschuldige bitte. Wie kann ich dich besser unterstützen?"
- Nachher: "Okay, ich versuch's anders. Aber hey, du hast schon Schlimmeres überlebt."

---

## 4. Der Fix

**`api/models.py`:** Default von "Du bist ein hilfreicher KI-Assistent." auf `f"Du bist {ASSISTANT_NAME}. Antworte auf Deutsch."` — minimale Stellenbeschreibung, kein RLHF-Trigger.

**Zusätzlich entdeckt:** Inkonsistente Prompt-Texte in `shadow_delivery.py`, `human_graph.py` und `builder.py` — alle mit verschiedenen Persönlichkeitsbeschreibungen. Bereinigt auf minimalen Prompt. Die Persönlichkeit kommt aus dem Hash, nicht aus dem System-Prompt.

---

## 5. Prinzip

> Das 5-Schichten-Modell: Schicht 4 (System-Prompt) ist das Fundament — "Du bist Nova." Schicht 3 (Charakter-Hash) formt die Persönlichkeit. Wenn beides die Persönlichkeit definiert, sind sie entweder redundant oder widersprüchlich. Beides ist schlecht.

**Der System-Prompt ist eine Stellenbeschreibung, keine Persönlichkeitsbeschreibung.** Was Nova *ist*, lernt sie durch Interaktion. Was sie *tut*, sagt der Prompt.

---

## 6. Lektion für die Zukunft

- **Versteckte Defaults in API-Models sind gefährlich.** Sie greifen stillschweigend, sind im Code nicht sichtbar, und man testet nie dagegen weil man den guten Default an einer anderen Stelle sieht.
- **Datenfluss Ende-zu-Ende verifizieren.** Der System-Prompt stand im Log ("Du bist ein hilfreicher KI-Assistent.Prompt final:...") — aber niemand hat den ersten Block geprüft, weil der gute Prompt in `create_state()` die Annahme war.
- **RLHF-Conditioning ist real.** Ein einziger Satz ("hilfreicher KI-Assistent") kann alle nachfolgenden Charakter-Anweisungen überschreiben. Der System-Prompt muss neutral sein, wenn der Charakter aus einer anderen Quelle kommen soll.

---

→ Profil-Pipeline: `04_T_b`
→ Responder (Nova-Identität): `01_M_e`
→ 5-Schichten-Modell: `04_T_b`, Abschnitt 6