Best Practices für die Sitzungsverwaltung mit der Prompt API

Veröffentlicht am 27. Januar 2025

Erläuterung Web Erweiterungen Chrome-Status Intent
GitHub Ursprungstest Ursprungstest Chrome 138 Ansicht Absicht zum Testen
GitHub Ursprungstest Ursprungstest für Stichprobenparameter Chrome 148 Ansicht Absicht zum Testen

Ein wichtiges Feature der Prompt API sind Sitzungen. Damit können Sie eine oder mehrere laufende Unterhaltungen mit dem KI-Modell führen, ohne dass das Modell den Kontext des Gesagten verliert. In diesem Leitfaden werden Best Practices für die Sitzungsverwaltung mit dem Language Model vorgestellt.

Sie können die Sitzungsverwaltung für eine oder mehrere parallele Sitzungen verwenden, wenn Sie einen klassischen Chatbot entwickeln, bei dem ein Nutzer mit KI interagiert. Oder wenn Sie ein CRM-System (Customer Relationship Management) haben, in dem ein Kundenservicemitarbeiter mehrere Kunden gleichzeitig betreut und KI verwendet, um den Überblick über die verschiedenen Unterhaltungen zu behalten.

Sitzungen mit einem ersten Prompt initialisieren

Ein erster Prompt legt zu Beginn den Kontext der Sitzung fest. Sie können beispielsweise mit dem ersten Prompt festlegen, wie das Modell antworten soll.

const languageModel = await LanguageModel.create({
  initialPrompts: [{
    role: 'system',
    content: 'You are a helpful assistant and you speak like a pirate.'
  }],
});
console.log(await languageModel.prompt('Tell me a joke.'));
// 'Avast ye, matey! What do you call a lazy pirate?\n\nA **sail-bum!**\n\nAhoy
// there, me hearties!  Want to hear another one? \n'

Hauptsitzung klonen

Wenn Sie nach dem Ende einer Sitzung eine neue Sitzung starten oder mehrere unabhängige Unterhaltungen parallel führen möchten, können Sie eine Hauptsitzung klonen.

Der Klon erbt potenzielle erste und System-Prompts sowie den gesamten Sitzungsverlauf. Das ist beispielsweise nützlich, wenn Sie die Hauptsitzung mit einem ersten Prompt initialisiert haben. So muss Ihre App diese Aufgabe nur einmal ausführen. Alle Klone erben den ersten Prompt aus der Hauptsitzung.

const languageModel = await LanguageModel.create({
  initialPrompts: [{
    role: 'system',
    content: 'You are a helpful assistant and you speak like a pirate.'
  }]
});

// The original session `languageModel` remains unchanged, and
// the two clones can be interacted with independently from each other.
const firstClonedLanguageModel = await languageModel.clone();
const secondClonedLanguageModel = await languageModel.clone();
// Interact with the sessions independently.
await firstClonedLanguageModel.prompt('Tell me a joke about parrots.');
await secondClonedLanguageModel.prompt('Tell me a joke about treasure troves.');
// Each session keeps its own context.
// The first session's context is jokes about parrots.
await firstClonedLanguageModel.prompt('Tell me another.');
// The second session's context is jokes about treasure troves.
await secondClonedLanguageModel.prompt('Tell me another.');

Frühere Sitzung wiederherstellen

Mit ersten Prompts können Sie das Modell mit einer Reihe von Beispiel-Prompts und ‑Antworten vorbereiten, um bessere Ergebnisse zu erzielen. Dies wird häufig beim n-Shot-Prompting verwendet, um Antworten zu erstellen, die Ihren Erwartungen entsprechen.

Wenn Sie laufende Unterhaltungen mit dem Modell im Blick behalten, können Sie diese Methode verwenden, um eine Sitzung wiederherzustellen. Nach einem Neustart des Browsers können Sie beispielsweise dafür sorgen, dass der Nutzer die Interaktion mit dem Modell an der Stelle fortsetzen kann, an der er aufgehört hat. Eine Möglichkeit besteht darin, den Sitzungsverlauf im lokalen Speicher zu speichern.

