Publicado em 27 de janeiro de 2025
Explicação | Web | Extensões | Status do Chrome | Intenção |
---|---|---|---|---|
GitHub | Não relevante | Não relevante |
As sessões são um recurso importante da API Prompt. Elas permitem que você tenha uma ou várias conversas em andamento com o modelo de IA, sem que ele perca o controle do contexto do que foi dito. Este guia apresenta as práticas recomendadas para gerenciamento de sessões com o modelo de linguagem.
Talvez você queira se envolver no gerenciamento de 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 representante de suporte lida com vários clientes em paralelo e usa a IA para ajudar o representante a acompanhar as várias conversas.
Inicializar uma sessão com uma solicitação do sistema
Uma solicitação do sistema configura o contexto da sessão no início. Por exemplo, é possível usar o comando do sistema para informar ao modelo como ele deve responder.
// Make this work in web apps and in extensions. const aiNamespace = LanguageModel || chrome.aiOriginTrial.languageModel; const languageModel = await aiNamespace.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'
Clonar uma sessão principal
Se você quiser iniciar uma nova sessão após o término de uma ou ter várias conversas independentes em paralelo, clone uma sessão principal.
O clone herda parâmetros de sessão, como temperature
ou topK
, e qualquer histórico de interação da sessão. Isso é útil se, por exemplo, você inicializou a sessão principal com uma solicitação do sistema. Dessa forma, seu app só precisa fazer isso uma vez. Todos os clones herdam a solicitação do sistema da sessão principal.
// Make this work in web apps and in extensions. const aiNamespace = LanguageModel || chrome.aiOriginTrial.languageModel; const languageModel = await aiNamespace.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.');
Restaurar uma sessão anterior
Com os comandos iniciais, você pode preparar o modelo com um conjunto de comandos e respostas de exemplo para gerar melhores resultados. Isso é usado com frequência em comandos de uma única foto para criar respostas que reflitam suas expectativas.
Se você mantiver o controle das 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 ele parou. Uma abordagem é acompanhar o histórico de sessões no armazenamento local.
// Make this work in web apps and in extensions. const aiNamespace = LanguageModel || chrome.aiOriginTrial.languageModel // 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.params(); sessionData = { systemPrompt: '', initialPrompts: [], topK: defaultTopK, temperature: defaultTemperature, }; } // Initialize the session with the (previously stored or new) session data. const languageModel = await aiNamespace.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); }
Preservar a cota de sessão permitindo que o usuário pare o modelo
Cada sessão tem uma janela de contexto que pode ser acessada ao acessar os campos relevantes da sessão maxTokens
, tokensLeft
e tokensSoFar
.
const { maxTokens, tokensLeft, tokensSoFar } = languageModel;
Quando essa janela de contexto é excedida, a sessão perde o controle das mensagens mais antigas, o que pode ser indesejável porque esse contexto pode ter sido importante. Para preservar a cota, se, após enviar uma instrução, o usuário perceber que uma resposta não será útil, permita que ele impeça o modelo de linguagem de responder usando o AbortController
.
Os métodos prompt()
e promptStreaming()
aceitam um segundo parâmetro opcional com um campo signal
para permitir que o usuário pare 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); } }
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, recarregando a guia ou até mesmo reiniciando o navegador e continue de onde parou. Consulte o código-fonte no GitHub.
Conclusões
Ao gerenciar cuidadosamente as sessões de IA com essas técnicas e práticas recomendadas, você pode desbloquear todo o potencial da API Prompt, oferecendo aplicativos mais eficientes, responsivos e centrados no usuário. Também é possível combinar essas abordagens, por exemplo, permitindo que o usuário clone uma sessão restaurada para executar cenários "e se".
Agradecimentos
Este guia foi revisado por Sebastian Benz, Andre Bandarra, François Beaufort e Alexandra Klepper.