Veröffentlicht: 27. Januar 2025
Erklärvideo | Web | Erweiterungen | Chrome-Status | Absicht |
---|---|---|---|---|
GitHub | Nicht zutreffend | Nicht zutreffend |
Eine wichtige Funktion der Prompt API sind Sitzungen. So können Sie eine oder mehrere Unterhaltungen mit dem KI-Modell führen, ohne dass das Modell den Kontext verliert. In diesem Leitfaden werden Best Practices für die Sitzungsverwaltung mit dem Sprachmodell vorgestellt.
Wenn Sie einen klassischen Chatbot erstellen, bei dem ein Nutzer mit der KI interagiert, sollten Sie die Sitzungsverwaltung für eine oder mehrere parallele Sitzungen verwenden. Oder Sie haben ein Kundenbeziehungsmanagementsystem, bei dem ein Kundenservicemitarbeiter parallel mit mehreren Kunden zu tun hat und mithilfe von KI den Überblick über die verschiedenen Unterhaltungen behält.
Sitzung mit einem Systemprompt initialisieren
Mit einer Systemaufforderung wird zu Beginn der Kontext der Sitzung festgelegt. Sie können dem Modell beispielsweise über den Systemprompt mitteilen, wie es reagieren soll.
// Make this work in web apps and in extensions.
const aiNamespace = self.ai || chrome.aiOriginTrial || chrome.ai;
const languageModel = await aiNamespace.languageModel.create({
systemPrompt: '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 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 Sitzungsparameter wie temperature
oder topK
und den gesamten Interaktionsverlauf der Sitzung. Dies ist beispielsweise nützlich, wenn Sie die Hauptsitzung mit einem Systemaufforderung initialisiert haben. So muss Ihre App diese Arbeit nur einmal ausführen – alle Klone übernehmen die Systemaufforderung von der Hauptsitzung.
// Make this work in web apps and in extensions.
const aiNamespace = self.ai || chrome.aiOriginTrial || chrome.ai;
const languageModel = await aiNamespace.languageModel.create({
systemPrompt: '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 Beispielprompts und ‑antworten vorbereiten, um bessere Ergebnisse zu erzielen. Dieser Ansatz wird häufig bei N-Shot-Prompts verwendet, um Antworten zu erstellen, die Ihren Erwartungen entsprechen.
Wenn Sie den Überblick über laufende Unterhaltungen mit dem Modell behalten, können Sie eine Sitzung so wiederherstellen. Beispielsweise können Sie Nutzern nach einem Browserneustart dabei helfen, dort weiterzumachen, wo sie aufgehört haben. Eine Möglichkeit besteht darin, den Sitzungsverlauf im lokalen Speicher zu verfolgen.
// Make this work in web apps and in extensions.
const aiNamespace = self.ai || chrome.aiOriginTrial || chrome.ai;
// 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 aiNamespace.languageModel.capabilities();
sessionData = {
systemPrompt: '',
initialPrompts: [],
topK: defaultTopK,
temperature: defaultTemperature,
};
}
// Initialize the session with the (previously stored or new) session data.
const languageModel = await aiNamespace.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 beenden kann
Jede Sitzung hat ein Kontextfenster, das Sie aufrufen können, indem Sie auf die relevanten Felder der Sitzung maxTokens
, tokensLeft
und tokensSoFar
zugreifen.
const { maxTokens, tokensLeft, tokensSoFar } = languageModel;
Wenn dieses Kontextfenster überschritten wird, verliert die Sitzung den Überblick über die ältesten Nachrichten. Das kann unerwünscht sein, da dieser Kontext möglicherweise wichtig war. Damit das Kontingent nicht überschritten wird, sollte der Nutzer die Möglichkeit haben, das Sprachmodell über die AbortController
anzuhalten, wenn er nach dem Einreichen eines Prompts feststellt, dass eine Antwort nicht nützlich ist.
Sowohl die Methode prompt()
als auch die Methode promptStreaming()
akzeptieren einen optionalen zweiten Parameter mit einem signal
-Feld, mit dem 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);
}
}
Demo
In der Demo zur KI-Sitzungsverwaltung können Sie sich die KI-Sitzungsverwaltung in Aktion ansehen. Mit der Prompt API können Sie mehrere parallele Unterhaltungen erstellen, den Tab neu laden oder sogar den Browser neu starten und dort weitermachen, wo Sie aufgehört haben. Weitere Informationen finden Sie im Quellcode auf GitHub.
Ergebnisse
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, responsivere und nutzerorientiertere Anwendungen bereitstellen. Sie können diese Ansätze auch kombinieren, z. B. indem Sie den Nutzern erlauben, eine wiederhergestellte frühere Sitzung zu klonen, damit sie „Was-wäre-wenn-Szenarien“ ausführen können.
Danksagungen
Dieser Leitfaden wurde von Sebastian Benz, Andre Bandarra, François Beaufort und Alexandra Klepper geprüft.