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

LanguageModel.create()

Methode

Erzeugt asynchron eine neue <code>LanguageModel</code>-Sitzung der Prompt API und lädt bei Bedarf das eingebaute Sprachmodell (z. B. Gemini Nano) herunter.

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

Signatur

LanguageModel.create(options)

Beschreibung

Die statische Methode LanguageModel.create() ist der Einstiegspunkt der Prompt API, über die Webseiten und Browser-Erweiterungen ein lokal im Browser laufendes Sprachmodell nutzen können. Sie gibt ein Promise zurück, das mit einer Sitzung (LanguageModel-Instanz) erfüllt wird. Über diese Sitzung stellt man anschließend mit prompt() oder promptStreaming() Anfragen.

Ist das Modell noch nicht auf dem Gerät vorhanden, startet create() automatisch den Download. Den Fortschritt kann man über die Option monitor verfolgen, die ein CreateMonitor-Objekt mit dem Ereignis downloadprogress erhält. Vor dem Aufruf sollte man mit LanguageModel.availability() prüfen, ob das Modell "available", "downloadable", "downloading" oder "unavailable" ist.

Über die Optionen legt man das Verhalten der Sitzung fest:

  • initialPrompts gibt einen Systemprompt und einen Gesprächsverlauf (Few-Shot-Beispiele) vor.
  • temperature und topK steuern, wie zufällig die Antworten ausfallen.
  • expectedInputs und expectedOutputs legen Eingabearten (Text, Bild, Audio) und Sprachen fest.
  • signal bricht die Erstellung ab, auch während des Downloads.

Jede Sitzung hat ihr eigenes Kontextfenster (inputQuota). Nicht mehr benötigte Sitzungen sollte man mit destroy() freigeben, weil sie Arbeitsspeicher und oft auch Grafikspeicher belegen.

Parameter

Name Typ Default Beschreibung
$options object {} Konfigurationsobjekt für die neue Sitzung. Alle Eigenschaften sind optional.
$options.initialPrompts Array<{role: "system"|"user"|"assistant", content: string|Array}> Anfangsverlauf der Unterhaltung. Eine system-Nachricht darf nur an erster Stelle stehen.
$options.temperature number Standardwert aus LanguageModel.params() Wie zufällig die Ausgabe ist. Höhere Werte ergeben kreativere Antworten. Wird temperature gesetzt, muss auch topK gesetzt werden (und umgekehrt).
$options.topK number Standardwert aus LanguageModel.params() Anzahl der wahrscheinlichsten Tokens, aus denen bei jedem Schritt ausgewählt wird. Darf maxTopK aus params() nicht überschreiten.
$options.expectedInputs Array<{type: "text"|"image"|"audio", languages?: string[]}> Erwartete Eingabearten und Sprachen (BCP-47-Codes, z. B. "de"). Wird eine Art nicht unterstützt, wird das Promise abgelehnt.
$options.expectedOutputs Array<{type: "text", languages?: string[]}> Erwartete Ausgabeart und Ausgabesprachen.
$options.monitor (monitor: CreateMonitor) => void Callback, der ein CreateMonitor-Objekt erhält. An ihm lässt sich das Ereignis downloadprogress abonnieren; event.loaded liegt zwischen 0 und 1.
$options.signal AbortSignal Signal, mit dem die Erstellung der Sitzung (inklusive Download) abgebrochen werden kann.

Rückgabewert

Typ
Promise<LanguageModel>
Beschreibung
Ein Promise, das mit einer neuen, sofort nutzbaren LanguageModel-Sitzung erfüllt wird. Mögliche Ablehnungsgründe: NotAllowedError (Permissions Policy verbietet den Zugriff oder für den Download fehlt eine Nutzeraktion), NotSupportedError (Optionen wie Sprache oder Eingabeart werden nicht unterstützt), AbortError (Abbruch über signal), OperationError bzw. QuotaExceededError (die initialen Prompts passen nicht ins Kontextfenster).

Beispiele

Verfügbarkeit prüfen und Sitzung mit Downloadfortschritt erstellen

const button = document.querySelector('#ki-start');
const progress = document.querySelector('progress');

button.addEventListener('click', async () => {
  if (!('LanguageModel' in self)) {
    console.log('Prompt API wird nicht unterstützt');
    return;
  }

  const status = await LanguageModel.availability();
  if (status === 'unavailable') {
    console.log('Modell auf diesem Gerät nicht verfügbar');
    return;
  }

  // Der Aufruf im Klick-Handler liefert die für den Download nötige Nutzeraktion
  const session = await LanguageModel.create({
    monitor(m) {
      m.addEventListener('downloadprogress', (e) => {
        progress.value = e.loaded; // Wert zwischen 0 und 1
        console.log(`Download: ${Math.round(e.loaded * 100)} %`);
      });
    },
  });

  const antwort = await session.prompt('Nenne drei Hauptstädte in Europa.');
  console.log(antwort);
});
Download: 0 % … Download: 100 % Berlin, Paris und Madrid.

Systemprompt, Few-Shot-Beispiele und deutsche Sprache festlegen

const session = await LanguageModel.create({
  initialPrompts: [
    { role: 'system', content: 'Du klassifizierst Kundenfeedback als positiv, neutral oder negativ. Antworte nur mit einem Wort.' },
    { role: 'user', content: 'Die Lieferung kam super schnell!' },
    { role: 'assistant', content: 'positiv' },
  ],
  expectedInputs: [{ type: 'text', languages: ['de'] }],
  expectedOutputs: [{ type: 'text', languages: ['de'] }],
});

const ergebnis = await session.prompt('Das Paket war beschädigt und der Support antwortet nicht.');
console.log(ergebnis);
console.log(`Kontext belegt: ${session.inputUsage} / ${session.inputQuota}`);

session.destroy(); // Ressourcen freigeben
negativ Kontext belegt: 112 / 6144

Eigene Temperatur und topK, Abbruch per AbortController

const params = await LanguageModel.params();
const controller = new AbortController();
document.querySelector('#abbrechen').onclick = () => controller.abort();

try {
  const session = await LanguageModel.create({
    temperature: Math.min(params.defaultTemperature * 1.5, params.maxTemperature),
    topK: params.defaultTopK,
    signal: controller.signal,
  });

  for await (const teil of session.promptStreaming('Schreibe ein kurzes Gedicht über den Herbst.')) {
    document.querySelector('#ausgabe').append(teil);
  }
} catch (err) {
  if (err.name === 'AbortError') {
    console.log('Erstellung vom Nutzer abgebrochen');
  } else {
    console.error(err.name, err.message);
  }
}
Erstellung vom Nutzer abgebrochen (falls abgebrochen wurde)