Signatur
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:
initialPromptsgibt einen Systemprompt und einen Gesprächsverlauf (Few-Shot-Beispiele) vor.temperatureundtopKsteuern, wie zufällig die Antworten ausfallen.expectedInputsundexpectedOutputslegen Eingabearten (Text, Bild, Audio) und Sprachen fest.signalbricht 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
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);
});
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
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);
}
}