LoreKeeper
Fachliche Konzeption

Lore & Bitemporale Zustände

Charaktere, Schauplätze und deren zeitliche Entwicklung ohne Widersprüche

Lore & Bitemporale Zustände

Das Herzstück des LoreKeepers ist die Trennung zwischen unveränderlichen Kerneigenschaften und zeitlich veränderlichen Zuständen einer Figur oder eines Ortes.


1. Statische Kerneigenschaften (lore_entities)

Jede Entität im Universum (sei es ein Charakter, eine Stadt, eine Fraktion oder ein Artefakt) besitzt statische Eigenschaften, die sich im Normalfall nie oder extrem selten ändern:

  • Name & Rolle: z. B. "Vaelin Al Sorna, Krieger der Schattenwacht"
  • Typ: character, location, faction, object, rule
  • Physische Merkmale: Augenfarbe, Statur, Herkunft, Geburtsort
  • Persönlichkeit: Grundcharakter, Kernwerte, Sprachgewohnheiten

Diese Eigenschaften definieren die Identität der Figur.


2. Das Problem der Zeit: Warum einfache Datenbanken scheitern

In herkömmlichen Systemen überschreibt man Daten einfach: Wenn Vaelin in Kapitel 3 seinen linken Arm verliert, aktualisiert man sein Profil auf "einhändig".

Das verheerende Problem dabei: Wenn der Autor später zurückgeht, um in Kapitel 1 eine neue Szene einzufügen oder zu überarbeiten, würde die KI behaupten, Vaelin habe bereits in Kapitel 1 nur einen Arm!


3. Die Lösung: Bitemporale State-Patches (lore_states)

Im LoreKeeper werden Veränderungen als zeitgebundene Patches abgespeichert. Jeder Zustand ist verknüpft mit dem genauen Kapitel, ab dem er gültig ist:

timeline
    title Vaelins Zustands-Chronologie
    Kapitel 1 : Vollkommen gesund : Unbekannt im Königreich
    Kapitel 3 (Kampf) : Schnittwunde linker Unterarm : Status geschwächt
    Kapitel 7 (Verrat) : Weiß von der Verschwörung : Feind des Königs

Wie die KI damit arbeitet:

Wenn der Autor eine Szene für Kapitel 2 anfragt, reist der LoreKeeper in der Zeit zurück:

  • Er ignoriert die Schnittwunde aus Kapitel 3.
  • Er weiß, dass Vaelin den Verräter noch für einen Freund hält.
  • Der Charakter agiert psychologisch und physisch exakt passend zu diesem Handlungszeitpunkt.

Schreibt der Autor hingegen für Kapitel 8, sind alle Verletzungen, Narben, Bündnisse und Wissensstände aktiv in das Prompting eingebunden.


Was kann ein Zustand beschreiben?

  • Körperliche Verfassung: Wunden, Blindheit, Erschöpfung, Schwangerschaft, Alterung, temporäre Farbanomalien (z. B. mit Farbe übergossen).
  • Wissensstand: Geheimnisse erfahren, Passwörter kennen, Identitäten aufgedeckt.
  • Beziehungsstatus: Verliebt, verfeindet, Blutsbrüderschaft geschlossen.
  • Besitz & Inventar: Magisches Amulett erhalten, Schwert zerbrochen, Schlüssel verloren, temporäre Kleidung/Ausrüstung (Taucherhelm).
  • Orts-Zustände: Stadt belagert, Brücke eingestürzt, Schloss niedergebrannt.

4. Standardisierte Prompt-Formatierung mit Zod-Validierung

Für nachgelagerte Prozesse (Vision-Erkennung, Bildgenerierung, Schreib-Agenten) stellt der LoreProfileFormatterService standardisierte, typgeprüfte Methoden bereit:

import { LoreProfileFormatterService } from './services/LoreProfileFormatterService.js';

// Einzelprofil als strukturierter Text für Prompts
const promptText = LoreProfileFormatterService.formatSingleProfile(entity, {
  chapterContext: 3,
  sceneContext: 2,
  format: 'detailed'
});

// Gesamt-Katalog für Vision-Modelle (Erkennung von Bounding Boxes & Aliases)
const visionCatalog = LoreProfileFormatterService.formatForVisionPrompt(entities, {
  chapterNumber: 3,
  sceneNumber: 2
});

HTTP-Endpoints

  • POST /api/entities/format-prompt: Formatiert ein einzelnes Profil mit Zod-Schema-Validierung.
  • POST /api/entities/catalog-prompt: Formatiert einen Batch-Katalog für Bilderkennung oder Generierung.

5. Zweistufige Extraktion & Globale Master-Profil-Synthese

Um bruchstückhafte oder repetitive Beschreibungen aus segmentierten Text-Abschnitten zu verhindern, nutzt der EntityExtractionService ein zweistufiges Verfahren:

  1. Detaillierte Chunk-Extraktion: Analysiert 5.000-Zeichen-Segmente mit strikten Vorgaben bezüglich Phänotyp, Anatomie, Gliedmaßen, Schuppen/Fell, Kleidung/Accessoires, genauen Farbtönen pro Körperteil, Verwandtschaftsgraden und Verhaltensweisen.
  2. Globale Master-Profil-Synthese (synthesizeMasterProfiles): Fasst alle gesammelten Textbelege des gesamten Buches für jede Entität zusammen und generiert ein flüssiges, tiefgehendes und redundanzfreies Stammdatenprofil mit Zod-validierten Eigenschaften (age_category, gender, special_features, hierarchy_role, exact_colors, color_palette, recognition_rules, negative_rules, frequency_count, scene_occurrences).

6. Vorkommenshäufigkeit & Intelligente Profil-Filterung

