Publicado em 27 de janeiro de 2025
| Explicação | Web | Extensões | Status do Chrome | Intenção |
|---|---|---|---|---|
| GitHub | Ver | Intenção de envio | ||
| GitHub | Ver | Intenção de teste |
Um dos principais recursos da API Prompt são as sessões. Elas permitem que você tenha uma ou várias conversas em andamento com o modelo de IA, sem que ele perca o contexto do que foi dito. Este guia apresenta as práticas recomendadas para o gerenciamento de sessões com o modelo de linguagem.
Você pode se envolver no gerenciamento de sessões para uma ou mais sessões paralelas se estiver criando um chatbot clássico, em que um usuário interage com a IA. Ou, se você tiver um sistema de gerenciamento de relacionamento com o cliente em que um agente de suporte lida com vários clientes em paralelo e usa a IA para ajudar o agente de suporte a acompanhar as várias conversas.
Inicializar sessões com um comando inicial
Um comando inicial configura o contexto da sessão no início. Por exemplo, você pode usar o comando inicial para informar ao modelo como ele deve responder.
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'
Clonar uma sessão principal
Se você quiser iniciar uma nova sessão após o término de uma sessão ou se quiser ter várias conversas independentes em paralelo, poderá clonar uma sessão principal.
O clone herda comandos iniciais e do sistema em potencial e qualquer histórico de interação da sessão. Isso é útil se, por exemplo, você inicializou a sessão principal com um comando inicial. Dessa forma, seu app só precisa fazer esse trabalho uma vez. Todos os clones herdam o comando inicial da sessão principal.
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.');
Restaurar uma sessão anterior
Com comandos iniciais, você pode preparar o modelo com um conjunto de comandos de exemplo e respostas para gerar resultados melhores. Isso é usado com frequência no comando n-shot para criar respostas que reflitam suas expectativas.
Se você acompanhar as conversas em andamento com o modelo, poderá usar essa prática para restaurar uma sessão. Por exemplo, depois que um navegador é reiniciado, você pode ajudar o usuário a continuar interagindo com o modelo de onde parou. Uma abordagem é acompanhar o histórico da sessão no armazenamento local.
// 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 conversation 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);
}
Preservar a cota de sessão permitindo que o usuário interrompa o modelo
Cada sessão tem uma janela de contexto que pode ser acessada pelos campos relevantes da sessão contextWindow e contextUsage.
const { contextWindow, contextUsage } = languageModel;
const contextWindowLeft = contextWindow - contextUsage;
Quando essa janela de contexto é excedida, a sessão perde o controle das mensagens mais antigas. Isso pode levar a resultados piores se o contexto for importante.
Para preservar a cota, se um usuário determinar que a resposta do modelo não é útil, permita que ele interrompa a sessão com AbortController.
Os métodos prompt() e promptStreaming() aceitam um segundo parâmetro opcional com um campo signal para permitir que o usuário interrompa a sessão.
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);
}
}
Remover sessões não utilizadas
Cada sessão consome memória. Se você iniciou várias sessões grandes, isso pode se tornar um problema. Destrua sessões não utilizadas para aumentar a disponibilidade de recursos.
Demonstração
Confira o gerenciamento de sessões de IA em ação na demonstração de gerenciamento de sessões de IA. Crie várias conversas paralelas com a API Prompt, recarregue a guia ou até mesmo reinicie o navegador e continue de onde parou. Consulte o código-fonte no GitHub.
Aproveite todo o potencial da API Prompt
Ao gerenciar cuidadosamente as sessões de IA com essas técnicas e práticas recomendadas, você pode aproveitar todo o potencial da API Prompt, oferecendo aplicativos mais eficientes, responsivos e centrados no usuário. Você também pode combinar essas abordagens, por exemplo, permitindo que o usuário clone uma sessão anterior restaurada para que ele possa executar cenários hipotéticos.
Agradecimentos
Este guia foi revisado por Sebastian Benz, Andre Bandarra, François Beaufort e Alexandra Klepper.