Start · Sprachen · JavaScript · Referenz · LanguageModel.clone()

LanguageModel.clone()

Methode

Erstellt eine unabhängige Kopie einer <code>LanguageModel</code>-Sitzung samt vollständigem Kontextfenster (bisherige Prompts, Antworten, Konfiguration).

seit JavaScript Experimentell: Chrome 138+ (Erweiterungen), Origin Kategorie: webapi

Signatur

LanguageModel.prototype.clone(options)

Beschreibung

Die Methode clone() gehört zur Prompt API (eingebaute KI im Browser). Sie gibt ein Promise zurück, das mit einer neuen LanguageModel-Sitzung erfüllt wird. Die neue Sitzung übernimmt den gesamten Zustand der Ausgangssitzung: Systemprompt und initialPrompts, alle bisher ausgetauschten Nachrichten sowie Parameter wie temperature und topK.

Nach dem Klonen sind beide Sitzungen voneinander unabhängig. Prompts an den Klon ändern das Kontextfenster des Originals nicht und umgekehrt. Deshalb eignet sich clone() gut für:

  • Verzweigte Gespräche: Von einem gemeinsamen Stand aus mehrere Varianten ausprobieren, etwa „Was wäre, wenn der Nutzer anders antwortet?“.
  • Wiederverwendbare Vorlagen: Eine aufwendig vorbereitete Basissitzung (langer Systemprompt, Few-Shot-Beispiele) einmal anlegen und für jede neue Anfrage klonen, statt den Kontext jedes Mal neu aufzubauen.
  • Parallele Anfragen: Mehrere unabhängige Fragen mit demselben Vorwissen stellen, ohne dass sie sich gegenseitig beeinflussen.

Über einen optionalen AbortSignal lässt sich das Klonen abbrechen. Ist der Klon fertig, braucht er eigene Ressourcen. Nicht mehr benötigte Sitzungen sollte man daher mit destroy() freigeben.

Parameter

Name Typ Default Beschreibung
$options object {} Optionales Konfigurationsobjekt für den Klonvorgang.
$options.signal AbortSignal Signal, mit dem sich das Klonen abbrechen lässt. Beim Abbruch wird das Promise mit einem AbortError (DOMException) zurückgewiesen.

Rückgabewert

Typ
Promise<LanguageModel>
Beschreibung
Ein Promise, das mit einer neuen, unabhängigen LanguageModel-Sitzung erfüllt wird. Diese hat dasselbe Kontextfenster und dieselbe Konfiguration wie das Original.

Beispiele

Basissitzung einmal vorbereiten und pro Anfrage klonen

// Basissitzung mit Systemprompt und Few-Shot-Beispielen
const base = await LanguageModel.create({
  initialPrompts: [
    { role: 'system', content: 'Du klassifizierst Kundenfeedback als positiv, neutral oder negativ. Antworte nur mit einem Wort.' },
    { role: 'user', content: 'Super Service, gerne wieder!' },
    { role: 'assistant', content: 'positiv' }
  ]
});

const classify = async (text) => {
  const session = await base.clone(); // frischer Klon, Basis bleibt unverändert
  try {
    return (await session.prompt(text)).trim();
  } finally {
    session.destroy(); // Ressourcen freigeben
  }
};

console.log(await classify('Lieferung kam zwei Wochen zu spät.'));
console.log(await classify('Ganz okay, nichts Besonderes.'));
negativ neutral

Gespräch verzweigen und Varianten vergleichen

const session = await LanguageModel.create({
  initialPrompts: [{ role: 'system', content: 'Du bist ein hilfreicher Reiseberater.' }]
});

await session.prompt('Ich plane eine Woche Urlaub im Mai in Europa.');

// Ab hier zwei unabhängige Zweige
const branchA = await session.clone();
const branchB = await session.clone();

const [a, b] = await Promise.all([
  branchA.prompt('Ich mag Strände. Was empfiehlst du?'),
  branchB.prompt('Ich mag Berge und Wandern. Was empfiehlst du?')
]);

console.log('Strand:', a);
console.log('Berge:', b);

// Das Original kennt keine der beiden Folgefragen
branchA.destroy();
branchB.destroy();
Strand: … (z. B. Algarve, Kreta) Berge: … (z. B. Dolomiten, Madeira)

Klonen mit Zeitlimit abbrechen

const session = await LanguageModel.create();

try {
  const copy = await session.clone({ signal: AbortSignal.timeout(2000) });
  console.log('Klon bereit, Tokens im Kontext:', copy.inputUsage);
} catch (err) {
  if (err.name === 'AbortError' || err.name === 'TimeoutError') {
    console.warn('Klonen abgebrochen:', err.name);
  } else {
    throw err;
  }
}
Klon bereit, Tokens im Kontext: 0

// Wichtig · Fallstricke

  • Experimentell: Die Prompt API ist nicht standardisiert und derzeit nur in Chrome verfügbar (Erweiterungen ab Chrome 138, für Webseiten per Origin Trial bzw. Flag). Vorher mit 'LanguageModel' in self und LanguageModel.availability() prüfen. Die API-Form hat sich schon mehrfach geändert (früher ai.languageModel).
  • Ressourcen: Jeder Klon belegt eigenen Speicher und ein eigenes Kontextfenster. Viele offene Klone können das Gerät spürbar belasten. Sitzungen deshalb mit destroy() schließen.
  • Zerstörte Sitzung: Ruft man clone() auf einer Sitzung auf, die bereits mit destroy() beendet wurde oder deren signal abgebrochen ist, wird das Promise zurückgewiesen (InvalidStateError bzw. AbortError).
  • Kontextgrenze: Der Klon übernimmt den Füllstand (inputUsage) des Originals. Ist das Original fast voll, ist es der Klon auch. Beim Überlauf werden ältere Nachrichten verworfen (Ereignis quotaoverflow).
  • Laufende Anfragen an das Original (z. B. ein noch nicht fertiger promptStreaming()-Aufruf) solltest du vor dem Klonen abwarten, damit der Kontextzustand eindeutig ist.