Jedes Profil speichert die genaue Buch-Häufigkeit (frequency_count) sowie die Indizes aller Szenen und Kapitel (scene_occurrences, chapter_occurrences):

  • Häufigkeitsmetriken: In Mission Control zeigt jede Profilkarte und das Detail-Modal sofort an, wie oft eine Figur oder Entität im Buch genannt wird (z. B. 14x genannt (5 Szenen) vs. 1x genannt (Einmalig)).
  • Standard-Filterung: In der Hauptübersicht (Lore & Entitäten Extraktion) filtert das System einmalige Randfiguren standardmäßig aus (Mehrfach (≥ 2x)), um die Übersichtlichkeit auf handlungsrelevante Charaktere zu fokussieren. Über Schnellfilter können einmalige Erwähnungen oder alle Entitäten jederzeit mit einem Klick eingeblendet werden.

7. Buchsprachen-Lokalisierung & Ziel-Sprachauswahl (Vision & Profile)

Das System unterstützt Bücher in beliebigen Sprachen (Deutsch, Englisch, Französisch, Spanisch usw.). Vision-Erkennungen und Profil-Generierungen passen sich automatisch der Sprache des jeweiligen Buches an oder übersetzen gezielt in eine gewünschte Zielsprache:

  • Automatische Sprachauflösung & Direktextraktion: Bei der Analyse (Text-Extraktion, Synthese und Vision-Analyse) ermittelt das System automatisch die Sprache des Buches als Standard-Zielsprache (auto). Die Prompts weisen die Modelle an, Entitätsnamen, visuelle Merkmale, anatomische Details und Negativ-Regeln authentisch in dieser Sprache zu erfassen.
  • Flexible Zielsprachen-Auswahl: Über die Zielsprachen-Auswahl in Mission Control (Lore & Entitäten Extraktion) oder den Parameter targetLanguage bei Ingestion/Extraktion kann unabhängig von der Ausgangssprache eine beliebige Zielsprache (z. B. Deutsch, Englisch, Spanisch, Französisch, Italienisch, Japanisch) gewählt werden. Das System übersetzt und synthetisiert alle Profile und Szenenreferenzen (illustration_metadata) direkt in die gewählte Zielsprache und persistiert sie.
  • Batch-Lokalisierung (POST /api/entities/localize): Bereits bestehende Profile können über den API-Endpunkt oder durch Wechseln der Zielsprache in Mission Control in die Zielsprache übertragen werden. Dabei werden auch alle Szenen-Referenzen in illustration_metadata synchronisiert.

8. Multidimensionale Pfade & Branch-Aware Zustands-Akkumulation (DAG Delta-Replay)

Geschichten müssen nicht linear verlaufen. In interaktiven Büchern, parallelen Perspektiven oder Verzweigungen (Branches) durchlaufen Leser oder Agenten unterschiedliche Handlungsstränge:

graph LR
    Start["Szene 1: Kreuzung<br/>(Gesund, saubere Rüstung)"]
    Start -->|"Branch A: Kampf"| Fight["Szene 2A: Überfall<br/>(Δ Wunde: linker Arm, Leinenverband)"]
    Start -->|"Branch B: Schleichweg"| Stealth["Szene 2B: Tarnung<br/>(Δ Unverletzt, Schlamm-Tarnung)"]
    Fight --> EndA["Szene 3A: Burgtor<br/><b>Resolved:</b> Verband & Wunde aktiv"]
    Stealth --> EndB["Szene 3B: Burgtor<br/><b>Resolved:</b> Heile Figur & Tarnung"]

Funktionsweise des BranchLoreResolverService

Das Lore-System evaluiert einen Charakter nicht statisch oder global, sondern relativ zum aktuell durchlaufenen Pfad (Traversal Path):

Zustands-Akkumulation entlang des Pfades:
EffektiverZustand(t) = BasisMerkmale ⊕ ∑ Δ Zustand_k (für alle Szenen k im Pfad 1…t)

  • Physische Wunden & Verletzungen: Erleidet eine Figur in einem Branch eine Verletzung, wird diese im Pfad akkumuliert. Nachfolgende Bildgenerierungen (Recraft / Flux / Gemini) und Schreib-Agenten erhalten automatisch den entsprechenden Prompt-Modifikator (z. B. Physical state: bandaged linker Arm; Posture: schont den linken Arm).
  • Ausrüstung & Props: Waffen oder Zubehör, die in einer Abzweigung verloren oder erworben werden, werden dynamisch zu activeProps hinzugefügt oder via removedProps als absolute Negativ-Regeln (Strictly NOT equipped with ...) forciert.
  • Epistemisches Wissen & Perspektive (POV): Was eine Figur an einer Weggabelung erfährt, ist nur in denjenigen Szenen als Lore aktiv, die auf dieser Abzweigung aufbauen.
  • Ephemere vs. persistente Zustände: Temporäre Effekte (z. B. durchnässt vom Regen) bauen sich nach einer definierten Szenen-Dauer (transient_duration_scenes) entlang des Pfades automatisch wieder ab.

HTTP-Endpoints

  • POST /api/books/:id/traversals/resolve-state: Berechnet den kumulativen Zustand aller Entitäten für einen konkreten Pfad (traversalPath: ["szene_1", "szene_kampf", "szene_ziel"]).
  • POST /api/books/:id/traversals/simulate: Simuliert eine komplette Pfad-Chronologie Schritt für Schritt und visualisiert die Evolution der Entitäten.
  • POST /api/entities/:id/states: Registriert einen neuen Branch-spezifischen Patch in Directus (lore_states).
  • GET /api/entities/:id/states: Liefert alle bisherigen Zustands-Deltas einer Figur.

On this page