Data di pubblicazione: 27 gennaio 2025
Spiegazione | Web | Estensioni | Stato di Chrome | Intenzione |
---|---|---|---|---|
GitHub | Visualizza | Intenzione di sperimentare |
Una delle funzionalità chiave dell'API Prompt sono le sessioni. Ti consentono di avere una o più conversazioni in corso con il modello di AI, senza che il modello perda traccia del contesto di ciò che è stato detto. Questa guida introduce le best practice per la gestione delle sessioni con il modello linguistico.
Potresti voler eseguire la gestione delle sessioni per una o più sessioni parallele se stai creando un chatbot classico, in cui un utente interagisce con l'AI. Oppure, se hai un sistema di gestione delle relazioni con i clienti in cui un agente dell'assistenza gestisce più clienti in parallelo e utilizza l'AI per aiutarlo a tenere traccia delle varie conversazioni.
Inizializzare le sessioni con un prompt iniziale
Un prompt iniziale imposta il contesto della sessione all'inizio. Ad esempio, puoi utilizzare il prompt iniziale per indicare al modello come deve rispondere.
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'
Clonare una sessione principale
Se vuoi avviare una nuova sessione al termine di una sessione o se vuoi avere più conversazioni indipendenti in parallelo, puoi clonare una sessione principale.
Il clone eredita i parametri di sessione, ad esempio temperature
o topK
, e la cronologia delle interazioni della sessione. Ciò è utile se, ad esempio, hai inizializzato
la sessione principale con un prompt iniziale. In questo modo, la tua app deve eseguire
questa operazione una sola volta: tutti i cloni ereditano il prompt iniziale dalla sessione principale.
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.');
Ripristinare una sessione precedente
Con i prompt iniziali, puoi preparare il modello con un insieme di prompt ed esempi di risposte per generare risultati migliori. Viene spesso utilizzato nel prompt n-shot per creare risposte che rispecchiano le tue aspettative.
Se tieni traccia delle conversazioni in corso con il modello, puoi utilizzare questa pratica per ripristinare una sessione. Ad esempio, dopo il riavvio di un browser, puoi aiutare l'utente a continuare a interagire con il modello da dove aveva interrotto. Un approccio consiste nel tenere traccia della cronologia delle sessioni nello spazio di archiviazione locale.
// 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);
}
Conserva la quota di sessione consentendo all'utente di interrompere il modello
Ogni sessione ha una finestra di contesto che puoi visualizzare accedendo ai campi pertinenti della sessione inputQuota
e inputUsage
.
const { inputQuota, inputUsage } = languageModel;
const inputQuotaLeft = inputQuota - inputUsage;
Quando questa finestra di contesto viene superata, la sessione perde traccia dei messaggi più vecchi. Se il contesto era importante, questo potrebbe portare a risultati peggiori.
Per preservare la quota, se un utente ritiene che la risposta del modello non sia utile,
consenti di interrompere la sessione con AbortController
.
Sia il metodo prompt()
sia il metodo promptStreaming()
accettano un secondo parametro facoltativo con un campo signal
, per consentire all'utente di interrompere la sessione.
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);
}
}
Rimuovere le sessioni inutilizzate
Ogni sessione consuma memoria. Se hai avviato diverse sessioni di grandi dimensioni, questo potrebbe diventare un problema. Elimina le sessioni inutilizzate per aumentare la disponibilità delle risorse.
Demo
Guarda la gestione delle sessioni AI in azione nella demo sulla gestione delle sessioni AI. Crea più conversazioni parallele con l'API Prompt, ricarica la scheda o riavvia il browser e continua da dove avevi interrotto. Consulta il codice sorgente su GitHub.
Sfrutta tutto il potenziale dell'API Prompt
Gestendo con attenzione le sessioni di AI con queste tecniche e best practice, puoi sfruttare tutto il potenziale dell'API Prompt, creando applicazioni più efficienti, reattive e incentrate sull'utente. Puoi anche combinare questi approcci, ad esempio consentendo all'utente di clonare una sessione passata ripristinata, in modo da poter eseguire scenari ipotetici.
Ringraziamenti
Questa guida è stata esaminata da Sebastian Benz, Andre Bandarra, François Beaufort e Alexandra Klepper.