Veröffentlicht am 27. Januar 2025
Erklärung | Web | Erweiterungen | Chrome-Status | Absicht |
---|---|---|---|---|
GitHub | Ansicht | Absicht, Tests durchzuführen |
Ein wichtiges Feature der Prompt API sind Sitzungen. Sie ermöglichen es Ihnen, eine oder mehrere laufende Unterhaltungen mit dem KI-Modell zu führen, ohne dass das Modell den Kontext der Aussagen verliert. In diesem Leitfaden werden Best Practices für die Sitzungsverwaltung mit dem Sprachmodell vorgestellt.
Die Sitzungsverwaltung für eine oder mehrere parallele Sitzungen kann sinnvoll sein, 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 Supportmitarbeiter mehrere Kunden gleichzeitig betreut und KI nutzt, um den Überblick über die verschiedenen Unterhaltungen zu behalten.
Sitzungen mit einem ersten Prompt initialisieren
Mit einem ersten Prompt wird zu Beginn der Sitzung der Kontext festgelegt. Sie können beispielsweise mit dem ursprünglichen Prompt dem Modell mitteilen, wie es reagieren 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 übernimmt Sitzungsparameter wie temperature
oder topK
sowie den gesamten Sitzungsinteraktionsverlauf. Das ist beispielsweise nützlich, wenn Sie die Hauptsitzung mit einem ersten Prompt initialisiert haben. So muss Ihre App diese Arbeit nur einmal ausführen. Alle Klone übernehmen den ursprünglichen 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. Das wird häufig beim n-shot-Prompting verwendet, um Antworten zu erstellen, die Ihren Erwartungen entsprechen.
Wenn Sie den Überblick über laufende Unterhaltungen mit dem Modell behalten, können Sie diese Methode verwenden, um eine Sitzung wiederherzustellen. Wenn ein Browser beispielsweise neu gestartet wird, können Sie dem Nutzer helfen, die Interaktion mit dem Modell dort fortzusetzen, wo er aufgehört hat. Eine Möglichkeit besteht darin, den Sitzungsverlauf im lokalen Speicher zu verfolgen.
// 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) {
// Get the current default parameters so they can be restored as they were,
// even if the default values change in the future.
const { defaultTopK, defaultTemperature } =
await LanguageModel.params();
sessionData = {
initialPrompts: [],
topK: defaultTopK,
temperature: defaultTemperature,
};
}
// 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 schonen, indem der Nutzer das Modell beenden kann
Jede Sitzung hat ein Kontextfenster, das Sie aufrufen können, indem Sie auf die relevanten Felder der Sitzung zugreifen: maxTokens
, tokensLeft
und tokensSoFar
.
const { maxTokens, tokensLeft, tokensSoFar } = languageModel;
Wenn dieses Kontextfenster überschritten wird, gehen die ältesten Nachrichten in der Sitzung verloren. Wenn der Kontext wichtig war, kann dies zu schlechteren Ergebnissen führen.
Um das Kontingent zu schonen, sollten Nutzer die Sitzung mit AbortController
beenden können, wenn sie die Antwort des Modells nicht für nützlich halten.
Sowohl die Methode prompt()
als auch die Methode promptStreaming()
akzeptieren einen optionalen zweiten Parameter mit einem signal
-Feld, 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 belegt Arbeitsspeicher. Wenn Sie mehrere große Sitzungen gestartet haben, kann dies zu einem Problem werden. Löschen Sie nicht verwendete Sitzungen, um die Ressourcenverfügbarkeit zu erhöhen.
Demo
Demo zur KI-Sitzungsverwaltung Sie können mehrere parallele Unterhaltungen mit der Prompt API erstellen, den Tab neu laden oder sogar den Browser neu starten und dort weitermachen, wo Sie aufgehört haben. Quellcode 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 erlauben, eine wiederhergestellte vergangene Sitzung zu klonen, damit er „Was wäre wenn“-Szenarien ausführen kann.
Danksagungen
Diese Anleitung wurde von Sebastian Benz, Andre Bandarra, François Beaufort und Alexandra Klepper geprüft.