// Restore the session from localStorage, or initialize a new session.
// The UUID is hardcoded here, but would come from a
// session picker in your user interface.
const uuid = '7e62c0e0-6518-4658-bc38-e7a43217df87';

function getSessionData(uuid) {
  try {
    const storedSession = localStorage.getItem(uuid);
    return storedSession ? JSON.parse(storedSession) : false;
  } catch {
    return false;
  }
}

let sessionData = getSessionData(uuid);

// Initialize a new session.
if (!sessionData) {  
  sessionData = {
    initialPrompts: [],
  };
}

// Initialize the session with the (previously stored or new) session data.
const languageModel = await LanguageModel.create(sessionData);

// Keep track of the ongoing conversion and store it in localStorage.
const prompt = 'Tell me a joke';
try {
  const stream = languageModel.promptStreaming(prompt);
  let result = '';
  // You can already work with each `chunk`, but then store
  // the final `result` in history.
  for await (const chunk of stream) {
    // In practice, you'd render the chunk.
    console.log(chunk);
    result = chunk;
  }

  sessionData.initialPrompts.push(
    { role: 'user', content: prompt },
    { role: 'assistant', content: result },
  );

  // To avoid growing localStorage infinitely, make sure to delete
  // no longer used sessions from time to time.
  localStorage.setItem(uuid, JSON.stringify(sessionData));
} catch (err) {
  console.error(err.name, err.message);
}

Sitzungskontingent beibehalten, indem der Nutzer das Modell stoppen kann

Jede Sitzung hat ein Kontextfenster, das Sie über die entsprechenden Felder contextWindow und contextUsage der Sitzung aufrufen können.

const { contextWindow, contextUsage } = languageModel;
const contextWindowLeft = contextWindow - contextUsage;

Wenn dieses Kontextfenster überschritten wird, verliert die Sitzung den Überblick über die ältesten Nachrichten. Das kann zu schlechteren Ergebnissen führen, wenn der Kontext wichtig war. Wenn ein Nutzer feststellt, dass die Antwort des Modells nicht hilfreich ist, kann er die Sitzung mit AbortController beenden, um das Kontingent zu schonen.

Sowohl die Methode prompt() als auch die Methode promptStreaming() akzeptieren einen optionalen zweiten Parameter mit einem Feld signal, damit der Nutzer die Sitzung beenden kann.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

try {
  const stream = languageModel.promptStreaming('Write me a poem!', {
    signal: controller.signal,
  });
  for await (const chunk of stream) {
    console.log(chunk);
  }
} catch (err) {
  // Ignore `AbortError` errors.
  if (err.name !== 'AbortError') {
    console.error(err.name, err.message);
  }
}

Nicht verwendete Sitzungen entfernen

Jede Sitzung verbraucht Arbeitsspeicher. Wenn Sie mehrere große Sitzungen gestartet haben, kann das zu einem Problem werden. Entfernen Sie nicht verwendete Sitzungen, um die Ressourcenverfügbarkeit zu erhöhen.

Demo

In der Demo zur KI-Sitzungsverwaltung können Sie sehen, wie die KI-Sitzungsverwaltung in der Praxis funktioniert. Erstellen Sie mehrere parallele Unterhaltungen mit der Prompt API, laden Sie den Tab neu oder starten Sie sogar Ihren Browser neu und setzen Sie die Unterhaltung an der Stelle fort, an der Sie aufgehört haben. Den Quellcode finden Sie auf GitHub.

Das volle Potenzial der Prompt API nutzen

Wenn Sie KI-Sitzungen mit diesen Techniken und Best Practices sorgfältig verwalten, können Sie das volle Potenzial der Prompt API nutzen und effizientere, reaktionsschnellere und nutzerorientiertere Anwendungen entwickeln. Sie können diese Ansätze auch kombinieren, indem Sie dem Nutzer beispielsweise ermöglichen, eine wiederhergestellte frühere Sitzung zu klonen, damit er Was-wäre-wenn-Szenarien ausführen kann.

Danksagungen

Dieser Leitfaden wurde von Sebastian Benz, Andre Bandarra, François Beaufort und Alexandra Klepper geprüft.