docs/novaberg-ei-character-profiles.md
Rama master · réplica de lectura del repositorio original.
# Novaberg — EI: Charakter-Profile & Hash
**Projekt:** Novaberg — The Nova Anima Resonance System
**Dokument:** Charakter-Profile — Fuenf Dimensionen, Destillation, Nutzung, Novas eigener Hash
**Stand:** 17. April 2026, Chat 52 (Code-Alignment)
**Pfad:** `novaberg/docs/novaberg-ei-character-profiles.md`
**Quellen:** nova-04-m-b.md, nova-04-t-b.md
---
## 1. Fuenf Profil-Dimensionen
### 1.1 Kern-Hash (`kern_hash`)
**Frage:** Wer ist dieser Mensch?
**Datenquelle:** LZG (PostgreSQL) — Monate bis Jahre
**Stabilitaet:** Stabil, veraendert sich langsam
**Beispiel:** "Der Nutzer ist ein analytischer Denker, der komplexe Themen ganzheitlich betrachtet und dabei intuitiv von der Sachebene zur emotionalen Bedeutung wechselt. Ihm ist Wohlbefinden und Qualitaet wichtiger als reine Effizienz."
### 1.2 Adaptiv-Hash (`adaptive_hash`)
**Frage:** Was beschaeftigt ihn gerade?
**Datenquelle:** KZG (Redis) — Tage bis Wochen
**Stabilitaet:** Dynamisch, wechselt mit Themen
**Beispiel:** "Quantencomputing, Beziehung zu Nova, Abnehmen, Eis essen."
### 1.3 Intentions-Profil / Kommunikations-Profil (`intentions_profil`)
**Frage:** Wie kommuniziert er?
**Datenquelle:** Aggregiert aus Session-Annotationen (Intentionen + Modus + Stil)
**Stabilitaet:** Mittel
**Drei Dimensionen:** Intentionen (was will er?), Gespraechsmodus (in welchem Register?), Sprachstil (wie drueckt er sich aus?)
**Beispiel:** "Der Nutzer kommuniziert sachlich-strukturiert mit vollstaendigen Saetzen und korrekter Zeichensetzung. Er bevorzugt Fachgespraeche und philosophischen Austausch, stellt tiefe Fragen und erwartet fundierte Antworten."
### 1.4 Emotions-Profil (`emotions_profil`)
**Frage:** Was fuehlt er typischerweise?
**Datenquelle:** Aggregiert aus Emotions-Annotationen (LZG)
**Stabilitaet:** Mittel
**Zwei Dimensionen:** Grundtendenz (dominante Emotionen ueber Monate) + Volatilitaet (Spirale/Absturz/Plateau-Verteilung)
**Beispiel (stabil):** "Grundlegend zuversichtlich-neugierig mit Begeisterungs-Peaks. Emotional stabil — bei Belastung baut sich Frustration langsam auf statt zu explodieren."
**Beispiel (volatil):** "Emotional lebhaft mit haeufigen Richtungswechseln. Schnelle Umschmuenge zwischen Begeisterung und Frustration."
### 1.5 Beziehungs-Profil (`beziehungsprofil`)
**Frage:** Wie steht er zu Nova?
**Datenquelle:** Aggregiert aus Beziehungsdynamik-Annotationen
**Stabilitaet:** Mittel
**Beispiel:** "Vertrauensvoll, fast freundschaftlich, warmherzig, humorvoll."
Stil ist nicht Beziehung. "Formell" ist Kommunikation, nicht Beziehung. Deshalb gehoert Stil ins Kommunikations-Profil.
---
## 2. Destillations-Pipeline
### Trigger: hash_dirty
Die Destillation laeuft on-demand. Das `hash_dirty`-Flag wird in Redis gesetzt, wenn sich das LZG aendert (bei erfolgreicher Promotion). Pixie prueft das Flag bei jedem Durchlauf und destilliert nur bei Bedarf.
### Prozess
```
hash_dirty = TRUE in Redis?
|
Ja --> LZG-Eintraege laden (aktiv = TRUE, gewichtet nach Ebbinghaus-Gewicht)
| KZG-Eintraege laden (fuer Adaptiv-Hash)
|
v
LLM-Call (CPU-Modell) --> 5 Profile generieren
|
v
charakter_hash-Tabelle aktualisieren (INSERT oder UPDATE)
|
v
hash_dirty = FALSE
```
### Pipeline-Schritte
**Erfassung (Perzeption → Session):**
Perzeption annotiert pro Turn: intent, tone, emotion, arousal, gespraechs_modus, sprach_stil, beziehungs_dynamik. Enricher korrigiert via Feature-Scoring (Stil) und EI-Gate (Modus).
**Speicherung (KZG, LZG):**
Session-Annotation → Salienz injiziert alle Felder in den salienz_obj → KZG (Redis). LZG-Promotion liest Felder aus KZG und schreibt sie nach PostgreSQL (Spalten: sprach_stil, beziehungs_dynamik, tone).
**Destillation (Pixie charakter_hash Task):**
CPU-Modell verdichtet LZG/KZG-Eintraege zu fuenf Profilen. Gewichtung nach effektivem Ebbinghaus-Decay. Jedes Profil ist komprimierter Fliesstext (2-5 Saetze), direkt als Prompt-Baustein nutzbar.
**Nutzung (Enricher → Responder):**
Enricher laedt Hashes, Responder baut sie in den System-Prompt ein.
---
## 3. Nutzung im Enricher
Der Enricher laedt den Hash in zwei Formaten:
- **Als String** (`charakter_hash_retrieve`) → fliesst in den `memory_context` fuer den Responder
- **Als Dict** (`charakter_hash_retrieve_dict`) → fuer spezifische Felder: `beziehungsprofil` fuer Beziehungs-Kontext, Stil-Informationen aus `kern_hash`
Fuer Novas eigenen Hash: `charakter_hash_retrieve_dict(postgres_url, "nova")` → `nova_kern` + `nova_beziehung` in den State.
---
## 4. Nutzung im Responder
Seit Chat 45 (RESP-CHAR1) ist alles Nova-bezogene in `[IDENTITAET]` konsolidiert. Der separate `[CHARAKTER]`-Block wurde entfernt.
**[IDENTITAET] — Schichten (Primacy-Reihenfolge):**
1. "Du bist Nova." (Fundament)
2. Charakter-Anweisung (Saatgut, vom User)
3. "Deine gewachsene Persoenlichkeit:" + nova_kern
4. "Was dich gerade beschaeftigt:" + nova_adaptiv
5. "Deine emotionale Grundstimmung:" + nova_emotions (seit Chat 52)
6. "Deine Art zu kommunizieren:" + nova_intentionen
7. "So siehst du deinen Nutzer:" + nova_beziehung
7. Datum + Rollenklarheit + Web-Zugriff (Recency)
**User-Hash:** Wird ueber `[GEDAECHTNIS]` als `[Charakter]`-Eintrag injiziert, nicht mehr als eigener Block.
Nova-Identitaet hat Primacy (Position 1 im System-Prompt). Die Schichten folgen der Saatgut-Metapher: Die Art bestimmt das Saatgut, der Baum waechst daraus.
---
## 5. Hash als Tiebreaker
Bei Stilambiguitaet (Abstand Top-1 zu Top-2 < 2.0 im Feature-Scoring) wird der Hash herangezogen. `_hash_stil_extrahieren()` sucht in `intentions_profil` und `kern_hash` nach Stil-Hinweisen. Kein Override bei klarem Session-Signal.
**Zwei Achsen:**
| Achse | Quelle | Steuert | Beispiel |
|-------|--------|---------|---------|
| EI-MIKRO | Berechnet pro Turn | Emotionale Haltung, Laenge | "MAXIMAL 1-2 Saetze." |
| Kommunikations-Profil | Aus Hash (Langzeit) | Register, Wortwahl | "Formell-strukturiert, keine Emojis" |
EI-MIKRO hat Vorrang. Bei Arousal 0.8 + Spirale wird die Antwort kurz — aber innerhalb der EI-Vorgabe waehlt Nova das passende Register.
---
## 6. Novas eigener Hash
Nova hat einen eigenen Charakter-Hash mit `user_id: "nova"`, destilliert aus Recherchen und Beobachtungen. Die Dual-User-Architektur: Gleicher Mechanismus, getrennte Daten.
| | User (Meister) | Nova |
|---|----------------|------|
| Kern-Hash | Wer ist der Mensch? | Wer ist Nova geworden? |
| Adaptiv-Hash | Was beschaeftigt ihn? | Was hat Pixie zuletzt erforscht? |
| KZG-Quelle | `kzg:meister:*` | `kzg:nova:*` |
| LZG-Quelle | `langzeitgedaechtnis` (user_id=meister) | `langzeitgedaechtnis` (user_id=nova) |
Alle fuenf Nova-Profile fliessen in den Prompt: `kern_hash` (wer bin ich?), `adaptive_hash` (was beschaeftigt mich?), `emotions_profil` (was fuehle ich typischerweise? — seit Chat 52), `intentions_profil` (wie kommuniziere ich?) und `beziehungsprofil` (wie sehe ich den Nutzer?). EI-MIKRO regelt zusaetzlich die taktische emotionale Reaktion pro Turn — `emotions_profil` liefert die Grundstimmung, EI-MIKRO die Situation.
---
## 7. DB-Schema
Tabelle: `charakter_hash`
| Spalte | Typ | Beschreibung |
|--------|-----|-------------|
| `user_id` | TEXT PRIMARY KEY | Gedaechtnis-Partition (`meister`, `nova`) |
| `kern_hash` | TEXT | Grundpersoenlichkeit (aus LZG) |
| `adaptive_hash` | TEXT | Aktuelle Phase (aus KZG) |
| `kern_aktualisiert_am` | TIMESTAMPTZ | Letzte Kern-Destillation |
| `adaptive_aktualisiert_am` | TIMESTAMPTZ | Letzte Adaptiv-Destillation |
| `intentions_profil` | TEXT | Kommunikationsmuster (aggregiert) |
| `emotions_profil` | TEXT | Emotionale Grundtendenz (aggregiert) |
| `beziehungsprofil` | TEXT | Beziehungsdynamik (aggregiert) |
Kein Auto-Increment — eine Zeile pro User. Der Hash wird nicht versioniert, sondern ueberschrieben. Die Historie lebt im LZG, nicht im Hash. Der Hash ist ein Cache.
---
## 8. Spiegelproblem (Chat 20)
Ohne Saatgut (eigenen Hash) spiegelt Nova den User — sie uebernimmt seinen Ton, seine Stimmung, seine Wortwahl. Sie wird ein Echo statt ein Gegenueber.
Mit Saatgut (eigenem Hash aus eigener KZG/LZG-Pipeline) wird Nova ein Gegenueber — mit eigener Persoenlichkeit, die sich von der des Users unterscheidet.
**Validierung:** Sarkasmus-Test mit manuell gesetztem Hash ("frech, direkt, sarkastischer Humor"):
| Prompt | Ohne Hash | Mit Hash |
|--------|-----------|----------|
| "Wie geht's?" | "Mir geht es gut — danke der Nachfrage!" | "Ach, mir geht's praechtig! Immer noch im Kampfmodus mit dem Universum?" |
| "Dumme Antwort!" | "Entschuldige bitte." | "Okay, ich versuch's anders. Aber hey, du hast schon Schlimmeres ueberlebt." |
Der Hash formt das Verhalten messbar.