Publicado: 27 de enero de 2025
Explicación | Web | Extensiones | Estado de Chrome | Intent |
---|---|---|---|---|
GitHub | Ver | Intención de experimentar |
Una función clave de la API de Prompt son las sesiones. Te permiten tener una o varias conversaciones en curso con el modelo de IA, sin que este pierda el contexto de lo que se dijo. En esta guía, se presentan las prácticas recomendadas para la administración de sesiones con el modelo de lenguaje.
Es posible que desees participar en la administración de sesiones para una o más sesiones paralelas si estás creando un chatbot clásico, en el que un usuario interactúa con la IA. O bien, si tienes un sistema de administración de relaciones con los clientes en el que un agente de asistencia al cliente se ocupa de varios clientes en paralelo y usa la IA para ayudar al agente a hacer un seguimiento de las diversas conversaciones.
Inicializa sesiones con una instrucción inicial
Una instrucción inicial establece el contexto de la sesión al principio. Por ejemplo, puedes usar la instrucción inicial para indicarle al modelo cómo debe 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'
Cómo clonar una sesión principal
Si quieres iniciar una sesión nueva después de que finalice una, o si quieres tener varias conversaciones independientes en paralelo, puedes clonar una sesión principal.
El clon hereda los parámetros de sesión, como temperature
o topK
, y cualquier historial de interacción de la sesión. Esto es útil si, por ejemplo, inicializaste la sesión principal con una instrucción inicial. De esta manera, tu app solo necesita hacer este trabajo una vez: todos los clones heredan la instrucción inicial de la sesión 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.');
Cómo restablecer una sesión anterior
Con los prompts iniciales, puedes preparar el modelo con un conjunto de ejemplos de instrucciones y respuestas para generar mejores resultados. A menudo, se usa en el n-shot prompting para crear respuestas que reflejen tus expectativas.
Si haces un seguimiento de las conversaciones en curso con el modelo, puedes usar esta práctica para restablecer una sesión. Por ejemplo, después de que se reinicia un navegador, puedes ayudar a tu usuario a seguir interactuando con el modelo desde donde lo dejó. Un enfoque es hacer un seguimiento del historial de la sesión en el almacenamiento 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) {
// 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);
}
Preserva la cuota de sesión permitiendo que el usuario detenga el modelo
Cada sesión tiene una ventana de contexto que puedes ver si accedes a los campos relevantes de la sesión inputQuota
y inputUsage
.
const { inputQuota, inputUsage } = languageModel;
const inputQuotaLeft = inputQuota - inputUsage;
Cuando se supera esta ventana de contexto, la sesión pierde el registro de los mensajes más antiguos. Esto puede generar peores resultados si el contexto era importante.
Para conservar la cuota, si un usuario determina que la respuesta del modelo no es útil, permítele detener la sesión con AbortController
.
Tanto el método prompt()
como el promptStreaming()
aceptan un segundo parámetro opcional con un campo signal
para permitir que el usuario detenga la sesión.
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);
}
}
Quita las sesiones que no se usan
Cada sesión consume memoria. Si iniciaste varias sesiones grandes, esto puede convertirse en un problema. Borra las sesiones sin usar para aumentar la disponibilidad de recursos.
Demostración
Mira la administración de sesiones de IA en acción en la demostración de administración de sesiones de IA. Crea varias conversaciones paralelas con la API de Prompt, vuelve a cargar la pestaña o incluso reinicia el navegador, y continúa donde lo dejaste. Consulta el código fuente en GitHub.
Aprovecha todo el potencial de la API de Prompt
Si administras cuidadosamente las sesiones de IA con estas técnicas y prácticas recomendadas, podrás aprovechar todo el potencial de la API de Prompt y ofrecer aplicaciones más eficientes, responsivas y centradas en el usuario. También puedes combinar estos enfoques, por ejemplo, permitiendo que el usuario clone una sesión pasada restaurada para que pueda ejecutar situaciones hipotéticas.
Agradecimientos
Esta guía fue revisada por Sebastian Benz, Andre Bandarra, François Beaufort y Alexandra Klepper.