Signatur
Beschreibung
Die schreibgeschützte Eigenschaft contextUsage einer LanguageModel-Sitzung (Prompt API, eingebaute KI im Browser) gibt an, wie viele Token die Sitzung im Kontextfenster des Modells gerade belegt. Mitgezählt werden alle Inhalte, die das Modell für die Unterhaltung im Gedächtnis behält: der Systemprompt und initialPrompts aus LanguageModel.create(), alle bisherigen Eingaben über prompt(), promptStreaming() und append() sowie die Antworten des Modells.
Zusammen mit contextWindow, der Obergrenze an Token für die Sitzung, sehen Sie so, wie viel Platz noch übrig ist: session.contextWindow - session.contextUsage. Damit können Sie eine Füllstandsanzeige bauen, vor langen Eingaben warnen oder rechtzeitig eine neue Sitzung starten, bevor das Modell ältere Nachrichten verwirft.
Der Wert wird nach jeder abgeschlossenen Interaktion neu berechnet. Wie viele Token eine bestimmte Eingabe zusätzlich belegen würde, bevor Sie sie abschicken, erfahren Sie mit der Methode measureContextUsage(). Wenn das Kontextfenster überläuft, löst die Sitzung das Ereignis contextoverflow aus.
Rückgabewert
create() ohne Systemprompt ist der Wert 0 oder sehr klein.Beispiele
Belegung nach einem Prompt auslesen
const session = await LanguageModel.create({
initialPrompts: [
{ role: 'system', content: 'Du bist ein hilfsbereiter Assistent und antwortest kurz auf Deutsch.' }
]
});
console.log('Start:', session.contextUsage);
await session.prompt('Erkläre in zwei Sätzen, was ein Promise ist.');
console.log(`Belegt: ${session.contextUsage} von ${session.contextWindow} Token`);
Füllstandsanzeige für eine Chat-Oberfläche
const session = await LanguageModel.create();
const meter = document.querySelector('#context-meter'); // <meter>-Element
const updateMeter = () => {
meter.max = session.contextWindow;
meter.value = session.contextUsage;
meter.title = `${Math.round((session.contextUsage / session.contextWindow) * 100)} % belegt`;
};
document.querySelector('#chat-form').addEventListener('submit', async (event) => {
event.preventDefault();
const input = event.target.elements.message;
const answer = await session.prompt(input.value);
document.querySelector('#log').append(answer, document.createElement('br'));
input.value = '';
updateMeter();
});
updateMeter();
Vor dem Senden prüfen, ob die Eingabe noch passt
const sendSafely = async (session, text) => {
const needed = await session.measureContextUsage(text);
const free = session.contextWindow - session.contextUsage;
if (needed > free) {
console.warn(`Zu wenig Platz: ${needed} Token nötig, ${free} frei. Starte neue Sitzung.`);
session.destroy();
session = await LanguageModel.create();
}
return { session, answer: await session.prompt(text) };
};
let session = await LanguageModel.create();
({ session } = await sendSafely(session, 'Fasse den folgenden Artikel zusammen: …'));
console.log(session.contextUsage);
// Wichtig · Fallstricke
- Experimentell: Die Prompt API gibt es bisher nur in Chromium-Browsern (Chrome für Erweiterungen, im Web über einen Origin Trial bzw. Flags). Firefox und Safari unterstützen sie nicht. Prüfen Sie vorher mit
'LanguageModel' in selfundLanguageModel.availability(), ob die API verfügbar ist. - Umbenennung: In älteren Chrome-Versionen und Anleitungen heißt die Eigenschaft
inputUsage, die ObergrenzeinputQuota, die MessmethodemeasureInputUsage()und das Ereignisquotaoverflow. Wenn Sie ältere Versionen unterstützen müssen, fragen Sie beide Namen ab, z. B.session.contextUsage ?? session.inputUsage. - Die Token-Anzahl hängt vom Modell und seinem Tokenizer ab. Sie lässt sich nicht verlässlich aus der Zeichenzahl ableiten, und derselbe Text kann in verschiedenen Browsern oder Modellversionen unterschiedlich viele Token ergeben.
- Während eine Antwort über
promptStreaming()noch läuft, ist der Wert möglicherweise noch nicht aktuell. Lesen Sie ihn erst aus, wenn der Stream vollständig abgearbeitet ist. - Sitzungen, die mit
clone()erzeugt werden, übernehmen den bisherigen Verlauf und damit auch die Belegung. Nachdestroy()ist die Sitzung nicht mehr nutzbar.