Gepubliceerd: 27 januari 2025
| Uitleg | Web | Uitbreidingen | Chrome-status | Intentie |
|---|---|---|---|---|
| GitHub | Weergave | Voornemen om te experimenteren |
Een belangrijk kenmerk van de Prompt API zijn sessies. Hiermee kunt u één of meerdere lopende gesprekken voeren met het AI-model, zonder dat het model de context van wat er gezegd is uit het oog verliest. Deze handleiding introduceert de beste werkwijzen voor sessiebeheer met het taalmodel.
Als u een klassieke chatbot bouwt waarbij één gebruiker met AI communiceert, wilt u wellicht sessiebeheer toepassen voor een of meer parallelle sessies. Of als u een klantrelatiebeheersysteem (CRM) hebt waarbij één supportmedewerker meerdere klanten tegelijk bedient en AI gebruikt om het overzicht over de verschillende gesprekken te bewaren.
Begin sessies met een initiële prompt.
Een eerste prompt bepaalt de context van de sessie aan het begin. Je kunt de eerste prompt bijvoorbeeld gebruiken om het model te vertellen hoe het moet reageren.
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'
Een hoofdsessie klonen
Als je na afloop van een sessie een nieuwe sessie wilt starten, of als je meerdere onafhankelijke gesprekken parallel wilt voeren, kun je een hoofdsessie klonen.
De kloon erft eventuele begin- en systeemprompts en de interactiegeschiedenis van de sessie. Dit is handig als u bijvoorbeeld de hoofdsessie met een beginprompt hebt geïnitialiseerd. Op deze manier hoeft uw app dit maar één keer te doen: alle klonen erven de beginprompt van de hoofdsessie.
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.');
Een eerdere sessie herstellen
Met initiële prompts kun je het model voorbereiden met een reeks voorbeeldprompts en -reacties, om betere resultaten te genereren. Dit wordt vaak gebruikt bij n-shot prompting , om reacties te creëren die aansluiten bij je verwachtingen.
Als je lopende gesprekken met het model bijhoudt, kun je deze methode gebruiken om een sessie te herstellen. Je kunt je gebruiker bijvoorbeeld helpen om na een herstart van de browser verder te gaan met het model vanaf het punt waar hij of zij was gebleven. Een manier om dit te doen is door de sessiegeschiedenis lokaal op te slaan.
// 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);
}
Behoud het sessiequotum door de gebruiker het model te laten stoppen.
Elke sessie heeft een contextvenster dat u kunt bekijken door de relevante velden van de sessie inputQuota en inputUsage te raadplegen.
const { inputQuota, inputUsage } = languageModel;
const inputQuotaLeft = inputQuota - inputUsage;
Wanneer dit contextvenster wordt overschreden, verliest de sessie het overzicht over de oudste berichten. Dit kan tot slechtere resultaten leiden als de context belangrijk was. Om het quotum te behouden, moet een gebruiker de mogelijkheid krijgen om de sessie te beëindigen met AbortController als hij of zij van mening is dat het antwoord van het model niet nuttig is.
Zowel de prompt() als de promptStreaming() methode accepteren een optionele tweede parameter met een signal , waarmee de gebruiker de sessie kan beëindigen.
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);
}
}
Verwijder ongebruikte sessies
Elke sessie verbruikt geheugen. Als u meerdere grote sessies hebt gestart, kan dit een probleem worden. Beëindig ongebruikte sessies om de beschikbaarheid van resources te verhogen.
Demo
Bekijk AI-sessiebeheer in actie in de demo . Maak meerdere parallelle gesprekken met de Prompt API, vernieuw het tabblad of herstart zelfs uw browser en ga verder waar u gebleven was. Bekijk de broncode op GitHub .
Ontgrendel het volledige potentieel van de Prompt API
Door AI-sessies zorgvuldig te beheren met behulp van deze technieken en best practices, kunt u het volledige potentieel van de Prompt API benutten en efficiëntere, responsievere en gebruikersgerichte applicaties leveren. U kunt deze benaderingen ook combineren, bijvoorbeeld door de gebruiker een herstelde eerdere sessie te laten klonen, zodat ze 'wat als'-scenario's kunnen uitvoeren.
Dankbetuigingen
Deze handleiding is beoordeeld door Sebastian Benz , Andre Bandarra , François Beaufort en Alexandra Klepper .