Veröffentlicht: 27. Januar 2025
Die Prompt API ist eine der integrierten KI-APIs, die das Chrome-Team derzeit untersucht. Sie können die Funktion lokal mit Ihren Apps testen, indem Sie am Early Preview-Programm teilnehmen. Sie können sie auch in Ihren Chrome-Erweiterungen in der Produktion testen, indem Sie sich für den Prompt API-Ursprungstest für Chrome-Erweiterungen registrieren. 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.
Anwendungsfälle für die Sitzungsverwaltung für eine oder mehrere parallele Sitzungen sind beispielsweise klassische Chatbots, bei denen ein Nutzer mit einer KI interagiert, oder Kundenbeziehungsmanagementsysteme, bei denen ein Kundenservicemitarbeiter parallel mit mehreren Kunden spricht und KI nutzt, um den Überblick über die verschiedenen Unterhaltungen zu behalten.
Sitzung mit einem Systemprompt initialisieren
Das erste Konzept, das Sie kennen sollten, ist der Systemvorschlag. Sie legt den Gesamtkontext einer Sitzung zu Beginn fest. Sie können beispielsweise mit dem Systemprompt dem Modell 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 eine App haben, in der Sie nach einer Sitzung eine neue starten möchten, oder eine App, in der Sie unabhängige Unterhaltungen in verschiedenen Sitzungen parallel führen möchten, können Sie eine Hauptsitzung klonen. Der Klon übernimmt Sitzungsparameter wie temperature
oder topK
aus dem Original sowie den potenziellen Sitzungsinteraktionsverlauf.
Dies ist beispielsweise dann nützlich, wenn Sie die Hauptsitzung mit einer Systemaufforderung initialisiert haben. So muss Ihre App diese Arbeit nur einmal ausführen und alle Klone übernehmen die 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
Das dritte Konzept, das Sie lernen sollten, ist das Konzept der ersten Prompts. Ursprünglich wurde sie für n-Shot-Prompts verwendet, d. h. zum Vorbereiten des Modells mit einer Reihe von n Beispielprompts und ‑antworten, damit die Antworten auf tatsächliche Prompts genauer sind. Wenn Sie laufende Unterhaltungen mit dem Modell im Blick behalten, können Sie das Konzept der ersten Prompts zum Wiederherstellen einer Sitzung „missbrauchen“, z. B. nach einem Browserneustart, damit der Nutzer mit dem Modell dort weitermachen kann, wo er aufgehört hat. Das folgende Code-Snippet zeigt, wie Sie vorgehen könnten, wenn Sie den Sitzungsverlauf im localStorage im Blick behalten.
// 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, wenn die Antwort nicht nützlich ist
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 prompt()
- als auch die promptStreaming()
-Methode akzeptieren einen optionalen zweiten Parameter mit einem signal
-Feld, mit dem der Nutzer die Beantwortung der Anfrage 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. Viel Spaß!
Danksagungen
Dieser Leitfaden wurde von Sebastian Benz, Andre Bandarra, François Beaufort und Alexandra Klepper geprüft.