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

LanguageModel.prompt()

Methode

Sendet eine Eingabe an das im Browser integrierte Sprachmodell und liefert ein Promise, das mit der vollständigen Antwort als Zeichenkette erfüllt wird.

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

Signatur

LanguageModel.prototype.prompt(input, options)

Beschreibung

Die Methode prompt() gehört zur Prompt API und wird auf einer Sitzung aufgerufen, die du vorher mit LanguageModel.create() erzeugt hast. Sie schickt Text oder eine Liste von Nachrichten an das lokal im Browser laufende Sprachmodell (in Chrome z. B. Gemini Nano) und wartet, bis das Modell fertig ist. Erst dann wird das Promise mit der ganzen Antwort erfüllt.

Eine Sitzung merkt sich den Gesprächsverlauf. Jeder Aufruf von prompt() hängt Eingabe und Antwort an den Kontext an, sodass Folgefragen sich auf frühere Antworten beziehen können. Der Kontext ist durch session.inputQuota begrenzt; wie viel schon belegt ist, zeigt session.inputUsage.

Nimm prompt(), wenn du die Antwort komplett brauchst, bevor du weitermachst, etwa bei Einordnung, Zusammenfassung oder strukturiertem JSON über responseConstraint. Bei langen Texten, die der Nutzer schon während der Erzeugung sehen soll, ist promptStreaming() besser geeignet.

Die Eingabe kann ein einfacher String sein oder ein Array von Nachrichten der Form { role, content } mit den Rollen "user", "assistant" oder "system". Bei multimodalen Sitzungen, also mit expectedInputs in create(), darf content auch Bilder oder Audio enthalten.

Parameter

Name Typ Default Beschreibung
$input Pflicht string | Array<{role: string, content: string | Array<{type: string, value: any}>}> Die Eingabe für das Modell: entweder ein String oder ein Array von Nachrichten mit role ("user", "assistant", "system") und content. Das Präfixieren einer Antwort ist mit prefix: true bei einer assistant-Nachricht möglich.
$options object {} Optionale Einstellungen für diesen einen Aufruf.
$options.signal AbortSignal Bricht die Anfrage ab. Das Promise wird dann mit einer AbortError-DOMException abgelehnt.
$options.responseConstraint object | RegExp Ein JSON-Schema oder ein regulärer Ausdruck. Die Antwort muss dieser Struktur entsprechen (strukturierte Ausgabe).
$options.omitResponseConstraintInput boolean false Ist der Wert true, wird das Schema aus responseConstraint nicht zusätzlich als Text in den Kontext geschrieben. Das spart Kontingent, dann solltest du das gewünschte Format aber im Prompt selbst beschreiben.

Rückgabewert

Typ
Promise<string>
Beschreibung
Ein Promise, das mit der vollständigen Antwort des Modells als String erfüllt wird. Mit responseConstraint ist das ein JSON-String, den du mit JSON.parse() umwandelst.

Beispiele

Einfache Frage mit Verfügbarkeitsprüfung

const frageModell = async (frage) => {
  if (!('LanguageModel' in self)) {
    throw new Error('Prompt API wird nicht unterstützt');
  }

  const status = await LanguageModel.availability();
  if (status === 'unavailable') {
    throw new Error('Kein Modell verfügbar');
  }

  const session = await LanguageModel.create({
    initialPrompts: [
      { role: 'system', content: 'Du antwortest knapp und auf Deutsch.' }
    ]
  });

  try {
    return await session.prompt(frage);
  } finally {
    session.destroy(); // Ressourcen freigeben
  }
};

console.log(await frageModell('Was ist ein Promise in JavaScript?'));
Ein Promise ist ein Objekt, das das künftige Ergebnis einer asynchronen Operation darstellt …

Strukturierte Ausgabe per JSON-Schema

const schema = {
  type: 'object',
  properties: {
    stimmung: { type: 'string', enum: ['positiv', 'neutral', 'negativ'] },
    begruendung: { type: 'string' }
  },
  required: ['stimmung', 'begruendung']
};

const session = await LanguageModel.create();

const antwort = await session.prompt(
  'Bewerte diese Kundenrezension: "Lieferung kam zu spät, aber das Produkt ist super."',
  { responseConstraint: schema }
);

const ergebnis = JSON.parse(antwort);
console.log(ergebnis.stimmung);
neutral

Folgefragen im selben Kontext und Abbruch per Timeout

const session = await LanguageModel.create();

await session.prompt('Merke dir: Mein Lieblingsframework ist Svelte.');

const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), 10_000);

try {
  const antwort = await session.prompt(
    [{ role: 'user', content: 'Welches Framework mag ich am liebsten?' }],
    { signal: controller.signal }
  );
  console.log(antwort);
  console.log(`Kontext: ${session.inputUsage} / ${session.inputQuota}`);
} catch (err) {
  if (err.name === 'AbortError') console.warn('Zeitüberschreitung');
  else throw err;
} finally {
  clearTimeout(timer);
}
Dein Lieblingsframework ist Svelte. Kontext: 142 / 6144

// Wichtig · Fallstricke

  • Experimentell: Die Prompt API ist bisher nur in Chromium-Browsern verfügbar (Chrome-Erweiterungen, Origin Trial für Webseiten) und hängt von Hardware und Betriebssystem ab. Firefox und Safari unterstützen sie nicht. Prüfe deshalb immer mit 'LanguageModel' in self und LanguageModel.availability(), ob sie nutzbar ist.
  • Modell-Download: Liefert availability() den Wert "downloadable", wird das Modell beim ersten create() heruntergeladen (mehrere GB). Dafür ist eine Nutzeraktivierung nötig, etwa ein Klick. Den Fortschritt verfolgst du mit dem monitor-Callback und dem Event downloadprogress.
  • Fehler: Das Promise wird z. B. abgelehnt mit QuotaExceededError, wenn die Eingabe den Kontext sprengt, mit InvalidStateError, wenn die Sitzung schon mit destroy() beendet wurde, mit NotSupportedError bei nicht unterstützten Eingabetypen oder Sprachen und mit AbortError nach einem Abbruch.
  • Kontextüberlauf: Wird der Kontext zu voll, verwirft der Browser ältere Nachrichten (nicht aber den System-Prompt) und löst das Event quotaoverflow aus. Den Platzbedarf einer Eingabe kannst du vorher mit measureInputUsage() messen.
  • Nicht deterministisch: Die Antworten können von Aufruf zu Aufruf verschieden sein. Auch mit responseConstraint solltest du das Ergebnis prüfen, bevor du es verwendest.
  • Sicherheit: Gib Modellausgaben niemals ungeprüft über innerHTML aus, sonst droht XSS. Nutze textContent oder bereinige die Ausgabe. Nutzereingaben können außerdem eine Prompt-Injection enthalten, verlasse dich also bei sicherheitskritischen Entscheidungen nicht auf das Modell.
  • Die Verarbeitung läuft lokal auf dem Gerät. Große Prompts können trotzdem mehrere Sekunden dauern, deshalb zeigst du am besten eine Ladeanzeige an.