App öffnen
Moonborn — Developers

Brand-Varianten forken

Nimm eine kanonische Marken-Persona, forke sie in formal / casual / locale-spezifische Varianten ohne die Through-Line zu verlieren. Refine, Lineage, Distinctiveness im Durchlauf.

Marken-Teams pflegen typischerweise mehrere Voice-Varianten — einen seriösen B2B-Ton, einen verspielten Social-Ton, eine EN- und eine DE-Version. Handkuratiert sind das sechs Prompts, die synchron bleiben müssen. Forking macht daraus eine einzelne kanonische Persona mit einem nachverfolgten Variantenbaum.

1. Die kanonische Persona bauen

Beginn mit der autoritativsten Stimme — der, von der andere forken. Behandle ihre Soul + Self als „Brand-DNA"; Downstream-Varianten sollten diese Layer bewahren.

const brand = await client.personas.createPersona({
  intent:
    'Markenstimme für Moonborn — Character Consistency Engine. Wissenschaftlich, charakter-zentriert, technisch präzise. Editoriale Zurückhaltung. Mit konkretem Detail führen, Sales-Floskeln meiden.',
  workspaceId: 'ws_...',
});

Audit und Provokationstests laufen automatisch; ziele auf ≥ 4.0/5 im Audit, bevor du forkest. Falls niedriger, refine vor dem Hinzufügen von Varianten.

2. Eine formale Variante forken

POST /v1/personas/{id}/fork kopiert die Persona und schreibt die Parent-Kante. Paare das mit einem refine-Argument, um im selben Call eine Achsen-Transformation anzuwenden:

const formal = await client.personas.fork({
  id: brand.id,
  refine: {
    mode: 'refine',
    layer: 'mask',
    axis: 'more-authoritative',
    amount: 0.4,
  },
  note: 'Sales materials variant',
});

Der Fork hält Soul + Self gelockt (die Brand-DNA) und schreibt nur die Mask neu. Audit läuft erneut gegen die neue Mask; Distinctiveness vergleicht die formale Variante gegen die kanonische (Custom-Baseline), um Drift in Richtung einer generischen Corporate-Stimme zu fangen.

3. Eine Casual-Variante forken

const casual = await client.personas.fork({
  id: brand.id,
  refine: {
    mode: 'refine',
    layer: 'mask',
    axis: 'warmer',
    amount: 0.45,
  },
  note: 'Social media + community variant',
});

4. Eine deutsche Locale-Variante forken

Für Multi-Locale refine die Surface (Sprache + kulturelle Details), während Soul / Self / Mask gelockt bleiben:

const de = await client.personas.fork({
  id: brand.id,
  refine: {
    mode: 'lock',
    lockLayers: ['soul', 'self', 'mask'],
    edits: {
      'surface.language': 'de',
      'surface.location': 'Berlin, Deutschland',
    },
  },
  note: 'DE Locale-Variante',
});

5. Das Varianten-Set auditieren

const lineage = await client.personas.getLineage({ id: brand.id });
console.log(lineage.children.map((c) => c.id));
 
// Driften die Varianten aufeinander zu?
const compare = await client.consistency.compareWithOrgPersonas({
  personaId: formal.id,
  threshold: 0.30,
});
console.log(compare.closest);

Die compareWithOrgPersonas-Query gibt die nächste Persona nach Voice-Fingerprint-Distance zurück. Wenn deine „formale" und „casual"-Varianten gegeneinander < 0.15 scoren, sind sie während des Refine kollabiert — der Achsen-Amount war zu klein, oder die kanonische Mask hat schon zu viel Variabilität kodiert. Refork mit einem größeren Amount oder refine stattdessen Soul (ein Cascade-Mode-Edit).

6. Deploy

Jede Variante belichtet ihre eigene Persona-ID. Verdrahte jede ID mit dem passenden Kanal:

  • formal.id → deine Sales-E-Mail-Automatisierung.
  • casual.id → dein Social-Inbox.
  • de.id → dein deutschsprachiger Support-Agent.

Über den OpenAI-kompatiblen Endpoint ist die Varianten-ID das model-Feld:

import OpenAI from 'openai';
const oai = new OpenAI({
  apiKey: process.env.MOONBORN_API_KEY,
  baseURL: 'https://api.moonborn.co/v1/openai',
});
const reply = await oai.chat.completions.create({
  model: `persona://${formal.id}`,
  messages: [{ role: 'user', content: 'Erzähl mir von Moonborn.' }],
});

Weiter